単層ニューラルネットワークの勾配をその入力に対して導出する場合、チェーンルールの演算子は何ですか?


9

問題は:

クロスエントロピー損失のある入力->非表示、非表示->出力にシグモイドを使用する単一の非表示層ニューラルネットワークの入力層に関する勾配を導出します。

チェーンルールを使用してほとんどの派生を通過できますが、実際にそれらを「チェーン」する方法については不明です。

いくつかの表記法を定義する

r=xW1+b1

h=σ(r)、はシグモイド関数ですσ

θ=hW2+b2

y^=S(θ)、はソフトマックス関数S

J(y^)=iylogy^i、は実際のラベルのワンホットベクトルy

次に、連鎖ルールによって、

Jx=Jθθhhrrx

個別のグラデーションは次のとおりです。

Jθ=(y^y)
θh=h[hW2+b2]=W2T
hr=h(1h)
rx=x[xW1+b1]=W1T

ここで、定義をチェーン化する必要があります。単一変数ではこれは簡単です。すべてを掛け合わせるだけです。ベクトルでは、要素ごとの乗算と行列の乗算のどちらを使用するかわかりません。

Jx=(y^y)W2T[h(1h)]W1T

ここで、はベクトルの要素ごとの乗算であり、は行列乗算です。この操作の組み合わせは、これらを組み合わせて次元ベクトルを取得する唯一の方法です。これは、があることを知っています。1DxJx

私の質問は、どの演算子を使用するかを理解するための原則的な方法は何ですか?私は、特に間の要素ごとの1のために必要で混乱してると。W2Th

ありがとう!


入力への勾配を見つけることはあまり行われていないことに気づきました。これは、「入力」単語ベクトルを最適化するオプションがある場合、単語の埋め込みの計算へのリードであると思います。
アマツカワ2016

どのようにディディを作成するかdJ / dTheta
raaj

回答:


4

この質問に答える鍵は、要素ごとの乗算が実際には省略形であることを指摘することであり、したがって、方程式を導き出すとき、それを実際に使用することは決してないということです。

実際の操作は、要素毎の乗算代わりの勾配の標準行列乗算ないヤコビアン常に

非線形性の場合、非線形性のベクトル入力に対する非線形性のベクトル出力のヤコビアンは、たまたま対角行列になります。したがって、この行列を乗算した勾配は、非線形性の入力に関する非線形性のすべての偏微分を含むベクトルを要素ごとに乗算した、損失に関する非線形性の出力の勾配と等価です。しかし、これはヤコビアンが対角であることから続きます。要素ごとの乗算にたどり着くには、ヤコビアンステップを通過する必要があります。

数学では、いくつかの非線形性、損失、および非線形性への入力があります(これは任意のテンソルである可能性があります)。非線形性の出力は同じ次元持っています --- @Loganが言うように、活性化関数は要素ごとに定義されます。sLxRn×1s(x)Rn×1

我々が望む

xL=(s(x)x)Ts(x)L

ここで、はのヤコビアンです。このヤコビアンを展開すると、 s(x)xs

[s(x1)x1s(x1)xns(xn)x1s(xn)xn]

対角線を除いてどこでもゼロであることがわかります。すべての対角要素ベクトルを作成できます

Diag(s(x)x)

そして、要素ごとの演算子を使用します。

xL=(s(x)x)Ts(x)L=Diag(s(x)x)s(x)L

0

アクティベーション関数に比例すると、操作は要素ごとになります。具体的には、例を使用すると、は逆伝播微分でありは活性化微分であり、それらの積は要素ごとの積。これは、活性化関数がニューラルネットワークの要素ごとの操作として定義されているためです。δ2=(y^y)W2Ta=h(1h)δ2a

cs224d 講義スライド 30ページを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.