【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密

【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密

目录

🍔 GPT2的架构

🍔 GPT2模型的细节

2.1 模型过程

2.2 GPT2工作细节探究

🍔 小结

学习目标掌握GPT2的架构掌握GPT2的训练任务和模型细节

🍔 GPT2的架构

从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块的Transformer很像.

所谓语言模型, 作用就是根据已有句子的一部分, 来预测下一个单词会是什么. 现实应用中大家最熟悉的一个语言模型应用, 就是智能手机上的输入法, 它可以根据当前输入的内容智能推荐下一个要打的字.


GPT2也是一个语言预测生成模型, 只不过比手机上应用的模型要大很多, 也更加复杂. 常见的手机端应用的输入法模型基本占用50MB空间, 而OpenAI的研究人员使用了40GB的超大数据集来训练GPT2, 训练后的GPT2模型最小的版本也要占用超过500MB空间来存储所有的参数, 至于最大版本的GPT2则需要超过6.5GB的存储空间.

自从Transformer问世以来, 很多预训练语言模型的工作都在尝试将编码器或解码器堆叠的尽可能高, 那类似的模型可以堆叠到多深呢? 事实上, 这个问题的答案也就是区别不同GPT2版本的主要因素之一. 比如最小版本的GPT2堆叠了12层, 中号的24层, 大号的36层, 超大号的堆叠了整整48层!


🍔 GPT2模型的细节

以机器人第一法则为例, 来具体看GPT2的工作细节. * 机器人第一法则: 机器人不得伤害人类, 或者目睹人类将遭受危险而袖手旁观.

2.1 模型过程

首先明确一点: GPT2的工作流程很像传统语言模型, 一次只输出一个单词(token).

GPT2之所以在生成式任务中表现优秀, 是因为在每个新单词(token)产生后, 该单词就被添加在之前生成的单词序列后面, 添加后的新序列又会成为模型下一步的新输入. 这种机制就叫做自回归(auto-regression), 如下所示:


其次明确一点: GPT2模型是一个只包含了Transformer Decoder模块的模型.

和BERT模型相比, GPT2的解码器在self-attention层上有一个关键的差异: 它将后面的单词(token)遮掩掉, 而BERT是按照一定规则将单词替换成[MASK].

举个例子, 如果我们重点关注4号位置的单词及其前序路径, 我们可以让模型只允许注意当前计算的单词和它之前的单词, 如下图所示:


注意: 能够清楚的区分BERT使用的自注意力模块(self-attention)和GPT2使用的带掩码的自注意力模块(masked self-attention)很重要! 普通的self-attention允许模型的任意一个位置看到它右侧的信息(下图左侧), 而带掩码的self-attention则不允许这么做(下图右侧).


在Transformer原始论文发表后, 一篇名为<< Generating Wikipedia by Summarizing Long Sequences >>的论文提出用另一种Transformer模块的排列方式来进行语言建模-它直接扔掉了编码器, 只保留解码器. 这个早期的基于Transformer的模型由6个Decoder Block堆叠而成:


上图中所有的解码器模块都是一样的, 因为只展开了第一个解码器的内部结构. 和GPT一样, 只保留了带掩码的self-attention子层, 和Feed Forward子层.

这些解码器和经典Transformer原始论文中的解码器模块相比, 除了删除了第二个Encoder-Decoder Attention子层外, 其他构造都一样.

2.2 GPT2工作细节探究

  • GPT2可以处理最长1024个单词的序列.
  • 每个单词都会和它的前序路径一起"流经"所有的解码器模块.
对于生成式模型来说, 基本工作方式都是提供一个预先定义好的起始token, 比如记做"s".此时模型的输入只有一个单词, 所以只有这个单词的路径是活跃的. 单词经过层层处理, 最终得到一个词向量. 该向量可以对于词汇表的每个单词计算出一个概率(GPT2的词汇表中有50000个单词). 在本例中, 我们选择概率最高的单词["The"]作为下一个单词.注意: 这种选择最高概率输出的策略有时会出现问题-如果我们持续点击输入法推荐单词的第一个, 它可能会陷入推荐同一个词的循环中, 只有你点击第二个或第三个推荐词, 才能跳出这种循环. 同理, GPT2有一个top-k参数, 模型会从概率最大的前k个单词中抽样选取下一个单词.


