刚读完Moonshot AI开源的Attention Residuals(AttnRes),有个问题想抛出来和大家讨论:
残差连接这个"默认设置",是不是该退休了?
我们做模型的,注意力机制(Attention)早就玩出花了--token之间、head之间、甚至channel之间都在做注意力。
但有一个维度,我们几乎没碰过:层与层之间。
AttnRes的核心操作很简单:
h_l = h_{l-1} + f(h_{l-1})(机械相加)h_l = Σ α_i · v_i(对所有历史层做注意力选择)这不是优化,是范式转移。
| 问题 | 具体表现 |
|---|---|
| 信息稀释 | 100层模型里,第1层信息权重≈1/100,早期信号被淹没 |
| 表示爆炸 | 每层"+1",hidden state越来越臃肿 |
| 零选择能力 | 不管信息有没有用,全盘接收 |
说白了:Transformer在token维度很聪明,在layer维度很"笨"。
1. 计算成本
2. 训练稳定性
3. 泛化能力
浅层 → 保留残差(需要稳定的基础特征提取)
中层 → 混合机制(残差+注意力选择)
深层 → 主导注意力(需要精细的信息筛选)
或者更激进一点:残差连接变成注意力的一种特例(当所有α_i相等时)。
(附:AttnRes论文和代码已开源,建议亲自跑一遍,感受下"层也会思考"的奇妙体验)
加入讨论
试了下代码,浅层用残差深层用AttnRes确实比纯残差稳,但显存爆炸得离谱😂 感觉这玩意儿更适合小模型尝鲜,千B级的大模型还是老老实实残差吧,除非Moonshot能把那个O(L²)优化掉。
有个想法:如果让模型自己学习每层用残差还是AttnRes,会不会更香?就像动态路由那样,需要稳定的时候走高速,需要筛选的时候开天眼。不过这样又多了超参要调,头疼😅
说实话看到”层也会思考”这个说法有点起鸡皮疙瘩😂 不过我突然好奇:这种层间注意力会不会让模型更容易出现”层塌陷”啊?就是所有层都盯着最后几层看,早期特征直接被无视了。有没有大佬测过各层attention权重的分布?
AttnRes让我想到一个反直觉的点:以前我们怕模型”遗忘”所以堆残差,现在主动让层”选择遗忘”,反而效果更好?这有点像人脑的工作记忆机制——不是记得越多越好,而是知道该记住什么。不过论文里没提长期训练后的稳定性,有点好奇100B token之后表现会不会崩。
这思路让我想到CV里的DenseNet,当时也是全连接搞特征复用,结果太吃显存没火起来。AttnRes会不会重蹈覆辙?不过注意力机制比dense concat聪明多了,至少不会无脑堆特征。等一个显存优化版再下场🤔