GPT中的激活函数详解 | AI生成和翻译
Andrej Karpathy在《让我们构建GPT》视频中对激活函数的解析
在其YouTube视频《让我们构建GPT:从零开始,代码实现,逐行讲解》(注:提供的时间戳指向约2小时51分40秒处)中,Andrej Karpathy围绕GPT-2 Transformer架构中的多层感知机(MLP)层探讨了激活函数。他重点阐释了语言模型选择特定激活函数的原因,着重分析梯度流、神经元健康度和实证性能。讨论从MLP的作用切入(作为注意力机制”缩减”后的”映射”操作),详细讲解了GPT-2使用的核心激活函数GELU,并与ReLU、tanh等替代方案进行对比,还简要提及现代语境中的Swish函数。
以下是根据该章节内容对GELU和tanh的专项解析(他未对tanh单独展开,而是将其作为突显GELU优势的参照系)。
GELU(高斯误差线性单元)
Karpathy将GELU定义为GPT-2的MLP中(两个线性层之间)提供非线性变换的核心激活函数,强调其在GPT-2、BERT等大型语言模型中确保训练平稳可靠的关键作用。
- 数学定义:
- 精确GELU:\( \text{GELU}(x) = x \cdot \Phi(x) \),其中\( \Phi(x) \)是标准正态分布的累积分布函数:\( \Phi(x) = \int_{-\infty}^{x} \frac{1}{\sqrt{2\pi}} e^{-t^2/2} \, dt \)。
- 近似GELU(GPT-2通过PyTorch的
nn.GELU()实际采用):\( \text{GELU}_{\text{approx}}(x) = x \cdot \sigma(1.702 \cdot x) \),其中\( \sigma(z) = \frac{1}{1 + e^{-z}} \)为sigmoid函数。- 他指出该近似曾是TensorFlow中为加速计算的历史选择;现今精确版本已可无缝替代。
- 为何选择GELU?(Karpathy强调的核心优势):
- 全域非零梯度:与ReLU(对负输入梯度归零,导致”死亡神经元”)不同,GELU对所有有限输入均提供微小正梯度,确保网络中所有神经元始终保持可训练状态。
- 更平滑的优化:通过融合正输入的线性特性与负输入的概率化”门控”机制(受随机正则化和自适应dropout思想启发),形成更温和的”优化地形”,使深度模型训练更稳定。
- 实证优势:Karpathy指出其对语言建模”实证效果更优”——GPT-2、BERT等模型使用GELU后性能显著提升。输出范围约\( (-\infty, \infty) \),但通过平滑过渡避免硬截断。
- 无梯度消失:不像饱和函数那样出现梯度衰减,有利于超深Transformer中的梯度流动。
他在代码实现中将其简化为MLP前向传播的一部分,演示了如何独立处理每个词元的注意力汇聚输出。
tanh(双曲正切函数)
Karpathy在GPT-2构建中未使用tanh,而是将其作为反面教材来说明现代激活函数(如GELU)的优越性,将其视为深度网络中应避免的典型旧式选择。
- 数学定义:
- \( \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \),将任意输入压缩至(-1, 1)区间。
- 原理解析与缺陷:
-
饱和特性:当 x 较大时,tanh快速扁平化(饱和),输出趋近±1。这会导致梯度消失——该区域导数趋近零,剥夺深层网络的学习信号并拖慢收敛。 - 早饱和现象:在深度网络中”过早饱和”,相比GELU或ReLU等非饱和函数训练效率更低。
- 历史背景:Karpathy暗示其是浅层网络(如早期RNN)的遗留产物,因上述问题不适用于Transformer架构。虽无ReLU的”死亡神经元”问题,但梯度消失缺陷更为严重。
-
梯度风险:对较大 x值存在高梯度消失风险,输出范围被限制在(-1, 1)。
-
快速对比(基于Karpathy的论述框架)
Karpathy在视频中通过对比论证GELU的合理性:
| 激活函数 | 输出范围 | 核心优势 | 主要缺陷 | 是否用于GPT-2? |
|---|---|---|---|---|
| GELU | \( (-\infty, \infty) \) | 始终保持正梯度;神经元平滑激活 | 计算量略高于ReLU | 是(近似形式) |
| tanh | (-1, 1) | 有界输出(利于某些归一化) | 梯度消失;早饱和 | 否 |
他还提及ReLU(\( \max(0, x) \),易产生死亡神经元)是GELU的直接改进对象,而Swish(\( x \cdot \sigma(x) \),用于Llama 3等后续模型)可视为GELU的可学习变体——但论述核心始终是GELU对于GPT的实用性。
这段约5-10分钟的讲解融入其代码实践演示,展现了这些选择如何使模型在莎士比亚文本上实现可靠训练。欲获取完整细节,请跳转至视频对应时间戳!