ラビットチャレンジ 深層学習day2レポート 実装演習

Section1 勾配消失問題

ニューラルネットワーククラス

多層のニューラルネットワークを構築するクラス

 

クラスを実行しただけなので出力は無し。

勾配消失問題

上記クラスを使用して勾配消失問題を確認する。
条件

  • 入力層のノード数784、隠れ層のノード数40、20、出力層のノード数10
  • 活性化関数はシグモイド関数
  • 重みの初期化はガウス分布
  • 学習が失敗するパターン

結果出力

Generation10~1900は省略。

グラフ

エポックが進んでも学習が行われていない。

ReLU – gauss

活性化関数にRuLu関数、初期値は正規分布。

出力結果

500エポックまでは学習できていないがその後、精度が上がっていることが確認できる。
ReLu関数で勾配消失問題が回避できた。

sigmoid – Xavier

活性化関数にシグモイド関数、初期値にザビエル

結果出力

少ないエポック数の時点から精度の改善がみられる。
活性化関数がシグモイド関数でもXavier初期化で勾配消失問題を回避できた。

ReLU – He

活性化関数にReLU、初期化にHe

出力結果

バッチ正規化

バッチ正規化クラス

バッチ正規化を適用した学習

活性化関数にReLU、初期化にHe

出力結果

Section2 学習率最適化手法

SGD

確率的勾配降下法ではうまくいなかないことを確認した。

モーメンタム

出力結果

モーメンタムでも精度が上がらないことを確認した。

AdaGrad

立ち上がりは遅いが、1000エポック目には学習が進み、検証データにも精度が出ることが分かった。

RSMProp

出力結果

RMSPropでは精度が出ることが分かった。

Adam

出力結果

adamでもうまくいくことが分かった。

Section3 過学習

対策なし

出力結果

訓練データに対して100%の精度が出ているが、検証データでは70%ほどの精度になっており、やや過学習の傾向がみられる。

L2正則化

出力結果

正則化項が加わることによって学習用データセットに対しては100%正解できなくなっている。検証用データセットにはあまり改善の効果が見られなかった。

L1正則化

正則化項が加わったことによって学習用データセットに対して100%取れていない。

ドロップアウト

学習が緩やかなため未完了ではあるが、順調に上がっている。

上記二つの場合と比べて上がり方が緩やかになっているのはドロップアウトによってニューラルネットワークの中でデータ量が増えたような状態になっているから。
学習用、検証用データセットが増えたためその分最適化が難しくなり、精度の上昇が遅くなっている。

ドロップアウト+L1

ドロップアウトとL1正則化を組み合わせることで精度向上と1000回までの学習で完了している。

Section4 畳み込みニューラルネットワークの概念

クラスや関数の準備

画像データを高速に処理するための関数。

処理の確認

畳み込み演算を高速に行うための変換。
フィルターでと掛け合わせるデータを横一列に並べ直すと高速に演算できる。
この例では3×3のフィルターを想定。
出力colの第一行目がinput dataの一つ目の行列の左上3×3のデータと同じ。

col2img関数、畳み込みクラス、プーリングクラス、sinple convolution networkクラスの実行

 

画像識別(MNIST)

画像識別をおこなう。
使用するデータセットはMNIST

正答率が訓練データ99%、検証データで95%になり良好な結果が得られた。

処理が完了するまでに10分ほどかかった。

 

Section5 最新のCNN(AlexNet)

該当するソースコードはないため、割愛。

コメント

タイトルとURLをコピーしました