You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Softmax MLP分类器隐藏层应选用何种激活函数?

关于MLP隐藏层激活函数的疑问解答

你的观点完全正确——隐藏层使用Softmax激活函数确实非常不合理,咱们来仔细聊聊原因,以及你可以选择的替代方案:

为什么隐藏层不能用Softmax?

  • 信息压缩过度:Softmax的输出是一组加和为1的概率值,这意味着如果某个神经元的输出接近1,其他神经元的输出会被挤压到几乎为0。隐藏层的核心作用是提取和传递特征,这种“非此即彼”的输出会丢失大量有用的特征信息,后续层根本没法学到有效的模式。
  • 梯度消失严重:Softmax的梯度在输出接近0或1时会趋近于0,这会导致网络深层的参数几乎无法更新,训练过程会变得异常缓慢甚至完全停滞,根本没法完成有效的学习。

你可以选用的隐藏层激活函数

当然可以用sigmoid、tanh这类经典非线性激活,不过更推荐现代常用的选项,这里给你列几个:

  • Sigmoid:输出范围(0,1),适合处理一些需要概率化中间特征的场景,但要注意当输入绝对值很大时,梯度会快速消失,现在已经不是隐藏层的首选。
  • Tanh:输出范围(-1,1),相比sigmoid是零均值输出,能稍微缓解梯度消失问题,早期MLP里很常用,但同样存在极端输入下梯度趋近于0的问题。
  • ReLU及其变体:现在隐藏层的首选!公式是max(0, x),计算简单,输入为正时梯度恒定(不会消失),能大幅加速训练。如果担心“死亡ReLU”(输入持续为负时神经元永久失活),可以用Leaky ReLU(给负输入保留微小梯度)、Parametric ReLU等变体。
  • GELU:平滑版的ReLU,结合了概率思想,现在在Transformer等模型里广泛使用,在很多任务上表现比ReLU更优,计算略复杂但效果出色。

隐藏层可以不用激活函数吗?

绝对不行!如果隐藏层去掉激活函数,整个网络会退化成线性模型——多层线性变换的组合本质上还是单个线性变换,相当于你辛辛苦苦搭建的多层感知器,最后和一个简单的线性分类器没区别,完全无法捕捉数据中的非线性关系,这就失去了MLP的核心价值。

最后总结

输出层用Softmax是完全正确的(因为要生成互斥类别的概率分布);隐藏层必须用非线性激活函数,优先选ReLU/GELU这类现代激活,sigmoid/tanh可以用但要注意梯度问题;千万别用Softmax当隐藏层激活,也绝对不能省略隐藏层的激活函数

内容的提问来源于stack exchange,提问作者KOB

火山引擎 最新活动