接下来, 我们将输出的单词["The"]添加在输入序列的尾部, 从而构建出新的输入序列["s", "The"], 让模型进行下一步的预测:


此时第二个单词的路径是当前唯一活跃的路径了. GPT2的每一层都保留了它们对第一个单词的解释, 并且将运用这些信息处理第二个单词, GPT2不会根据第二个单词重新来解释第一个单词.
  • 关于输入编码: 当我们更加深入的了解模型的内部细节时, 最开始就要面对模型的输入, 和其他自然语言模型一样, GPT2同样从嵌入矩阵中查找单词对应的嵌入向量, 该矩阵(embedding matrix)也是整个模型训练结果的一部分.


如上图所示, 每一行都是一个词嵌入向量: 一个能够表征某个单词, 并捕获其语义的数字向量. 嵌入的维度大小和GPT2模型的大小相关, 最小的模型采用了768这个维度, 最大的采用了1600这个维度.所以在整个模型运作起来的最开始, 我们需要在嵌入矩阵中查找起始单词"s"对应的嵌入向量. 但在将其输入给模型之前, 还需要引入位置编码(positional encoding), 1024分输入序列位置中的每一个都对应了一个位置编码, 同理于词嵌入矩阵, 这些位置编码组成的矩阵也是整个模型训练结果的一部分.


经历前面的1, 2两步, 输入单词在进入模型第一个transformer模块前的所有处理步骤就结束了. 综上所述, GPT2模型包含两个权值矩阵: 词嵌入矩阵和位置编码矩阵. 而输入到transformer模块中的张量就是这两个矩阵对应的加和结果.


transformer模块的堆叠: * 最底层的transformer模块处理单词的步骤: * 首先通过自注意力层处理, 接着将其传递给前馈全连接层, 这其中包含残差连接和Layer Norm等子层操作. * 最底层的transformer模块处理结束后, 会将结果张量传递给第二层的transformer模块, 继续进行计算. * 每一个transformer模块的处理方式都是一样的, 不断的重复相同的模式, 但是每个模块都会维护自己的self-attention层和Feed Forward层的权重值.


  • GPT2的自注意力机制回顾
  • 自然语言的含义是极度依赖上下文的, 比如下面所展示的"机器人第二法则":
机器人必须遵守人类给它的命令, 除非该命令违背了第一法则.在上述语句中, 有三处单词具有指代含义, 除非我们知道这些词所精确指代的上下文, 否则根本不可能理解这句话的真实语义.当模型处理这句话的时候, 模型必须知道以下三点:[它]指代机器人.[命令]指代前半句话中人类给机器人下达的命令, 即[人类给它的命令].[第一法则]指代机器人第一法则的完整内容.这就是自注意力机制所做的工作, 它在处理每个单词之前, 融入了模型对于用来解释某个单词的上下文的相关单词的理解. 具体的做法是: 给序列中的每一个单词都赋予一个相关度得分, 本质上就是注意力权重.看下图, 举个例子, 最上层的transformer模块在处理单词"it"的时候会关注"a robot", 所以"a", "robot", "it", 这三个单词与其得分相乘加权求和后的特征向量会被送入之后的Feed Forward层.


自注意力机制沿着序列的每一个单词的路径进行处理, 主要由3个向量组成:Query(查询向量), 当前单词的查询向量被用来和其它单词的键向量相乘, 从而得到其它词相对于当前词的注意力得分.Key(键向量), 键向量就像是序列中每个单词的标签, 它使我们搜索相关单词时用来匹配的对象.

