用了多年的激活函数藏着一个bug

用了这么多年的激活函数,可能一直有个隐性的 bug。ReLU、SiLU、GeLU 全在内。 问题出在它们的输出均值不为零。这三个函数都带正偏置,送进去的值有多少被激活,出来后平均落在零的右边。看着是件小事,却会在训练里慢慢攒出问题,比如 loss 突然飙升,比如表征冲过头。 我一开始以为这只是经验之谈,查了论文才发现它有推导。arXiv 2605.17659 指出,在 MSE 或交叉熵损失下,正偏置激活会让正向 pre-activation 的梯度在初始化时的期望不为负,于是把下游权重一点点推向负值。这个漂移是优化过程自带的,跟喂什么数据无关,换架构也躲不掉。ReLU、GELU、SiLU 三个都中招。 漂移累积下去,模型会自己长出稀疏。配上 ReLU,GPT-nano 的激活稀疏度能冲到接近 90%。可稀疏不是越多越好,超过七成以后,模型性能断崖式下滑。诱导稀疏的激活函数也不干净,中间层会冒出激活尖峰。 我最大的感受是,这些函数当年是试出来的,没人从第一性原理保证过它们的均值性质。如今在大模型上跑,一点偏置被放大成可见的病理,才回头去补。修掉这层偏置后,LLM 和 ViT 都有实打实的提升。
话题来源 @ZimingLiu11 86.2K阅读 ❤️671 x.com/…↗ 已改写,非原文转载 Ziming Liu (@ZimingLiu11) on X There is a "bug" in commonly used activation functions (ReLU/SiLU/GeLU etc.) ---- The mean of post-activations is not zero. This bug, however small it seems, leads to pathologies of training dynamic X (formerly Twitter)
36 浏览 0 评论 0 反应
登录 后参与评论
还没有评论,来抢沙发。
查看完整榜单
查看完整榜单
查看完整榜单