目录
[一、核心架构:Transformer Decoder](#一、核心架构:Transformer Decoder)
[1. 核心组件:仅解码器(Decoder-Only)的堆叠](#1. 核心组件:仅解码器(Decoder-Only)的堆叠)
[2. 输入表示:Token + 位置](#2. 输入表示:Token + 位置)
[3. 输出](#3. 输出)
[阶段一:预训练(Pre-training) - 海量数据"读书"](#阶段一:预训练(Pre-training) - 海量数据“读书”)
[阶段二:微调(Fine-tuning) - 特定任务"辅导"](#阶段二:微调(Fine-tuning) - 特定任务“辅导”)
[1. 数学定义和公式](#1. 数学定义和公式)
[2. 一个具体的计算例子](#2. 一个具体的计算例子)
[3. 为什么这个损失函数如此有效?](#3. 为什么这个损失函数如此有效?)
[4. 在训练流程中的位置](#4. 在训练流程中的位置)
GPT(Generative Pre-trained Transformer)的架构和训练过程。是一个非常核心的现代人工智能主题,尤其在大语言模型(LLM)领域。
首先,要明确一点:"GPT"已经成为一个系列,从最初的GPT-1到现在的GPT-4,其核心架构思想一脉相承,但规模和能力天差地别。下面的介绍将以经典的GPT-3的架构和训练为蓝本,因为它奠定了当前范式的基础。
与Deepseek的对比:
一、核心架构:Transformer Decoder
GPT的架构基于Transformer 模型,但它只使用了Transformer的Decoder部分,并进行了一些修改。这与使用整个Encoder-Decoder结构的模型(如T5)或使用Encoder的模型(如BERT)有显著区别。以下是其架构的核心组成部分:
1. 核心组件:仅解码器(Decoder-Only)的堆叠
GPT由N个(对于GPT-3,N=96)完全相同的Transformer Decoder块堆叠而成。每个块包含两个核心子层:
-
掩码自注意力层(Masked Self-Attention):
-
自注意力(Self-Attention): 允许序列中的每个位置(单词)同时关注到序列中的所有其他位置,从而捕获丰富的上下文信息。
-
掩码(Masking) : 这是关键!为了确保模型在生成文本时只能"看到"当前位置之前的信息(即过去的词),而不能"偷看"未来的词,在计算注意力时会将未来位置的信息屏蔽掉(通常设置为负无穷,经Softmax后变为0)。这保证了模型的自回归(Autoregressive) 特性,即一个一个地生成下一个词。
-
-
前馈神经网络层(Feed-Forward Network, FFN):
- 一个简单的多层感知机(通常包含一个隐藏层和激活函数,如GELU),对每个位置的表示进行独立处理和非线性变换。
-
残差连接(Residual Connection)和层归一化(Layer Normalization):
- 每个子层(注意力、FFN)都被一个残差连接所包裹,并进行层归一化。这有助于稳定深度网络的训练,防止梯度消失。
2. 输入表示:Token + 位置
模型接收一串单词(或子词,即Token)作为输入,例如 ["The", "robot", "ate", "the"]。这些Token被转换为模型可以处理的数值形式:
-
Token嵌入(Token Embedding): 一个可学习的查找表,将每个Token映射为一个高维向量(例如,GPT-3是12288维)。
-
位置嵌入(Positional Embedding): 由于自注意力机制本身没有位置信息,需要额外添加可学习的位置编码向量,告诉模型每个词在序列中的位置。
Token嵌入向量 + 位置嵌入向量 = 模型的输入表示。
3. 输出
序列经过所有Decoder层后,会为序列中的每个位置 输出一个高维向量。最终,这个向量会通过一个线性投影层(Vocabulary Projection) 和一个Softmax层,转换为整个词表上的概率分布。
-
例如,在输入 ["The", "robot", "ate", "the"] 后,模型会输出下一个词的概率分布("apple"的概率可能是0.6,"banana"的概率是0.3,等等)。
-
模型根据这个概率分布选择下一个词(通过采样或选择概率最高的词),并将其追加到输入中,继续生成下一个词,如此循环。
二、训练过程:两阶段范式
GPT的训练遵循一个非常成功的两阶段范式:1. 预训练(Pre-training) 和 2. 微调(Fine-tuning)。这也被称为"自监督学习"。
阶段一:预训练(Pre-training) - 海量数据"读书"
目标: 让模型学习语言的通用知识、语法、事实和推理能力。这是最耗时、最耗费计算资源的阶段。
-
数据: 使用极其庞大的、来自互联网的文本数据集(如CommonCrawl, WebText, 书籍、期刊等)。GPT-3的训练数据高达近5000亿个Token。
-
任务 : 自回归语言建模 或 下一个Token预测。
-
过程:
-
从数据集中随机抽取一段文本(例如:"人工智能是未来的趋势。")。
-
输入模型的是这段文本的前N个词(例如:"人工智能是未来的")。
-
要求模型预测下一个词(目标是"趋势")。
-
将模型的预测(一个概率分布)与真实的下一个词("趋势"的one-hot编码)进行对比,计算交叉熵损失(Cross-Entropy Loss)。
-
通过反向传播和优化器(如AdamW)更新模型的所有参数,让模型在下一次预测时更准确。
-
-
本质: 这是一个无监督学习过程,不需要人工标注。数据本身(下一个词是什么)就是标签。通过这个过程,模型学会了语言的统计规律、世界知识以及强大的上下文表示能力。
阶段二:微调(Fine-tuning) - 特定任务"辅导"
目标: 让预训练好的通用模型适应特定的下游任务(如问答、翻译、摘要、情感分析等)。
-
数据 : 相对小得多的、高质量人工标注的数据集。例如,对于"情感分析"任务,数据集可能是 {句子:情感标签} 的配对,如 ("这部电影太精彩了", "正面")。
-
过程:
-
取预训练好的GPT模型。
-
在其输出层之上添加一个任务特定的头(例如,对于分类任务,添加一个线性分类器)。
-
使用标注数据,以比预训练小得多的学习率对整个模型(或部分层)进行继续训练。
-
此时的目标函数仍然是交叉熵损失,但标签是任务特定的(如正面/负面)。
-
-
创新(Instruction Tuning & RLHF):
-
对于ChatGPT这样的对话模型,微调过程更加精细。它采用了指令微调(Instruction Tuning) 和基于人类反馈的强化学习(RLHF)。
-
指令微调: 使用大量(指令,期望回复)的数据对来训练模型,教会它如何理解和遵循人类的指令。
-
RLHF:
-
收集人类标注者对于模型多个回复的偏好排序(哪个回复更好)。
-
训练一个奖励模型(Reward Model) 来学习人类的偏好。
-
使用强化学习(如PPO算法)以奖励模型为指引,进一步优化语言模型的策略,使其生成更符合人类喜好的、更有帮助、更安全的回复。
-
-
三、损失函数
GPT训练的损失函数是标准的交叉熵损失(Cross-Entropy Loss),更具体地说,是用于自回归语言建模的交叉熵损失。它的核心思想非常简单:惩罚模型在预测下一个词时犯的错误。模型预测的分布与真实分布差异越大,损失值就越高。
1. 数学定义和公式
对于一个给定的序列(例如一句话),其中
是序列中的第 t 个词元(token)。
训练目标 : 基于之前的所有词元 ,最大化真实下一个词元
出现的概率。
损失函数 是这个目标的负数对数似然(Negative Log-Likelihood)。
对于单个时间步 t 的损失是:
其中:
-
是模型在时间步 t 根据上文计算出的、对于词元
的预测概率。
-
代表模型的所有参数。
-
是自然对数。取对数是数学上的标准做法,可以将连乘转化为求和,并且惩罚模型对其预测的"不确定性"(即概率很低时,
值会很大)。
整个序列的总损失是所有这些时间步损失的平均值:
这里 是
的简写。
重要提示 : 在计算时,模型是并行地处理整个序列,并通过掩码(Mask)确保在计算位置 t 的注意力时,只能看到 t 之前的位置。因此,虽然计算是并行的,但其数学原理与上述自回归公式完全等价。
2. 一个具体的计算例子
假设我们有一个非常简单的序列:["猫", "吃", "鱼"]
,对应的 token ID 是 [231, 792, 583]
。
-
输入 (Input) : 模型接收整个序列
[231, 792, 583]
。 -
目标 (Target): 训练时,我们希望模型能正确地将输入序列"偏移一位"进行预测。即:
-
当输入是
[231]
时,应预测下一个词是792
(吃)。 -
当输入是
[231, 792]
时,应预测下一个词是583
(鱼)。 -
初始 token 没有上一个 token,所以从 t=2 开始计算损失。
-
-
模型输出:
-
在经过最后的 Linear 层和 Softmax 后,模型会在整个词表(例如 50,257 个词)上为每个位置输出一个概率分布。
-
假设在位置 t=2(即需要预测"鱼"的时刻),模型对正确 token
583
("鱼") 预测的概率是,而对某个错误 token(例如"肉")的概率是
。
-
-
计算该时间步的损失:
这个损失值很小,因为模型做出了一个高置信度的正确预测。
-
如果预测错误: 如果模型在 t=2 时预测
,而
,那么损失会是:
。这个损失值很大,因为模型做出了一个高置信度的错误预测。
-
整个序列的损失 :
我们需要计算 t=2(预测"吃")和 t=3(预测"鱼")两个时间步的损失,然后求平均。
-
3. 为什么这个损失函数如此有效?
-
直接的代理目标: 能够准确预测下一个词,需要模型掌握语法、句法、常识、逻辑推理甚至风格模仿等几乎所有语言能力。因此,最小化这个损失函数间接地迫使模型学习到了这些丰富的知识。
-
可微性(Differentiability) : 整个计算过程------从嵌入层到多个Transformer块,再到最后的线性投影和Softmax------都是完全可微的。这意味着可以通过反向传播(Backpropagation) 算法,精确地计算出损失函数对模型中每一个参数的梯度,从而通过梯度下降来有效地更新参数。
-
信息密集的梯度: 每一次预测错误都会产生一个较大的损失信号,这个信号会通过反向传播有效地分配给了模型中那些导致预测错误的参数。这种"责任分配"机制非常高效。
4. 在训练流程中的位置
这个损失函数是GPT 预训练(Pre-training) 阶段的核心驱动力。它的流程可以概括为:
-
从海量文本语料库中采样一个批次(batch)的序列。
-
将序列输入模型,获得模型对所有位置下一个词的预测分布。
-
将模型的预测分布与真实的下一个词(即目标序列)进行比较,计算整个批次的平均交叉熵损失。
-
通过反向传播计算损失相对于所有模型参数的梯度。
-
使用优化器(如AdamW)根据梯度更新模型参数。
-
重复这个过程数百万乃至数十亿次,直到模型收敛。
微调(Fine-tuning) 阶段同样使用交叉熵损失,但目标不同。例如,在指令微调中,输入是指令,目标是期望的回复,损失函数计算的是模型生成"回复"部分每个词时的交叉熵,而"指令"部分的损失通常会被掩码掉,不参与计算。
特性 | 描述 |
---|---|
名称 | 交叉熵损失(Cross-Entropy Loss) |
类型 | 自回归语言建模损失 |
核心思想 | 最小化模型预测的下一个词概率分布与真实分布(一个one-hot向量)之间的差异。 |
数学公式 | |
为何有效 | 是学习语言知识的完美代理任务;完全可微,便于梯度下降优化。 |
阶段 | 主要驱动预训练 ,也用于监督微调。 |
总而言之,GPT的损失函数是一个简洁、优雅而强大的目标,它通过"猜下一个词"这个简单游戏,驱动模型学习并掌握了人类语言的复杂规律。
四、总结与特点
特性 | 描述 |
---|---|
架构 | Transformer Decoder-Only,使用掩码自注意力实现自回归生成。 |
核心能力 | 生成(Generative),根据上文预测下一个词。 |
训练范式 | 两阶段 :1. 预训练 (海量无标注数据,下一个词预测);2. 微调(少量标注数据,适应特定任务/对齐人类偏好)。 |
规模定律 | 模型性能强烈依赖于模型参数量 、数据量 和计算量的同步 scaling up。GPT系列的进化史就是一部规模扩大史。 |
上下文学习 | GPT-3展现出的强大能力:在不更新参数的情况下,仅通过向模型提供几个示例(Few-shot)和任务描述,它就能完成新任务。 |