Value(值向量), 值向量是单词真正的表征, 当我们算出注意力得分后, 使用值向量进行加权求和得到能代表当前位置上下文的向量.

如上图所示, 一个简单的比喻是在档案柜中找文件. 查询向量Query就像一张便利贴, 上面写着你正在研究的课题. 键向量Key像是档案柜中文件夹上贴的标签. 当你找到和便利贴上所写相匹配的文件夹时, 拿出对应的文件夹, 文件夹里的东西便是值向量Value.

将单词的查询向量Query分别乘以每个文件夹的键向量Key,得到各个文件夹对应的注意力得分Score.

我们将每个文件夹的值向量Value乘以其对应的注意力得分Score, 然后求和, 得到最终自注意力层的输出, 如下图所示:


这样将值向量加权混合得到的结果也是一个向量, 它将其50%的注意力放在了单词"robot"上, 30%的注意力放在了"a"上, 还有19%的注意力放在了"it"上.
  • 模型的输出:
当最后一个transformer模块产生输出之后, 模型会将输出张量乘上词嵌入矩阵:


我们知道, 词嵌入矩阵的每一行都对应模型的词汇表中一个单词的嵌入向量. 所以这个乘法操作得到的结果就是词汇表中每个单词对应的注意力得分, 如下图所示:


一般来说, 我们都采用贪心算法, 选取得分最高的单词作为输出结果(top_k = 1).但是一个更好的策略是对于词汇表中得分较高的一部分单词, 将它们的得分作为概率从整个单词列表中进行抽样(得分越高的单词越容易被选中).通常会用一个折中的方法, 即选取top_k = 40, 这样模型会考虑注意力得分排名前40的单词.


如上图所示, 模型就完成了一个时间步的迭代, 输出了一个单词. 接下来模型会不断的迭代, 直至生成完整的序列(序列长度达到1024的上限, 或者序列的某一个时间步生成了结束符).

🍔 小结

  • 学习了GPT2的架构:
    • GPT2只采用了Transformer架构中的Decoder模块.
    • GPT2是在GPT基础上发展处的更强大的语言预训练模型.
  • 学习了GPT2的工作细节:
    • GPT2可以处理最长1024个单词的序列.
    • 每个单词都会和它的前序路径一起"流经"所有的解码器模块.
    • GPT2本质上也是自回归模型.
    • 输入张量要经历词嵌入矩阵和位置编码矩阵的加和后, 才能输入进transformer模块中.
  • 学习了GPT2自注意力机制的细节:
    • 首先, GPT2的自注意力是Masked self-attention, 只能看见左侧的序列, 不能看见右侧的信息.
    • Query, Key, Value这三个张量之间的形象化的例子, 生动的说明了各自的作用和运算方式.
    • 最后的输出可以采用多个方法, 贪心方案, 概率分布方案, 或者top-k方案等.

 

Read more

全网最强!《机械控制工程/自动控制原理》期末速成课:零基础6小时逆袭90+,含名校真题+学霸笔记,机械/车辆/机器人/自动化专业必看(保过/考研复试)

还在为**《机械控制工程基础》或《自动控制原理》的期末考试发愁?上课听天书,复习没头绪?本视频是专为机械类学子打造的期末速成救命课**!拒绝枯燥推导,用最通俗的语言带你6小时零基础逆袭,不仅包你不挂科,更能冲击高分! 📌 本课程核心覆盖(长尾词埋点): 重点攻克拉普拉斯变换、系统数学模型建立、传递函数求法、时域分析、稳态误差计算、根轨迹绘制法则、频域分析、伯德图(Bode图)画法以及奈奎斯特(Nyquist)稳定性判据等必考难点。无论你是要应付期末大考,还是准备考研复试,这套高分笔记和名校期末真题解析都能帮你精准避坑! 🎓 适用专业(精准人群): 只要你的课表里有这门课,本视频都完美适配!特别适合以下专业的同学: 机械设计制造及其自动化 机械电子工程(机电) 车辆工程 机器人工程 智能制造工程 能源与动力工程 自动化类相关专业 🚀 资料包含: 6小时速成笔记 + 历年名校期末真题库。点赞投币收藏,一起拿下这门“天书”! #机械控制工程 #自动控制原理

