Sutskever 30 #16:深网络越深越难训,ResNet 怎么解的

按说网络越深应该越强。再不济,多出来的层学成恒等映射,整个网络退回浅的,也不该更差。但真把一个普通深网络堆起来,事情是拧着的:过了某个深度,越加层越难训,连训练集都拟合不动,训练误差不降反升。He、Zhang、Ren、Sun 2015 年的 ResNet 针对的就是这个怪现象。 上一篇 #15 的 RMC 我训得挺狼狈,三个随机种子里两个直接塌到瞎猜,当时只甩了句「深层堆叠难训」就糊弄过去了。这篇算把那句话补完——它的解法,残差连接,如今每个 Transformer block 里都躺着一个。 残差块 改动很小。普通一层从头学一个变换,h ← tanh(Wh);残差块学的是在原来基础上加多少: $$h \leftarrow h + W_2\,\tanh(W_1 h)$$F 没学到有用的东西就退回 0,这层自动成了恒等映射。「至少不会更差」这件事,被写进了结构里。 真正值钱的是反向。梯度经过一个残差块时, $$\frac{\partial y}{\partial x} = I + \frac{\partial F}{\partial x}$$I 那一项把上游梯度原样递回去。哪怕 ∂F/∂x 已经小到忽略不计,梯度也跌不破这个 1。叠几十层,最前面那几层照样收得到信号。普通层没有这一项,它的梯度是几十个雅可比矩阵连乘的结果,乘着乘着就归零了。 在螺旋上跑一遍 我拿三条缠在一起的螺旋臂做二维分类。这任务浅网络随手就解,是我故意挑简单的:这样深网络一旦训不动,锅只能算在优化头上,跟任务难不难没关系。 两个网络宽度相同、权重层数也相同,唯一的区别是那根 skip 线。深度从 2 拉到 48: 深度(权重层数) plain 残差 8 1.000 1.000 16 0.978 1.000 24 0.628 1.000 32 0.520 1.000 48 0.502 1.000 浅的时候两边都满分。plain 过了 16 层开始掉,到 48 层只剩 0.5,离三分类瞎猜的 0.33 没多远了。这是训练准确率——它连自己浅的时候能轻松拟合的那批数据,现在都喂不进去了。残差网络参数一个不差,全程 1.0。 ...

June 8, 2026

Sutskever 30 #15:把注意力当记忆用,可惜很娇气

#14 结尾留了个尾巴:RN 把每一对对象等权求和,差一步就是 self-attention——把等权换成 softmax 加权。Santoro 那帮人 2018 年的 Relational Recurrent Neural Networks(模型叫 Relational Memory Core,简称 RMC)就把这一步迈了出去,还顺手做了件事:把这套加权的 all-pairs 塞进一块循环记忆里。不是对输入对象两两算一次,而是养一组「记忆槽」,每来一个输入就让这些槽互相 attend、互相更新一遍。 拆到底,RMC 就是拿一个 Transformer block 当记忆的更新规则用。想法很漂亮。但我训下来最大的收获,是它在最小版里出乎意料地难伺候。 它长什么样 记忆是 S 个槽、每个宽 D 的一块矩阵 M。每来一个输入,嵌成一行 e,拼到记忆后面,然后对这 S+1 行做一个标准的 Transformer encoder block: $$\tilde M = \mathrm{LN}\big(M + \mathrm{Attn}(M,\ [M; e])\big), \qquad M' = \mathrm{LN}\big(\tilde M + \mathrm{MLP}(\tilde M)\big)$$attention 的 query 来自记忆槽,key 和 value 来自「槽加上这一步的输入」,所以一个槽既能读别的槽,也能读新来的输入。M' 就是下一步的记忆。整段序列走完,把最后的记忆拍平读出答案。跟 #12 NTM 那套手工设计的读写头比,这里没有专门的读写机制,记忆的更新规则就是 self-attention 本身——这也正是它跟 #05 Transformer 的关系:同一个 block,Transformer 拿它当整个模型的主干,RMC 拿它当循环记忆的更新规则。 ...

June 7, 2026