ニューラルネットワークのSoftmax層


43

バックプロパゲーションでトレーニングされたニューラルネットワークにsoftmaxレイヤーを追加しようとしているので、その勾配を計算しようとしています。

出力はで、は出力ニューロン数です。hj=ezj∑ezij

それを導き出せば

∂hj∂zj=hj(1−hj)

ロジスティック回帰に似ています。しかし、数値勾配チェックが失敗するため、これは間違っています。

何が間違っていますか?クロス導関数も計算する必要があると思っていました(つまり)が、これを実行して勾配の次元を維持する方法がわかりません同じように、逆伝播プロセスに適合します。∂hj∂zk


3
質問はグラジエントチェックが失敗する方法に固有であるため、一般的なsoftmaxレイヤーをNNに追加することについては言及していないため、質問のタイトルを改善する必要があります。タイトルを「ニューラルネットワークにsoftmaxレイヤーを追加すると、逆伝播が正しく機能しなくなるのはなぜですか」に変更することを強くお勧めします。
— チャーリーパーカー

回答:


43

アメーバとジュアンパにかなりよく捕らえられているので、これに対する私自身の答えを提供するのは少し悪いと感じます。ただし、ヤコビアン をベクトルに戻す方法についての最終的な直感を除いて。

ヤコビ行列の対角線の勾配を正しく導きました。つまり、

∂hi∂zj=hi(1−hj):i=j

そして、アメーバがそれを述べたように、ヤコビアンのオフダイアゴナルエントリーも導き出さなければなりません。

∂hi∂zj=−hihj:i≠j

これら2つの概念の定義は、クロネッカーデルタと呼ばれる構造を使用して簡単に組み合わせることができるため、勾配の定義は次のようになります。

∂hi∂zj=hi(δij−hj)

したがって、ヤコビアンは正方行列です[J]ij=hi(δij−hj)

これまでのすべての情報は、すでにアメーバとジュアンパでカバーされています。もちろん、問題は、すでに計算されている出力エラーから入力エラーを取得する必要があるということです。出力誤差の勾配はすべての入力に依存するため、入力勾配は∇hixi

[∇x]k=∑i=1∇hi,k

上記で定義されたヤコビ行列が与えられると、これは行列と出力誤差ベクトルの積として自明に実装されます:

σl→=Jσl+1→

softmaxレイヤーが出力レイヤーである場合、それをクロスエントロピーコストモデルと組み合わせると、計算が単純化されて単純になります。

σl→=h→−t→

ここで、はラベルのベクトル、はsoftmax関数からの出力です。簡略化された形式は便利であるだけでなく、数値安定性の観点からも非常に便利です。t→h→


であり、?(この場合、「勾配」が何であるかを理解しようとしています)σl→=(σl,1,σl,2,...,σl,k)σl,j=∂C∂zj
— アレクサンドルホールデンデーリー14

はい、それは正しいです。
— Mranz

誰かがクロネッカーデルタの小文字のデルタ用語とその計算方法を説明してもらえますか?
— ダニジャー

私はしばらくこの問題に悩まされています。明確にするために。ベクトル(pre softmax)があり、その後、softmaxを計算します。softmaxの値はすべての入力値に依存するため、実際のヤコビ行列が必要です。次に、ヤコビ行列を取得し、行を合計して1つの行ベクトルを取得します。これは通常の勾配降下に使用します。このすべてが100%正しいですか?
— ハーヴェイスラッシュ

14

導関数が間違っています。そのはず、

∂hj∂zk=hjδkj−hjhk

計算をもう一度確認してください。また、クロスエントロピーについてアメーバによって与えられた表現は完全に正しいわけではありません。異なるクラスから抽出された一連のデータサンプルについては、C

−∑n∑k=1Ctknln⁡yk(xn)

ここで、スーパーインデックスはサンプルセットに対して実行されます。t_は、n番目のサンプルのターゲットのk番目のコンポーネントの値です。ここでは、1-of-Cコーディングスキーム、つまりを使用していると仮定しています。そのような場合、対応するクラスを表すコンポーネント(1)を除き、すべてのtはゼロです。tkntkn

tは定数であることに注意してください。したがって、この機能を最小化することは、最小化することと同等です。

−∑n∑k=1Ctknln⁡yk(xn)+∑n∑k=1Ctknln⁡tkn=−∑n∑k=1Ctknln⁡yk(xn)tkn

これには、ヤコビアンが非常に便利な形式をとるという利点があります。

∂E∂zj=hj−tj

パターン認識用の Bishopのニューラルネットワークのコピーを入手することをお勧めします。私見はまだニューラルネットワークに関する最高の本です。


14

softmaxの各出力はすべての入力に依存するため、実際には勾配はヤコビアン行列全体になります。正しく計算し、場合はも必要です。最初の式を導出できれば、2番目の式も簡単に導出できるはずです。∂jhj=∂hj∂zj=hj(1−hj)∂khj=−hjhkj≠k

バックプロパゲーティングでどのような問題が発生するのかわかりません:softmaxレイヤーには出力と個の入力があるため、各出力からのエラーが各入力に伝搬されるはずです。まさに、ヤコビアン全体が必要な理由です。一方、通常、、出力に関連付けられたコスト関数があります。ここで、は目的の出力です(分類を行う場合、多くの場合、それらの1つは1に等しくなります) 、その他を0に)。実際、あなたはに。これは、きちんとした表現をもたらすチェーンルールで計算でき、実際はベクトル(行列ではありません)です。jj

C=−∑jtjlog⁡hj,
tj∂C∂zj

1
たとえば、このチュートリアルufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithmに従って、問題をより良く説明しようとします。重みとデルタに微分係数を要素ごとに掛ける必要があります(ステップ番号3)。そのため、完全なヤコビ行列がある場合、次元は適合しません。ありがとう。
— ラン

ソフトマックスではなく、通常の隠れ層である場合の処理​​方法を知っていますか?このレイヤーの各ユニットが前のレイヤーのすべてのユニットから入力を取得することを想像してください(つまり、このレイヤーは「完全に接続」されています)。次に、この層を介してエラーを逆伝播する必要があり、導関数もヤコビ行列を形成します。あなたがそれを行う方法について混乱している場合、あなたの混乱はsoftmaxとは無関係です。
— アメーバは、モニカを復活

1
微分係数はベクトルなので、次元に問題はなかったため、線形およびシグモイドレイヤーに正常に実装しました。
— ラン

申し訳ありませんが、蘭、多分私はちょうど愚かなことですが、あなたは完全に以前の層に接続されているシグモイド層を持っている場合、各ユニットに出力(または入力)、各ユニットからの着信接続に関する導関数がありますに前の層、つまり、すべての導関数は2D行列を形成します。n'est-cepas?ji
— アメーバは、Reinstate Monica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.