CCF-CSP第38次认证第二题——机器人复健指南(满分题解)

题目背景 西西艾弗岛某山脉深处出土了一台远古机器人,具体年代已不可考。初步修缮后,研究人员尝试操控机器人进行些简单的移动。 题目描述 整个实验场地被划分为 n×n个方格,从 (1,1) 到 (n,n) 进行编号。机器人只能在这些方格间移动,不能走出场地范围。 如下图所示,假设机器人当前位于 (x,y),那么接下来可以向周围八个方向跳跃移动(如果目标方格在场地范围内): 若机器人只能跳动不超过 k 步,场地内有多少方格(包括起始位置)可以抵达? 输入格式 从标准输入读入数据。 输入的第一行包含空格分隔的两个正整数 n 和 k,分别表示场地大小和跳动步数。 输入的第二行包含空格分隔的两个正整数 x 和 y,表示机器人的起始位置(保证位于场地内)。 输出格式 输出到标准输出。 输出一个整数,表示 k 步内可以抵达的方格总数。 样例1输入

Stable-Diffusion-3.5降本实战:FP8量化节省40%GPU成本案例

Stable-Diffusion-3.5降本实战:FP8量化节省40%GPU成本案例 1. 引言:当高质量图像生成遇上成本难题 如果你正在使用Stable Diffusion 3.5来创作图像,可能会遇到一个两难的选择:要么忍受缓慢的生成速度和爆满的显存,要么就得为更强大的GPU硬件支付高昂的费用。 Stable Diffusion 3.5确实带来了图像质量、语义理解和文字渲染能力的全面提升,但随之而来的是更大的模型体积和更高的计算需求。对于个人创作者、小型工作室甚至企业项目来说,GPU成本往往成为限制创意落地的最大瓶颈。 今天我要分享的,就是一个实实在在的降本增效方案——通过FP8量化技术,我们成功将SD 3.5的GPU显存占用降低了40%,同时保持了高质量的图像输出。这不是理论上的优化,而是经过实际验证的落地案例。 2. 什么是FP8量化?为什么它能大幅降低成本? 2.1 用大白话理解量化技术 想象一下,你有一张非常高清的照片,文件大小有10MB。现在你需要把这张照片发到社交媒体上,但平台限制文件不能超过1MB。你会怎么做? 大多数人会选择压缩图片——降低分辨率

FPGA模块如何助力现代工厂实现高速数据采集和实时处理

1. 工业 4.0 背景下的数据挑战 在智能制造的浪潮下,现代工厂正加速从“自动化”向“智能化”迈进。随着传感器部署密度的迅速上升,工厂内部产生的数据量呈几何级增长,涵盖结构化数据(如温度、湿度、压力)与非结构化数据(如图像、视频、音频)等多种类型,对数据采集与处理能力提出了前所未有的挑战: * 实时性要求高:在高速生产线、精密制造与运动控制等场景中,关键数据必须被及时采集与处理,以确保生产过程的高效运行与安全性。这不仅要求系统具备高速采集能力,更要求具备每秒处理百万乃至千万数据点的能力。 * 传输与处理带宽受限:庞大的原始数据若未经处理直接上传至数据中心或云端,将对网络带宽造成巨大负担,且传输延迟难以控制,极易影响系统响应速度和可靠性。 * 多协议兼容的复杂性:现代工厂常用的工业以太网、CAN、Profibus 等通信协议并存,系统需兼容上百种协议并实现无缝对接,大大增加了系统集成的复杂性。 2. FPGA 技术的核心优势 传统处理器架构逐渐难以胜任智能制造的核心需求。FPGA(现场可编程门阵列)凭借其强大的并行处理能力、毫秒级低延迟响应以及灵活可重构的架构,