繁体   English   中英

多类分类的 Sigmoid 激活?

[英]Sigmoid activation for multi-class classification?

我正在从头开始实现一个简单的神经网络,仅供练习。 对于二分类问题的 sigmoid、tanh 和 ReLU 激活,我让它工作得很好。 我现在试图将它用于多类、互斥的问题。 当然,softmax 是最好的选择。

不幸的是,我在理解如何在反向传播中实现 softmax、交叉熵损失及其导数时遇到了很多麻烦。 即使在这里和交叉验证上问了几个问题,我也得不到任何好的指导。

在我尝试进一步实现 softmax 之前,是否有可能以某种方式将 sigmoid 用于多类问题(我试图预测 n 个字符中的 1 个,这些字符被编码为单热向量)? 如果是这样,哪种损失函数最好? 我一直在对所有二元分类使用平方误差。

你的问题是关于神经网络的基础知识,因此我强烈建议你从这里开始(迈克尔尼尔森的书)。 这是一本面向 Python 的书籍,带有图形、文本和公式化的解释——非常适合初学者。 我相信你会发现这本书对你的理解很有帮助。 查找第 2 章和第 3 章来解决您的问题。

解决您关于 Sigmoids 的问题,可以将其用于多类预测,但不建议使用。 考虑以下事实。

Sigmoids 是1/(1+exp(-z))形式的激活函数,其中z是前一个隐藏层(或输入)和权重矩阵的行的标量乘积,以及偏置(提醒: z=w_i . x + b其中w_i是权重矩阵的第i行)。 此激活独立于矩阵的其他行。

分类任务与类别有关。 在没有任何先验知识的情况下,即使在大多数情况下,类别也没有顺序值解释; 预测apple而不是orange并不比预测banana而不是nuts 因此,类别的one-hot编码通常比使用单个激活函数预测类别编号的性能更好。

回顾一下,我们想要一个神经元数量等于类别数量的输出层,并且 sigmoid 彼此独立,给定前一层值。 我们还想预测最可能的类别,这意味着我们希望output layer的激活具有probability disribution 但是 Sigmoids 不能保证总和为 1,而 softmax 激活可以。

由于梯度消失问题,使用L2-loss函数也存在问题。 很快,损失的导数是(sigmoid(z)-y) . sigmoid'(z) (sigmoid(z)-y) . sigmoid'(z) (误差乘以导数),这使得这个量变小,当 sigmoid 接近饱和时更是如此。 您可以选择cross entropy ,或log-loss

编辑:更正了有关排序类别的措辞。 澄清一下,分类是许多与我们今天用作对确定的有限值集的分类预测相关的任务的通用术语。 截至今天,在深度模型中使用 softmax 在一般的“狗/猫/马”分类器中预测这些类别,单热编码和交叉熵是一种非常普遍的做法。 如果上述内容正确,则使用它是合理的。 但是,有(许多)情况它不适用。 例如,在尝试平衡数据时。 对于某些任务,例如语义分割任务,类别之间的排序/距离(或它们的嵌入)可以具有意义。 因此,请为您的应用程序明智地选择工具,了解它们在数学上的作用以及它们的含义。

你问的是一个非常广泛的问题。

  • 据我所知,当类变为 2 时,softmax 函数将与 sigmoid 相同,所以是的,它们是相关的。 交叉熵可能是最好的损失函数。
  • 对于backpropgation,公式不好找……有很多方法。既然有了CUDA的帮助,我觉得如果只是想用NN或者CNN的话,没必要花太多时间在上面在未来。 也许尝试一些框架,如 Tensorflow 或 Keras(强烈推荐初学者)会对你有所帮助。
  • 还有很多其他的因素,比如梯度下降的方法,超参数的设置......

就像我说的,这个话题很国外。 为什么不在 Coursera 或斯坦福在线课程上尝试机器学习/深度学习课程?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM