神经网络中的Softmax层


43

我试图将softmax层添加到经过反向传播训练的神经网络中,所以我试图计算其梯度。

softmax输出为其中,j是输出神经元数。hj=ezjezij

如果我得到它,那么我得到

hjzj=hj(1hj)

与逻辑回归相似。但是,这是错误的,因为我的数值梯度检查失败。

我究竟做错了什么?我有一个想法,我需要计算交叉衍生物以及(即),但我不知道如何做到这一点,并保持梯度相同的尺寸,因此将适合的反向传播过程。hjzk


3
您应该改进问题的标题,因为它不是在向NN添加常规softmax图层,因为您的问题是关于梯度检查如何失败的特定问题。我强烈建议将标题更改为“当向我的神经网络添加softmax层时,为什么反向传播无法正常工作”。
查理·帕克

Answers:


43

我为此提供自己的答案有点不好,因为它可以被变形虫和juampa很好地捕获,除了关于如何将Jacobian 还原为向量的最终直觉之外。

您正确地得出了雅可比矩阵对角线的梯度,也就是说

hizj=hi(1hj):i=j

就像变形虫所说的那样,您还必须导出雅可比行列的非对角线项,从而得出

hizj=hihj:ij

可以使用称为Kronecker Delta的结构方便地组合这两个概念的定义,因此渐变的定义变为

hizj=hi(δijhj)

[J]ij=hi(δijhj)

hixi

[x]k=i=1hi,k

给定上面定义的雅可比矩阵,可以简单地将其实现为矩阵与输出误差向量的乘积:

σl=Jσl+1

如果softmax层是您的输出层,则将其与交叉熵成本模型结合使用可简化计算过程,从而简化

σl=ht

th


σl=(σl,1,σl,2,...,σl,k)σl,j=Czj

对,那是正确的。
Mranz

有人可以解释一下Kronecker Delta中的小写字母delta项是什么以及如何计算它们吗?
danijar

我在这个问题上停留了一段时间。澄清。您有一个向量(softmax之前),然后计算softmax。由于softmax的值取决于所有输入值,因此需要实际的雅可比矩阵。然后,使用雅可比矩阵,对行进行求和以得到单个行向量,该向量将照常用于梯度下降。所有这些都是100%正确的吗?
harveyslash

14

导数是错误的。它应该是,

hjzk=hjδkjhjhk

C

nk=1Ctknlnyk(xn)

如果超索引遍历样本集,则是第n个样本的目标的第k个成分的值。这里假设您使用的是C制1编码方案,即。在这种情况下,除表示其相应类别的分量为1之外,所有t均为零。tkntkn

注意,t是常数。因此,最小化此功能等同于最小化,

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

其优点是雅可比行列式采用非常方便的形式,即

Ezj=hjtj

我建议您获得Bishop的模式识别神经网络的副本。恕我直言仍然是关于神经网络的最好的书。


14

softmax的每个输出都取决于所有输入,因此梯度确实是一个完整的Jacobian矩阵。您已正确计算,但如果则还需要。我想如果您可以导出第一个表达式,那么您也应该很容易就能导出第二个表达式。ķħĴ=-ħĴħķĴķjhj=hjzj=hj(1hj)khj=hjhkjk

我不确定反向传播会出现什么问题:在softmax层中,您有输出和输入,因此每个输出的错误都应该传播到每个输入,这就是为什么您需要整个Jacobian的原因。另一方面,通常您会具有与softmax输出关联的成本函数,例如其中是您想要的输出(进行分类时,通常其中一个等于1 ,其他则设为0)。然后,实际上您对,可以使用链规则计算整洁的表达式,实际上它是一个向量(不是矩阵)。Ĵ Ç = - Σ ĴĴ日志ħ ĴĴ Çjj

C=jtjloghj,
tjCzj

1
我将尝试更好地描述我的问题,例如,根据本教程ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm的说明,我需要将权重和增量与导数元素相乘(步骤3)。因此,如果我有完整的jacobian矩阵,则尺寸不合适。谢谢。
2013年

如果不是softmax,而是通常的隐藏层,您知道如何进行吗?想象一下,通常在这种情况下,该层上的每个单元都从上一层的所有单元获取输入(即,该层已“完全连接”)。然后,您还需要通过该层向后传播误差,并且导数也形成雅可比矩阵。如果您对如何做感到困惑,那么您的困惑与softmax无关。
变形虫说恢复莫妮卡

1
我已经成功实现了线性和S形图层,因为导数是向量,因此尺寸没有问题。
2013年

抱歉,冉,也许我只是个愚蠢的人,但是如果您有一个与上一层完全相连的S形层,则每个单元的输出(或输入)对于从上的每个单元传入连接都是派生的。上一层,即所有导数形成2D矩阵,n'est-ce pas?ji
变形虫说恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.