Machine learning 多类别分类的乙状结肠激活?

Machine learning 多类别分类的乙状结肠激活?,machine-learning,classification,softmax,activation-function,sigmoid,Machine Learning,Classification,Softmax,Activation Function,Sigmoid,我正在从头开始实现一个简单的神经网络,只是为了练习。我已经让它与乙状结肠,tanh和ReLU的二进制分类问题激活工作良好。我现在正试图用它来解决多类、相互排斥的问题。当然,softmax是最好的选择 不幸的是,我在理解如何在backprop中实现softmax、交叉熵损失及其导数时遇到了很多困难。即使在这里和交叉验证中问了几个问题,我也无法得到任何好的指导 在我尝试进一步实现softmax之前,是否有可能以某种方式使用sigmoid解决多类问题?我正在尝试预测n个字符中的1个,这些字符被编码为一

我正在从头开始实现一个简单的神经网络,只是为了练习。我已经让它与乙状结肠,tanh和ReLU的二进制分类问题激活工作良好。我现在正试图用它来解决多类、相互排斥的问题。当然,softmax是最好的选择

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


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

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

据我所知,当类变为2时,softmax函数将与sigmoid相同,因此它们是相关的。交叉熵可能是最好的损失函数。 对于后推,在那里找到公式并不容易 有很多方法。由于CUDA的帮助,我认为如果你将来只想使用NN或CNN,没有必要花太多时间在上面。也许尝试一些框架,比如Tensorflow或Kerashighly recommand for beginers,会对你有所帮助。 还有许多其他因素,如梯度下降法、超参数设置。。。
就像我说的,这个话题非常广泛。为什么不在Coursera或斯坦福在线课程上尝试机器学习/深度学习课程

你的问题是关于神经网络的基础知识,因此我强烈建议你开始读迈克尔·尼尔森的书。 这是一本面向python的书,有图形、文本和公式化的解释,对初学者来说非常好。我相信你会发现这本书对你的理解很有用。寻找第2章和第3章来解决你的问题

解决你关于乙状结肠的问题,可以将其用于多类预测,但不推荐。考虑下面的事实。

Sigmoid是1/1+exp-z形式的激活函数,其中z是先前隐藏层或输入与权重矩阵行的标量乘法,此外还有一个偏差提示:z=w_i。x+b,其中w_i是权重矩阵的第i行。此激活独立于矩阵的其他行

分类任务与类别有关。在没有任何先验知识的情况下,即使在大多数情况下,类别也没有顺序值解释;预测苹果而不是橘子并不比预测香蕉而不是坚果更糟糕。因此,对类别进行一次热编码通常比使用单个激活函数预测类别编号效果更好

总而言之,我们需要一个输出层,其中神经元的数量等于类别的数量,并且给定前一层的值,乙状结肠彼此独立。我们还想预测最可能的类别,这意味着我们希望输出层的激活具有概率分布的意义。但乙状结肠不能保证总和为1,而softmax激活可以

由于梯度消失问题,使用L2损失函数也存在问题。很快,损失的导数是sigmoidz-y。sigmoid'z误差乘以导数,这使得这个量很小,当sigmoid接近饱和时更大。您可以选择交叉熵,也可以选择对数损失

编辑:
修正了关于分类排序的措辞。为了澄清,分类是许多任务的一个通用术语,这些任务与我们今天所使用的确定有限值集的分类预测有关。到目前为止,在一个通用的狗/猫/马分类器中,使用深度模型中的softmax来预测这些类别,一个热编码和交叉熵是非常常见的做法。如果前面提到的是正确的,那么使用它是合理的。然而,在很多情况下,它并不适用。例如,在尝试平衡数据时。对于某些任务,例如语义分段任务,类别之间可以有顺序/距离,也可以有意义的嵌入。因此,请明智地为您的应用程序选择工具,了解它们在数学上的作用以及它们的含义。

我在我的学位中学习了很多ML/DL,并广泛使用TensorFlow来实现模型。正因为如此,我意识到我已经有一段时间没有看到backprop背后的理论了,如果有人让我从头开始实现算法,我可能会不知所措。我发现我在backprop中列出的激活函数相对容易实现,但在softmax中遇到了麻烦。我不想从头开始实现一个神经网络,这样我就可以在实践中实际使用它——我只想
我们非常熟悉内部工作原理。我们碰巧有这样的主题,比如我们的作业是使用tensorflow结构,而不是使用内置优化函数。。。相信我,以矩阵或一个接一个的形式这样做是相当痛苦的……无论如何,祝你好运。我不完全清楚你在找什么。您不需要使用多类分类器作为神经网络本身的激活函数来生成多类分类。构造多类神经网络的方法不是调整单个神经元的激活函数,而是让输出层每个类包含一个节点。对不起,我想问我的问题更好的方法是:因为我的类是互斥的,softmax显然是最好的,因为你会以概率最高的类作为预测,在输出不是互斥概率的情况下使用sigmoid,而只取sigmoid值最高的输出,这样还可以吗?神经网络能有效地学习这种工作方式吗?你当然可以通过运行一组“一对所有”分类器并在这些分类器中选择得分最高的类来创建一个多类分类器。我猜这将很难应用反向传播。Softmax是可微的,应该更容易在NN中使用。我知道这超出了问题的范围,但如果您愿意,我很乐意在聊天中向您发送我的代码,介绍我尝试使用Softmax实现的情况,看看您是否可以改进它?顺便说一句,这只是Python和numpy。我没有完全理解苹果橙色部分。你是说预测苹果而不是橘子并不比预测香蕉而不是坚果更糟糕吗?对。我编辑了课文以纠正措辞。