Softmax MLP 分类器 - 在隐藏层中使用哪个激活函数?
Posted
技术标签:
【中文标题】Softmax MLP 分类器 - 在隐藏层中使用哪个激活函数?【英文标题】:Softmax MLP Classifier - which activation function to use in hidden layer? 【发布时间】:2018-09-29 22:48:54 【问题描述】:我正在从头开始编写一个多层感知器,只有一个输入层、隐藏层和输出层。输出层会使用 softmax 激活函数来产生多个互斥输出的概率。
在我的隐藏层中,使用 softmax 激活函数对我来说也没有意义 - 这是正确的吗?如果是这样,我可以只使用任何其他非线性激活函数,例如 sigmoid 或 tanh 吗?或者我什至可以不在隐藏层中使用任何激活函数,而只是将隐藏节点的值保持为输入节点和输入到隐藏权重的线性组合?
【问题讨论】:
【参考方案1】:在我的隐藏层中,使用 softmax 激活函数对我来说也没有意义 - 这是正确的吗?
确实是这样。
如果可以,我是否可以只使用任何其他非线性激活函数,例如 sigmoid 或 tanh?
可以,但大多数现代方法都需要 Rectified Linear Unit (ReLU) 或其一些变体(Leaky ReLU、ELU 等)。
或者我什至可以不在隐藏层中使用任何激活函数,而只是将隐藏节点的值保持为输入节点和输入到隐藏权重的线性组合?
没有。非线性激活确实是阻止(可能很大)神经网络表现得像单个线性单元一样的原因。它可以显示(参见 Andrew Ng 的相关讲座@Coursera Why do you need non-linear activation functions?):
事实证明,如果你使用 线性激活函数,或 或者,如果您没有 激活函数,那么无论如何 你的神经网络有很多层, 一直在做的只是计算线性 激活函数,所以你不妨 没有任何隐藏层。
带回家的是一个线性隐藏层 或多或少是无用的,因为 两个线性函数的合成是 本身是一个线性函数;所以除非你 然后在那里抛出一个非线性 你不是在计算更有趣 即使你更深入地了解它的功能 网络。
实际上,您可以使用线性激活函数的唯一地方是回归问题的输出层(在上面链接的讲座中也有解释)。
【讨论】:
【参考方案2】:您可以使用任何激活函数。只需测试一些,然后选择能产生最佳结果的那个。不过不要忘记尝试 Relu。据我所知,这是最简单的,实际上效果很好。
【讨论】:
太模糊了;隐藏层的“任何激活函数”(这是 OP 要求的)可能包括 softmax(不建议)和线性(完全错误)激活以上是关于Softmax MLP 分类器 - 在隐藏层中使用哪个激活函数?的主要内容,如果未能解决你的问题,请参考以下文章
翻译: 4.2. 从零开始实现多层感知器MLP pytorch
分类器神经网络的最后一层是不是同时使用 sigmoid 和 softmax?
翻译: 4.1 多层感知器MLP Multilayer Perceptrons pytorch