我第一次看到 Mish 激活函数的公式时,第一反应是:这个东西比 ReLU 优雅太多了。一个光滑、非单调、带一点负值的曲线,既避免了死神经元,还自带“自正则化”的说法。当时我正好在调一个图像分类模型,立刻换上 Mish,效果果然涨了一个点。但后来我翻遍了主流大语言模型的配置,从 GPT 到 LLaMA 到 Mistral,居然没有一个用它。这个反差让我困惑了很久。

今天这篇文章,我想把 Mish 的数学设计、它在计算机视觉里的战绩,以及它为什么始终没有踏进 LLM 训练的大门,一次讲清楚。你会发现,答案并不在于“谁更好”,而在于“谁更适合工程现实”。
Mish 的美丽设计:光滑、非单调、还带自正则
Mish 由 Diganta Misra 在 2019 年提出,论文标题就标榜了两个关键词:Self Regularized 和 Non-Monotonic。它的定义非常简单:
f(x) = x · tanh(softplus(x)), softplus(x) = ln(1 + e^x)
从图像上看,Mish 在正区间近似 y=x,在负区间并不像 ReLU 那样一刀切为 0,而是保留了一个小小的负数,最小值约为 -0.3088。这个“负尾巴”的意义在于:它允许一部分负向信息继续流动,减少了神经元在训练中死亡的概率。同时,Mish 在 x=0 附近是光滑的,梯度不会出现跳变,这在深层网络中往往意味着更稳定的反向传播。
论文里把这种负向信息保留称为“自正则化”。论文摘要中写道:“We show that Mish is a self-regularized non-monotonic activation function which helps in ease of optimization and better generalization.” 换句话说,Mish 在抑制过大负响应的同时,又给梯度留下一条窄窄的通道。这种设计听起来很聪明。
在 CV 上它是英雄,在 LLM 里它是路人
Mish 的高光时刻来自计算机视觉。YOLOv4 的骨干网络使用了 Mish,在 COCO 上带来了明显可见的精度提升。这个成绩让很多人(包括我)相信,Mish 会顺势成为通用激活函数的下一个标准。
然而,2018 年 BERT 已经把 GELU 定义为 Transformer 的事实标准,随后 GPT-2、GPT-3 继续沿用它。GELU 的公式是 GELU(x) = x · Φ(x),其中 Φ(x) 是标准正态分布的 CDF。把它和 Mish 并列看,你会惊讶——它们有太多相似之处:都光滑、都有负值、在正区间都近似线性。区别主要是负值区域的形状和饱和程度。
更关键的是,LLM 训练的激活函数很快就从“单激活”进化到了“门控激活”。LLaMA 论文报告了他们对比的多个激活函数,其中 SwiGLU 在多数任务上表现最好。SwiGLU 的结构是:
SwiGLU = Swish(xW) ⊗ (xV)
把一个线性变换分成两路,一路经过 Swish,另一路作为门控,两者逐元素相乘。这个设计引入了额外的参数,让神经元能学会“什么时候开,开多大”。相比之下,Mish 只是一个对每个元素单独施加的非线性,没有这种自适应门控能力。
三个原因解释一切:开销、先发、门控
如果把“Mish 为什么没进 LLM”压缩成三个词,那就是开销、先发、门控。下面展开说。
- 计算开销太高。Mish 的表达式包含
ln、exp、tanh,而 ReLU 只需要一个max(x, 0)。GELU 也包含 erf 或 sigmoid 的近似,但现代 GPU 上已有高效的 CUDA 内核。Mish 的增加开销在千亿参数的模型上会被放大到不可接受。 - 先发优势实在太强。GELU 从 BERT 时代就站稳了脚跟,社区围绕它积累了海量的调参经验和 CUDA 优化。Mish 没有在语言模型的关键期打入市场,自然被主流框架边缘化。PyTorch 直到 1.9 才正式添加 Mish,而 GELU 和 SiLU 早已是标配。
- 门控激活才是 Transformer 的未来。从 PaLM 到 LLaMA,SwiGLU 成了一个标准组件。它把激活函数从“非线性函数”变成了“可学习的路由机制”。Mish 既没有天然的门控形式,也没有被证明能替代门控结构,所以它被留在了上一代。
我的认知转变:激活函数不是孤岛
我不止一次想,如果 Mish 真的能提升图像分类,为什么不能在 LLM 里也试试?有一次,我在一个小型 GPT 模型上把 GELU 替换成了 Mish,结果训练损失明显震荡,最后不得不回滚。后来我意识到:LLM 里的激活函数不是孤立的,它和 LayerNorm、残差连接、学习率热启、初始化方式都纠缠在一起。Mish 的负值范围更大,会轻微改变 LayerNorm 的输入分布,进而影响整个训练稳定性。这个现象也许可以通过调参解决,但工程团队不会为一个没有显著收益的方案冒险调参。
这个经历让我想通了一个道理:一个技术能否流行,数学上的优雅只是基础,更要看它在既有生态系统中的替代成本。Mish 的问题是,它比 GELU 贵,又没有比 GELU 好,还缺乏门控的扩展性。在“更好”和“更贵”之间,LLM 训练永远会选那个已经被验证过、成本更低的选择。
当前边界:Mish 还在哪里活着?
Mish 没有消失。它在一些对参数量不敏感的小模型、边缘设备上的目标检测、强化学习策略网络里仍然有用。但它作为一个激活函数,在 LLM 训练中基本被宣判了“不适合产业化”。如果你想在模型里尝试 Mish,可以做一个小规模的对比实验,但不要期待它能解决训练 loss 不下降的问题——问题的根源往往在别处。
用一张表来总结不同激活在 LLM 语境下的定位:
| 激活函数 | 单调性 | 光滑性 | 计算开销 | LLM 现状 |
|---|---|---|---|---|
| ReLU | 非单调(负区为0) | 不光滑 | 极低 | 仅早期 Transformer |
| GELU | 非单调(有小负值) | 光滑 | 中 | BERT/GPT 的默认选择 |
| Swish/SiLU | 非单调 | 光滑 | 中 | 门控激活的基础 |
| Mish | 非单调 | 光滑 | 高 | 几乎不在 LLM 出现 |
| SwiGLU | 门控非线性 | 光滑 | 中高 | LLaMA / PaLM 主流 |
回到最初的问题:Mish 为什么没在 LLM 训练中流行起来?因为它最好的时代,恰好是 Transformer 已经被 GELU 和 SwiGLU 填满的时代。它不是输在了数学上,而是输在了历史和工程学的交叉点上。如果你能接受这一点,你对深度学习生态的理解会比只盯着精度数字的人深一层。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/489.html