🔑 四大核心组件
📏 层归一化(LayerNorm)
-
❓ 为什么存在?
-
深层网络训练时,每层的输入分布会不断变化,例如在12层以上的Transformer中,某层输入分布突然剧变(例如从均值0→100),导致梯度爆炸/消失,模型无法收敛。
-
没有归一化,GPT等大模型架构根本无法突破12层
-
🧠 工作原理:
- 主要原理是调整神经网络层的输出,使其均值为0且方差为1
- 具体点就是对单个样本的所有特征做归一化,特征就是词元的维度
-
🚀 作用:
-
提升大模型收敛稳定性和训练的深度
-
让网络深度突破百层限制
📏 GELU激活函数
-
❓ 为什么存在?
-
语言天生具有概率模糊性:
例如“苹果”在70%上下文是水果,30%是公司
“这个观点很尖锐”中“尖锐”是褒义还是贬义?
传统激活函数像,非0即1的电灯开关,而现实世界的判断更多是像太极曲线一样的柔性曲线。
-
如2016年GELU发的论文所说:
“人类决策基于概率而非硬阈值,神经网络应模仿此机制”
-
总结就是:没有概率化激活,深层语言模型无法收敛
-
激活函数原理
-
对输入值进行正态分布计算,动态的决定概率分布
-
作用
-
激活函数使得大模型在训练过程中数据更加平滑
⚙️ 前馈神经网络(FeedForward)
class FeedForward(nn.Module):
def __init__(self, cfg):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(cfg["emb_dim"], 4 * cfg["emb_dim"]), # 维度扩张4倍
GELU(),
nn.Linear(4 * cfg["emb_dim"], cfg["emb_dim"]), # 压缩回原维度
)
def forward(self, x):
return self.layers(x)
FeedForward模块是一个小型前馈神经网络,由两个线性层和一个GELU激活函数组成。
如上图,FeedForward模块在提升模型学习和泛化能力方面非常关键。它通过第一个线性层将嵌入维度扩展到了更高的维度,扩展之后,应用非线性GELU激活函数,然后通过第二个线性变换将维度缩回原始大小。这种设计允许模型探索更丰富的表示空间。
这样做的好处就是,输入维度和输出维度的保持一致的情况下,增强大模型能力只需要在内部扩张和收缩进行解决,而不需要在额外适配输入输出层。
🔧 原理:
1️⃣ 先扩张:将嵌入维度扩大到4倍(探索更丰富的表示空间)2️⃣ 柔性激活:用GELU引入非线性3️⃣ 再压缩:缩回原始维度,保持输入/输出维度一致
⚙️ 快捷连接(也称跳跃连接)
❓ 为什么存在?
- 大模型训练时,梯度随深度增加而消失(反向传播信号越来越弱)
- 举个例子,就像传话游戏:经过10个人,“今晚吃火锅”可能变成“明早吃烤鸭”
模型在训练过程中,随着训练深度增加,梯度在反向传播时逐渐变小,这就是所谓的梯度消失问题。有了快捷连接后能确保各层之间梯度的稳定流动来帮助实现更有效的训练。
🚀 起什么作用
- 原始数据跳过中间层,直接与处理后的数据融合
- 确保梯度稳定流动,实现千层网络的有效训练
💎 总结
四个组件是Transfomer的核心组件,总结下来就是
- **层归一化(LayerNorm)**负责稳定训练,是Transformer每个子层的组成部分,用于归一化层的输出
- GELU激活函数用来理解模糊语义
- **前馈神经网络(FeedForward )**能在内部扩展大模型能力
- 快捷连接可以防止信息失真