Wink Pings

激活函数有个存在多年的bug,修复方法只是减一个常数

Ziming Liu指出ReLU、SiLU、GeLU等常用激活函数输出均值不为零,会导致loss spike和表示过冲。修复方式简单到意外:减去一个常数。LLM、ViT、DiT上都看到了提升。

MIT的Ziming Liu在推特上指出了一个常用激活函数的“bug”:ReLU、SiLU、GeLU的输出均值不是零。

这事听起来像废话。ReLU砍掉负半轴,输出当然偏正。但Ziming Liu的论文把这个“废话”当成了正经问题来处理,修完之后,LLM、ViT、DiT上都看到了提升。

偏在哪

今天最常用的激活函数都是非对称的,负半轴被抑制得比正半轴狠。输入分布即使以零为中心,过完激活函数,输出的均值也会往正方向偏。原文图里画得很清楚:原本居中的分布,经过未偏移的激活函数后,整体往右移。

激活函数偏移示意图

影响不小

这个偏差看起来无害,但它会让损失landscape变得病态。具体表现是训练后期出现loss spike、表示过冲、收敛变慢。

loss landscape病理示意图

修复方法

减一个常数就行:

ReLU  -> ReLU - 0.2
GeLU  -> GeLU - 0.115
Swish -> Swish - 0.077

就这么简单。

在训练早期,减法后的loss会略高一点,但很快追上并反超。后期loss更低,曲线也更稳。

loss曲线对比图

表示演化也更平滑。带偏置的轨迹中途会突然拐弯,去掉偏置后变得平滑单调。

表示演化轨迹对比图

在auto-encoder里更明显,去掉偏置后,表示看起来是单调演化的。

auto-encoder表示演化对比图

从损失landscape看,去掉偏置后特征值明显变小。优化不再被尖锐的“山谷”方向拖累,不容易震荡和喷spike。

特征值对比图

结果

图像分类ViT、图像生成DiT、语言模型GPT,三个场景都有改善。Ziming Liu在推文里说,“这个有用的trick是免费的”。

ViT、DiT、GPT性能提升

论文与背景

论文链接:https://arxiv.org/pdf/2610.14500

这是MetaCircle AI Research Exposition的第四天内容。Dan Roy在转发时提到,mufan_li等人用比例极限(proportional limit)模型记录并研究了相关病理。

一点观察

这个发现有意思的地方在于,它没有揭示什么新机制。激活函数输出均值不为零,做深度学习的人都知道,但知道归知道,很少有人把它当成一个必须修复的缺陷。Ziming Liu做的事,相当于把一个所有人默认接受的设计取舍,重新当成bug修了一遍,然后证明修掉它确实划算。

发布时间: 2026-11-01 05:26