通过输入得出单层神经网络的梯度,链规则中的算子是什么?


9

问题是:

对于使用Sigmoid作为输入->隐藏,softmax用于隐藏->输出的单个隐藏层神经网络,得出具有相对熵损失的输入层的梯度。

我可以使用链式规则来完成大部分推导,但是我不确定如何将它们实际“链式”在一起。

定义一些符号

r=xW1+b1

h=σ(r),是S型函数σ

θ=hW2+b2,

y^=S(θ),是softmax函数S

J(y^)=∑一世ÿ日志⁡ÿ^一世,是实标号单热向量ÿ

然后根据链式规则

∂Ĵ∂X=∂Ĵ∂θ⋅∂θ∂H⋅∂H∂[R⋅∂[R∂X

各个渐变为:

∂&θ

∂Ĵ∂θ=(ÿ^-ÿ)
∂ħ
∂θ∂H=∂∂H[Hw ^2+b2]=w ^2Ť
∂ř
∂H∂[R=H⋅(1个-H)
∂[R∂X=∂∂X[Xw ^1个+b1个]=w ^1个Ť

现在,我们必须将定义链接在一起。在单变量中,这很容易,我们只需将所有内容相乘即可。在向量中,我不确定是否要使用逐元素乘法或矩阵乘法。

∂J∂x=(y^-ÿ)∗w ^2Ť⋅[H⋅(1个-H)]∗w ^1个Ť

其中是向量的逐元素乘法,而是矩阵乘法。这种操作组合是我似乎将它们串在一起以获得维向量的唯一方法,我知道是必须的。⋅∗1个⋅dX∂Ĵ∂X

我的问题是:我找出要使用的运算符的原则方法是什么?我对和之间的元素方式的需求感到特别困惑。W2Th

谢谢!


我意识到通常找不到输入的梯度梯度。我相信这是计算单词嵌入的一种方法,您可以选择优化“输入”单词向量。
— amatsukawa

您如何看待dj / dTheta
— raaj

Answers:


4

我认为,回答这个问题的关键是要指出,逐元素乘法实际上是简写形式,因此,当您导出方程式时,您实际上从未使用过它。

实际操作不是逐元素乘法而是梯度的用一个标准的矩阵乘法雅可比,总是。

在非线性的情况下,相对于非线性的矢量输入,非线性的矢量输出的雅可比矩阵碰巧是对角矩阵。因此,确实是,乘以该矩阵的梯度等于非线性相对于损耗元素的输出乘以包含非线性相对于非线性输入的所有偏导数的向量的梯度,但这种遵循从雅可比之中对角线。您必须通过雅可比行列式步骤才能进行元素级乘法,这可能解释了您的困惑。

在数学中,我们有一些非线性,损耗,以及非线性输入(这可以是任何张量)。非线性的输出具有相同的维数 ---正如@Logan所说,激活函数定义为逐元素的。sLx∈Rn×1s(x)∈Rn×1

我们想要

∇xL=(∂s(x)∂x)T∇s(x)L

其中是的雅可比行列式。扩展这个Jacobian,我们得到 ∂s(x)∂xs

[∂s(X1个)∂x1个…∂s(X1个)∂Xñ⋮⋱⋮∂s(Xñ)X1个…∂s(Xñ)∂Xñ]

我们看到,除对角线外,其他所有地方都为零。我们可以对所有对角元素做一个向量

d一世一个G(∂s(X)∂X)

然后使用按元素运算符。

∇X大号=(∂s(X)∂X)Ť∇s(X)大号=d一世一个G(∂s(X)∂X)∘∇s(X)大号

0

每当与激活函数成反比时,操作就变成按元素进行。具体来说,在您的示例中,是反向传播导数,而是激活导数,它们的乘积是元素乘积,。这是因为激活函数在神经网络中被定义为元素操作。δ2=(y^−y)W2Ta′=h∘(1−h)δ2∘a′

请参阅cs224d 讲义幻灯片第30页,它也可能会有所帮助。

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.