PaperReading:GPT series
paperreading
本文字数:1.7k 字 | 阅读时长 ≈ 6 min

PaperReading:GPT series

paperreading
本文字数:1.7k 字 | 阅读时长 ≈ 6 min

GPT-1

回答你的问题:GPT-1 在输入时已经包含了多个答案,那么如何计算每个答案的概率?

是的,在 GPT-1 的方法中,每个候选答案都是作为完整输入的一部分,并且 Transformer 处理它们时,模型已经看到了答案。但计算最终概率时,GPT-1 不会直接基于整个句子计算,而是计算答案部分(tokens)的条件概率,即计算 答案给定上下文的 log-likelihood。

  1. GPT-1 计算多个候选答案的概率的方法

假设我们有一个问答任务:
• 上下文(context document):

太阳是太阳系中最大的一颗天体。

•	问题:

太阳系中最大的天体是什么?

•	候选答案:
•	(a) “太阳”
•	(b) “地球”

(1) 组合输入

按照 GPT-1 文章中的方法,我们会为每个答案构造一个完整的输入:

输入 1: [太阳是太阳系中最大的一颗天体; 太阳系中最大的天体是什么?; $; 太阳]
输入 2: [太阳是太阳系中最大的一颗天体; 太阳系中最大的天体是什么?; $; 地球]

然后,Transformer 处理整个输入序列,但概率计算只针对答案部分。

(2) Transformer 计算的隐藏状态

在 Transformer 计算时:
• 整个输入都进入 Transformer,并且所有 tokens 都会有一个隐藏状态向量 H_t。
• 自注意力(Self-Attention) 允许 Transformer 看到完整的输入,包括候选答案。
• 但 概率计算时,我们只关心答案 token 的 log-likelihood。

例如,Transformer 计算每个 token 的条件概率:
$$
P(w_t | w_1, w_2, …, w_{t-1})
$$

对于 输入 1(候选答案是“太阳”):
$$
P(\text{“太”} | \text{前面所有 token})
$$
$$
P(\text{“阳”} | \text{前面所有 token + “太”})
$$
最终答案的 log-likelihood:
$$
\log P(“太阳”) = \log P(\text{“太”}) + \log P(\text{“阳”})
$$

对于 输入 2(候选答案是“地球”):
$$
P(\text{“地”} | \text{前面所有 token})
$$
$$
P(\text{“球”} | \text{前面所有 token + “地”})
$$
最终答案的 log-likelihood:
$$
\log P(“地球”) = \log P(\text{“地”}) + \log P(\text{“球”})
$$

  1. 为什么 GPT-1 要这么计算?

因为 GPT-1 是 自回归语言模型(Autoregressive Model),它只能从左到右计算 token 的生成概率。换句话说:
1. 虽然 Transformer 可以看到整个输入,但它是基于条件概率逐步预测 token 的。
2. GPT-1 计算每个 token 生成的 log-likelihood,并对整个答案部分求和,以衡量答案的合理性。
3. 最终选择 log-likelihood 最大的答案作为模型的预测结果。

  1. softmax 归一化

为了做最终决策,模型会对多个候选答案的 log-likelihood 进行 softmax 归一化:
$$
P(a_k) = \frac{e^{\log P(a_k)}}{\sum_{j} e^{\log P(a_j)}}
$$
应用到具体例子:
$$
log P(“太阳”) = -0.5
$$
$$
log P(“地球”) = -1.8
$$

计算 softmax:
$$
P(“太阳”) = \frac{e{-0.5}}{e{-0.5} + e^{-1.8}} \approx 0.82
$$
$$
P(“地球”) = \frac{e{-1.8}}{e{-0.5} + e^{-1.8}} \approx 0.18
$$
最终选择:

模型预测答案 = “太阳”(因为它的概率最高)

  1. 关键点总结
    1. Transformer 看到整个输入,包括候选答案,但概率计算时只针对 答案部分。
    2. 模型计算答案部分的 log-likelihood,即 逐 token 计算生成概率,并求和。
    3. 对多个候选答案的 log-likelihood 进行 softmax 归一化,选取概率最高的答案。
    4. GPT-1 不能直接做分类,它只能通过语言模型的方式计算答案在上下文中的合理性。

