我试图将softmax层添加到经过反向传播训练的神经网络中,所以我试图计算其梯度。
softmax输出为其中,j是输出神经元数。
如果我得到它,那么我得到
与逻辑回归相似。但是,这是错误的,因为我的数值梯度检查失败。
我究竟做错了什么?我有一个想法,我需要计算交叉衍生物以及(即),但我不知道如何做到这一点,并保持梯度相同的尺寸,因此将适合的反向传播过程。
我试图将softmax层添加到经过反向传播训练的神经网络中,所以我试图计算其梯度。
softmax输出为其中,j是输出神经元数。
如果我得到它,那么我得到
与逻辑回归相似。但是,这是错误的,因为我的数值梯度检查失败。
我究竟做错了什么?我有一个想法,我需要计算交叉衍生物以及(即),但我不知道如何做到这一点,并保持梯度相同的尺寸,因此将适合的反向传播过程。
Answers:
我为此提供自己的答案有点不好,因为它可以被变形虫和juampa很好地捕获,除了关于如何将Jacobian 还原为向量的最终直觉之外。
您正确地得出了雅可比矩阵对角线的梯度,也就是说
就像变形虫所说的那样,您还必须导出雅可比行列的非对角线项,从而得出
可以使用称为Kronecker Delta的结构方便地组合这两个概念的定义,因此渐变的定义变为
给定上面定义的雅可比矩阵,可以简单地将其实现为矩阵与输出误差向量的乘积:
如果softmax层是您的输出层,则将其与交叉熵成本模型结合使用可简化计算过程,从而简化
softmax的每个输出都取决于所有输入,因此梯度确实是一个完整的Jacobian矩阵。您已正确计算,但如果则还需要。我想如果您可以导出第一个表达式,那么您也应该很容易就能导出第二个表达式。∂ķħĴ=-ħĴħķĴ≠ķ
我不确定反向传播会出现什么问题:在softmax层中,您有输出和输入,因此每个输出的错误都应该传播到每个输入,这就是为什么您需要整个Jacobian的原因。另一方面,通常您会具有与softmax输出关联的成本函数,例如其中是您想要的输出(进行分类时,通常其中一个等于1 ,其他则设为0)。然后,实际上您对,可以使用链规则计算整洁的表达式,实际上它是一个向量(不是矩阵)。Ĵ Ç = - Σ Ĵ吨Ĵ日志ħ Ĵ,吨Ĵ ∂ Ç