私はニューラル ネットワークとディープ ラーニング(最初の 2 つの章) を読んでおり、それに沿って、MNIST データ セットから数字を分類する独自の ANN を構築しようとしています。
私の実装は、10 エポック後にテスト セット (約 5734/10000) の数字を分類する際に最大 57% の精度でピークに達するため、ここ数日間頭を悩ませてきました (トレーニング セットの精度は 10 エポック以降に停滞し、テスト セットの精度は、おそらくオーバー フィッティングのために低下します)。
本とほぼ同じ構成を使用しています。すべての層が完全に接続された 2 層フィードフォワード ANN (784-30-10)。標準のシグモイド活性化関数; 二次費用関数; 重みは同じ方法で初期化されます (平均 0、標準偏差 1 のガウス分布から取得) 唯一の違いは、バッチ/ミニバッチ トレーニングの代わりにオンライン トレーニングを使用していることと、学習率が 3.0 ではなく 1.0 であることです (私はミニバッチ トレーニング + 学習率 3.0 を試しましたが)
それでも、私の実装は一連のエポックの後に 60% パーセンタイルを通過しません。本のように、ANN は最初のエポックの直後にほとんど同じ構成で%90 を超えます。最初は、逆伝播アルゴリズムの実装を台無しにしましたが、逆伝播を異なる方法で 3 回再実装した後、各再実装でまったく同じ結果になり、困惑しました...
バックプロパゲーション アルゴリズムが生成する結果の例:
上記と同じ構成のより単純なフィードフォワード ネットワーク (オンライン トレーニング + 学習率 1.0): 3 つの入力ニューロン、2 つの隠れニューロン、および 1 つの出力ニューロン。
初期重みは次のように初期化されます。
Layer #0 (3 neurons)
Layer #1 (2 neurons)
- Neuron #1: weights=[0.1, 0.15, 0.2] bias=0.25
- Neuron #2: weights=[0.3, 0.35, 0.4] bias=0.45
Layer #2 (1 neuron)
- Neuron #1: weights=[0.5, 0.55] bias=0.6
入力が [0.0, 0.5, 1.0] の場合、出力は 0.78900331 です。同じ入力と 1.0 の目的の出力を逆伝播すると、次の偏導関数が得られます (dw = 重みに関する導関数、db = バイアスに関する導関数)。
Layer #0 (3 neurons)
Layer #1 (2 neurons)
- Neuron #1: dw=[0, 0.0066968054, 0.013393611] db=0.013393611
- Neuron #2: dw=[0, 0.0061298212, 0.012259642] db=0.012259642
Layer #2 (1 neuron)
- Neuron #1: dw=[0.072069918, 0.084415339] db=0.11470326
これらの偏導関数でネットワークを更新すると、修正された出力値 0.74862305 が得られます。
上記の結果を確認するのに十分親切な人がいるとしたら、問題の原因としてバックプロパゲーションが正しくないことをほぼ除外したので、非常に役立ちます.
MNIST の問題に取り組んでいる人で、この問題に遭遇した人はいますか? 私はここで本当に迷っているので、チェックすべきことの提案も役に立ちます。