GPT-2

这部分讲的是 GPT-2 在初始化权重时的特殊处理方法,主要是为了缓解深层神经网络的梯度消失或梯度爆炸问题。我来一步步解释。

  1. 为什么需要特殊的初始化策略?

(1) 残差连接(Residual Connection)的问题

在深度神经网络(尤其是 Transformer)中,残差连接(Residual Connection) 被广泛使用:
x_{l+1} = x_l + f(W_l, x_l)
其中:
• x_l 是第 l 层的输入。
• f(W_l, x_l) 是该层的变换,例如自注意力(Self-Attention)或前馈神经网络(Feedforward Network)。
• 残差连接的作用:允许梯度直接在层与层之间传播,帮助训练非常深的模型。

(2) 残差路径(Residual Path)累积效应

但当层数增加时,残差路径会导致梯度逐层累积,可能导致梯度爆炸或梯度消失:
• 梯度爆炸(Gradient Explosion):
• 假设残差层的激活值是 均值为 0,方差为 \sigma^2 的随机变量。
• 在 N 层网络中,最终的激活值可能会有 N \cdot \sigma^2 的增长,导致数值过大,使得训练变得不稳定。
• 梯度消失(Gradient Vanishing):
• 如果层的权重初始化过小,累积的梯度可能会指数级衰减,使得深层网络的训练变得困难。

  1. GPT-2 的初始化策略

为了减少这些问题,GPT-2 采用了 权重缩放(Weight Scaling)策略:

W_{\text{init}} = W_{\text{raw}} \cdot \frac{1}{\sqrt{N}}

(1) 公式含义
• W_{\text{init}}:实际用于模型的权重。
• W_{\text{raw}}:未经缩放的随机初始化权重(例如从正态分布抽样)。
• N:残差层(Residual Layers)的总数。
• 缩放因子 \frac{1}{\sqrt{N}}:
• 让每层的贡献在整个网络中不会随着层数增加而过大。
• 使得整个网络的方差保持稳定,不会随着深度增加而膨胀。

(2) 为什么要用 \frac{1}{\sqrt{N}} 进行缩放?
• 直观上,它保证了所有残差层的累积贡献不会随着层数增加而过大。
• 这和 Xavier Initialization(Glorot 2010) 类似,Xavier 初始化的思想是:
\text{Var}(W) = \frac{1}{\text{fan-in}}
• 其中 fan-in 是输入单元的数量。
• 这样可以保证前向传播和反向传播的信号保持在合理的范围内。

GPT-2 采用了类似的思想,但特别针对 残差路径 进行缩放,以适应 Transformer 架构的深度问题。

  1. 直观理解

可以这样想:
• 没有缩放时(普通初始化):
• 每一层残差连接都会增加一个数值,随着模型越来越深,数值可能会越来越大(梯度爆炸)或越来越小(梯度消失)。
• 加了 \frac{1}{\sqrt{N}} 缩放后:
• 每一层的贡献会变小,总体上随着深度增加仍然保持稳定。
• 这样就能训练更深的 Transformer 模型,而不会因梯度问题影响训练效果。

  1. 关键总结
    • 问题:深层残差网络的梯度可能随着层数增加而累积,导致训练不稳定(梯度爆炸或梯度消失)。
    • GPT-2 解决方案:
    • 初始化时,将残差层的权重乘以 \frac{1}{\sqrt{N}},让每层的贡献均匀分布,防止梯度累积过大。
    • 效果:
    • 使得 GPT-2 能够稳定训练 48 层深的 Transformer 结构,并保持梯度稳定。

这是一种非常重要的优化技巧,在更大规模的模型(如 GPT-3)中仍然被采用!

4月 06, 2025
3月 10, 2025
12月 31, 2024
11月 25, 2024