【人工智能之大模型】GPT系列(GPT-1 到 GPT-2 和 GPT-3(以及后续 GPT-4 的概念性改进))模型是如何演进的?(二)
【人工智能之大模型】GPT系列(GPT-1 到 GPT-2 和 GPT-3(以及后续 GPT-4 的概念性改进))模型是如何演进的?(二)
文章目录
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.youkuaiyun.com/gaoxiaoxiao1209/article/details/145231978
3. 代码逐行解释
TransformerBlock 类
初始化部分
self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
:定义多头自注意力层,处理输入序列中的依赖关系;因果掩码确保自回归生成时不会泄露未来信息。self.linear1
和self.linear2
构成前馈网络,负责对注意力输出进行非线性变换。self.norm1
和self.norm2
分别在自注意力和前馈网络后进行层归一化,保证训练稳定。self.dropout
用于防止过拟合。
前向传播部分
- 调用自注意力层,并将输出与原输入进行残差连接,然后进行 LayerNorm 归一化。
- 经过前馈网络后再次加残差并归一化,最终输出更新后的特征表示。
GPT 类
初始化部分
self.token_embedding
将输入 token 编码为连续向量。self.pos_embedding
为每个位置分配可学习的位置编码,这在 Transformer 中用于引入序列位置信息。self.layers
通过nn.ModuleList
堆叠多个 TransformerBlock,实现深层自注意力建模。self.fc_out
用于将最后的隐藏状态投影回词汇表大小,输出预测的 logits。
前向传播部分
- 输入
input_ids
经过词嵌入和位置编码后得到的张量形状为[batch_size, seq_length, d_model]
。 - 转置为
[seq_length, batch_size, d_model]
以符合nn.MultiheadAttention
的输入要求。 - 构造因果掩码
causal_mask
,确保生成过程中每个位置只能关注之前的 token。 - 依次通过各个 TransformerBlock 后,转置回
[batch_size, seq_length, d_model]
,并通过全连接层得到 logits。
示例部分
- 定义模型超参数,构造一个 GPT 模型实例。
- 随机生成一组输入 token,模型输出 logits,打印输出形状验证模型工作情况。
4. GPT 系列演进中的关键变化
规模扩展:
- GPT-1 基于较小的模型规模(如 512 维、6 层),
- GPT-2 在相同架构基础上大幅增加层数和参数量,
- GPT-3 则进一步扩展到数百亿参数,使得模型具备更强的生成和推理能力。
- 代码中各参数(如
d_model、num_layers
)的选择正反映了这种扩展趋势。
训练数据和预训练策略:
- 从 GPT-1 开始,使用无监督预训练通过大量文本数据学习语言模型;
- GPT-2 和 GPT-3 进一步扩大数据规模,改善模型泛化能力和少样本学习能力。
生成效果:
- 随着模型规模增大,生成的文本更连贯、语义更丰富;但也带来训练和推理的计算挑战。
架构改进:
- 尽管基础架构保持不变,但后续版本在优化、正则化、训练技巧(如学习率调度、优化器选择)上不断改进,以充分发挥大规模模型的能力。
总结
- GPT 系列模型从最初的 GPT-1 到 GPT-2 和 GPT-3,经历了从较小规模到大规模预训练模型的发展过程。
- 核心架构基于 Transformer 解码器,通过自回归生成实现文本生成。模型参数规模的不断扩展、数据量的不断增加以及训练技术的改进,使得生成文本的能力和泛化能力显著提升。
上述代码示例展示了一个简化的 GPT 模型,并通过详细解释说明了其内部结构和工作流程,这也为理解 GPT 系列演进提供了直观的代码参考。