Elea Notes.

词条 · AI · 核心

残差流

贯穿模型所有层的一条主干向量,每层往上加一点自己的贡献,读写都在这条流上。

也称:residual stream、残差流、残差连接、residual connection

一句话

残差流是模型内部的一条公共总线。每一层不是把前一层的结果替换掉,而是往这条总线上一个修正量。所以最后一层看到的,是所有层贡献的累加。

先看一个麻烦:层数越多,反而越差

直觉上,网络层数越多,能表达的东西越复杂,效果该越好。

现实里长期不是这样。层数堆到几十层之后,训练开始失败——不是过拟合(训练集上表现好、测试集差),而是训练集上就学不动。更深的网络输给更浅的网络。

这件事很反常。因为深网络理论上完全可以模拟浅网络:把多出来的层都学成「原样输出」就行。它做不到,说明问题不在表达能力,在能不能被训出来

朴素尝试为什么都不够

调小学习率、换初始化。 有帮助,但治不了根。核心困难是:每一层都是一次完整的变换,信号要穿过五十次变换才到输出,梯度要反着穿五十次才回到第一层。每次穿过都乘上一个矩阵,几十次连乘之后,梯度要么指数级缩小到消失,要么指数级放大到爆炸。

让每层学「原样输出」当保底。 想法对,但对一个矩阵变换来说,学出恒等映射其实很难——它得把权重精确地凑成单位矩阵,这在高维里是个极小的靶子。保底动作本身太难做,这是关键。

机制

改动小得出奇:给每层加一条绕过它的通路。

不带残差:           带残差:

  x                     x ──────┐
  │                     │       │ 跳过这层
  ▼                     ▼       │
[ 第 n 层 ]           [ 第 n 层 ]│
  │                     │       │
  ▼                     ▼       │
 输出                   (+) ◄───┘


                       输出

写成式子就是从 xn+1=F(xn)x_{n+1} = F(x_n) 变成:

xn+1=xn+F(xn)x_{n+1} = x_n + F(x_n)

这一个加号改变了两件事。

保底动作变简单了。 现在「什么都不做」只需要让 FF 输出零。让一个变换输出零,比让它凑出单位矩阵容易得多——权重衰减到 0 附近就行。于是深网络终于能真正地「至少不比浅网络差」。

梯度有了一条直路。 反向传播时,xnx_n 这一项的导数是 1,所以梯度可以顺着加号原封不动地流回去,不必每层都乘一个矩阵。几十层连乘导致的消失/爆炸就此绕开。

而对理解模型内部,更重要的是这个视角转换:既然每层都是往同一个 xx 上加东西,那这个 xx 就不再是「第 n 层的输出」,而是一条从头贯穿到尾的公共总线。每层做的事变成两个动作:从总线上它关心的信息,往总线上它的贡献。

第 0 层        第 10 层       第 20 层       末层
  │              │              │            │
  ▼              ▼              ▼            ▼
──●──────────────●──────────────●────────────●──►  残差流
  ↑读↓写         ↑读↓写         ↑读↓写

为什么值得知道

这个「公共总线」的图像是当下大部分模型内部机制研究的落脚点。因为所有层都在同一个空间里读写,这个空间的方向就有了跨层的稳定含义。

一个反复被观察到的经验现象:许多高层行为——说不说真话、拒不拒绝回答、表现出何种语气性格——在残差流里近似对应一个方向。沿这个方向给向量加一点,对应行为就强一点。这让两件事成为可能:

  • 测量:把某一层的激活投影到某个方向上,读出模型此刻在这个属性上的位置。
  • 干预:直接在激活上加减这个方向,改变模型行为,不动任何权重。

找方向最常用的办法叫均值差:准备两组提示,一组诱发目标属性、一组压制它,把两组激活的平均值相减。

这里有个容易滑过去的坑,值得记住:两极能分开,不等于这条轴有刻度。二元对比只能证明「诱发组」和「压制组」落在不同位置,不能保证中间程度的样本落在两者之间。想声称这条轴可度量,得再造一个中间档、留出来不参与建向量,然后检验它是否确实落在中间。分类边界和测量尺是两回事。

另外,这类方向通常在中层最清晰。很粗略的解释是:前几层还在处理词形和局部语法,末几层已经在为输出具体词做准备,中间那段才是抽象属性停留得最久的地方。

来源

  1. Deep Residual Learning for Image Recognition · arXiv