在隐藏层使用 softmax,在输出层使用 relu 进行 CNN 回归
Posted
技术标签:
【中文标题】在隐藏层使用 softmax,在输出层使用 relu 进行 CNN 回归【英文标题】:Using softmax in hidden layer and relu in output layer for CNN regression 【发布时间】:2020-10-13 19:06:51 【问题描述】:我正在创建一个 CNN,以根据测量的光谱 (2D) 预测应用于光纤的分布应变,这在理想情况下是洛伦兹曲线。标签是一维数组,其中只有应变部分不为零(标签看起来像方波)。
我的 CNN 有 10 个交替卷积和池化层,全部由 RelU 激活。然后是 3 个带有 softmax 激活的全连接隐藏层,然后是由 RelU 激活的输出层。通常,CNN 和其他神经网络将 RelU 用于隐藏层,然后将 softmax 用于输出层(在分类问题的情况下)。但在这种情况下,我使用 softmax 首先确定施加应变的光纤的位置(即非零),然后在输出中使用 RelU 进行回归。我的 CNN 能够相当准确地预测标签,但我找不到任何支持出版物,其中在隐藏层中使用了 softmax,在输出层中使用了 RelU;除了我在 Quora/*** 中找到的方法之外,为什么不推荐这种方法(即在数学上不可行)。如果有人能在这件事上给我启发,我将不胜感激,因为我对深度学习还很陌生,并希望从中学习。提前谢谢!
【问题讨论】:
【参考方案1】:如果你看一个层 l 看到前一层 l-1 的输入的方式,它假设特征向量的维度是线性独立的。
如果模型使用一组神经元建立某种置信度,那么这些神经元最好是线性独立的,否则只是夸大了 1 个神经元的值。
如果您在隐藏层中应用 softmax,那么您实际上是在组合多个神经元并篡改它们的独立性。此外,如果您查看首选 ReLU 的原因是因为它可以为您提供更好的梯度,而其他激活(如 sigmoid)不会。此外,如果您的目标过于向层添加规范化,则最好使用显式批量规范化层
【讨论】:
对我迟到的评论感到非常抱歉。我相当怀疑为什么我从我的模型中获得了非常好的结果——我在隐藏层中使用了 softmax,因此神经元不再是线性独立的。谢谢你解释这个。使用 ReLU 并添加批量归一化确实改善了结果。谢谢! @ella 对 SO 表示感谢的最佳方式是接受答案。 感谢您的指出!我不知道这一点(这是我在 SO 中的第一篇文章),所以很抱歉这么长时间没有接受它。以上是关于在隐藏层使用 softmax,在输出层使用 relu 进行 CNN 回归的主要内容,如果未能解决你的问题,请参考以下文章
在回归(非分类)问题中是不是可以使用 softmax 作为隐藏层激活函数?
在pytorch中使用交叉熵损失时我应该使用softmax作为输出吗?