バックプロパゲーションでトレーニングされたニューラルネットワークにsoftmaxレイヤーを追加しようとしているので、その勾配を計算しようとしています。
出力はで、は出力ニューロン数です。
それを導き出せば
ロジスティック回帰に似ています。しかし、数値勾配チェックが失敗するため、これは間違っています。
何が間違っていますか?クロス導関数も計算する必要があると思っていました(つまり)が、これを実行して勾配の次元を維持する方法がわかりません同じように、逆伝播プロセスに適合します。
バックプロパゲーションでトレーニングされたニューラルネットワークにsoftmaxレイヤーを追加しようとしているので、その勾配を計算しようとしています。
出力はで、は出力ニューロン数です。
それを導き出せば
ロジスティック回帰に似ています。しかし、数値勾配チェックが失敗するため、これは間違っています。
何が間違っていますか?クロス導関数も計算する必要があると思っていました(つまり)が、これを実行して勾配の次元を維持する方法がわかりません同じように、逆伝播プロセスに適合します。
回答:
アメーバとジュアンパにかなりよく捕らえられているので、これに対する私自身の答えを提供するのは少し悪いと感じます。ただし、ヤコビアン をベクトルに戻す方法についての最終的な直感を除いて。
ヤコビ行列の対角線の勾配を正しく導きました。つまり、
そして、アメーバがそれを述べたように、ヤコビアンのオフダイアゴナルエントリーも導き出さなければなりません。
これら2つの概念の定義は、クロネッカーデルタと呼ばれる構造を使用して簡単に組み合わせることができるため、勾配の定義は次のようになります。
したがって、ヤコビアンは正方行列です
これまでのすべての情報は、すでにアメーバとジュアンパでカバーされています。もちろん、問題は、すでに計算されている出力エラーから入力エラーを取得する必要があるということです。出力誤差の勾配はすべての入力に依存するため、入力勾配は
上記で定義されたヤコビ行列が与えられると、これは行列と出力誤差ベクトルの積として自明に実装されます:
softmaxレイヤーが出力レイヤーである場合、それをクロスエントロピーコストモデルと組み合わせると、計算が単純化されて単純になります。
ここで、はラベルのベクトル、はsoftmax関数からの出力です。簡略化された形式は便利であるだけでなく、数値安定性の観点からも非常に便利です。
導関数が間違っています。そのはず、
計算をもう一度確認してください。また、クロスエントロピーについてアメーバによって与えられた表現は完全に正しいわけではありません。異なるクラスから抽出された一連のデータサンプルについては、
ここで、スーパーインデックスはサンプルセットに対して実行されます。t_は、n番目のサンプルのターゲットのk番目のコンポーネントの値です。ここでは、1-of-Cコーディングスキーム、つまりを使用していると仮定しています。そのような場合、対応するクラスを表すコンポーネント(1)を除き、すべてのtはゼロです。
tは定数であることに注意してください。したがって、この機能を最小化することは、最小化することと同等です。
これには、ヤコビアンが非常に便利な形式をとるという利点があります。
パターン認識用の Bishopのニューラルネットワークのコピーを入手することをお勧めします。私見はまだニューラルネットワークに関する最高の本です。
softmaxの各出力はすべての入力に依存するため、実際には勾配はヤコビアン行列全体になります。正しく計算し、場合はも必要です。最初の式を導出できれば、2番目の式も簡単に導出できるはずです。
バックプロパゲーティングでどのような問題が発生するのかわかりません:softmaxレイヤーには出力と個の入力があるため、各出力からのエラーが各入力に伝搬されるはずです。まさに、ヤコビアン全体が必要な理由です。一方、通常、、出力に関連付けられたコスト関数があります。ここで、は目的の出力です(分類を行う場合、多くの場合、それらの1つは1に等しくなります) 、その他を0に)。実際、あなたはに。これは、きちんとした表現をもたらすチェーンルールで計算でき、実際はベクトル(行列ではありません)です。