目标实验目标
分两段:先看清编码器与解码器只差一件事——当前位置能不能看见未来;再拆开残差连接与层归一化这两个稳定器,理解深度网络为什么需要它们。
- 理解「双向看」与「单向看」分别对应理解任务和生成任务
- 看懂 y = f(x) + x 里那个「+1」为什么是梯度传送的命根子
- 明白 LayerNorm 如何把乱飞的数值拉回正常量级,Pre-LN 又为何比 Post-LN 稳
下面是一张掩码注意力表。行 = 当前正在处理的词,列 = 它能看见的词。点上方按钮切换编码器与解码器。
续写「它 最 爱 晒太阳」
当前:编码器
双向理解
代表模型:BERT
训练方式:完形填空(挖掉一个词,用左右两边猜回来)
擅长:分类 · 问答 · 提取
掩码生成
代表模型:GPT · Claude
训练方式:根据左侧内容预测下一个词
擅长:写作 · 对话 · 代码
先理解,再生成
代表模型:原始 Transformer · T5
编码器读题、解码器答题,中间用交叉注意力衔接
擅长:翻译 · 摘要
损失在最后一层算出,梯度要一路反向传回第 1 层。每穿一层就要乘一次那层的导数——连乘这件事,要么把梯度碾成零,要么把它吹上天。
没有残差连接
第 1 层收到的梯度只有原来的万分之零点六——几乎为零,参数得不到有效更新。
梯度爆炸、数值溢出,训练当场崩盘。
有残差连接
那个孤零零的「+1」就是命根子。哪怕 ∂f/∂x 小到 0.01,这层的总梯度也是 1.01——稳稳压在 1 附近。
既没碾成零,也没吹爆。96 层网络,相当于给梯度铺了一条直通第 1 层的高速路。
残差那条「只进不减」的高速路,每过一块就往上加一截。拿几个块首尾叠起来看,量级越滚越大。
LayerNorm 三步
对每一个词向量单独做。把一条量级乱飞的向量拉成均值 0、标准差 1。γ、β 是可学习参数,既享受稳定,又不丢灵活。
手算一遍:x = [8, 2, 2, 4]
Post-LN(原始 2017)
LayerNorm 压在残差主路之后——等于在高速路上设了个收费站,深层时梯度仍不稳,得靠脆弱的「学习率预热」哄着训。
Pre-LN(现代 GPT)
Norm 挪到子层之前的支路上,残差主路全程畅通。这才是 GPT 能稳稳堆到几十上百层的关键。
挑战实验课挑战
解码器训练时如果偷看标准答案,会出什么问题?说出「作弊」具体指什么。
把残差去掉,96 层、每层导数 0.9。第 1 层的梯度还剩百分之几?
把 x 换成 [10, 0, 0, 0],自己算出 μ、σ 和归一化后的四个值。
同一套参数下,为什么 Pre-LN 的残差主路「干净」?用式子说明 x 有没有被 Norm 碰过。