LoginSignup
0
0

More than 3 years have passed since last update.

深層学習2-5 Jupyter演習 (Section1:勾配消失問題について)

[2_2_1_vanishing_gradient]

【演習実施結果】

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

【考察】

・初期値ランダムで、シグモイド関数を使った場合、ノード数や学習率を変えてみても、学習が上手く進まなかった。
・初期値Heで、セオリー通りのReLU関数ではなく、シグモイド関数を使った場合、学習が上手く進まなかった。
・初期値ランダムで、RELU関数を使った場合、最初は学習が進まなかったが、繰り返し回数500回目あたりから、学習が上手く進んだ。活性化関数を変えるだけで、学習が上手く進む事があることが分かった。
・Xavierの初期値を使った場合、シグモイド関数でもRELU関数でも、学習が上手く進んだ。
・Heの初期値で、セオリー通りRELU関数を使った場合は、学習が上手く進んだ。上にも書いた通り、活性化関数をシグモイド関数にした場合は、学習が上手く進まなかった。
ただし、必ずセオリー通りに行くとは限らず、Heの初期値で、シグモイド関数を使って上手く行く場合もある。

深層学習2-8 Jupyter演習 (Section2: 学習率最適化手法について)

[2_4_optimizer]

【演習実施結果】

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

【考察】

・Momentum:モメンタムの値をゼロにした時(モメンタムなしと同じ状態)と、0.8や0.9とで比較してみると、学習が収束するまでの時間が、大きく違った(0.8や0.9を入れた時の方が収束が早い)。
・Momentumのコードをもとに、AdaGradを作成した。hの値については、数式通りで、繰り返しがゼロかゼロ以上の時とで、場合分けを行ってコーディングした。
・RSMProp:最終的には、最適値に収束するが、学習率μや、α(decay_rate)の値を少し変えるだけで、収束するまでの時間が大きく変わる事が分かった。
・バッチ正規化を行わない場合でも、最終的に学習が収束はしたが、学習は緩やかに行われた。バッチ正規化を行うと、収束までの時間が早くなった。

深層学習2-13 Jupyter演習 (Section3:過学習について)

[2_5_overfiting]

【演習実施結果】

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

【考察】

・L1,L2正則化を行う事で、何も対策をしない場合よりも、過学習が抑制される事が確認出来た。
・L1、L2正則化を行う際、weight_decay_lambdaの値が小さ過ぎると、何も処理しないのと同じ状態になり(過学習を抑制しない)、大き過ぎるとそもそも学習が進まないなど、weight_decay_lambdaの値も調整が必要である事が分かった。
・L1,L2,ドロップアウトの正則化とそれぞれのハイパーパラメータ、最適化でモメンタムAdaGrad,Adamなど、どれを使うのかなど、同じネットワークを組み立てても、色々な組み合わせが考えられるので、実際にテストしてみて、どの組み合わせと相性が良いのかを、データごとに見極める必要がある。
・L1&ドロップアウトと、正則化を2つ組み合わせて使う事もあり、実際に試してみたところ、今回のデータでは、組み合わせた事で成果があった。

深層学習2-17,19 Jupyter演習 (Section4: 畳み込みニューラルネットワークの概念)

[2_6_simple_convolution_network]

【演習実施結果】

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

【考察】

・im2col:画像処理で多用されるメソッド。主に、画像のような多次元データを2次元配列にする処理。
・im2colのtransposeをコメントアウトしたり、input_dataの画像サイズやフィルタサイズ、ストライドやパッドを変えてみて、出力を確認する事で、im2colでどのような処理がされているのかが理解出来た。
・im2colで2次元配列にする理由は、行列計算に落とし込む事で、多くのライブラリを活用出来るため。
・逆にcol2imは、im2colで2次元配列になったものを、元の画像に戻す処理になる。
・ConvolutionClass, pooling classについては、畳み込み層、プーリング層の処理が、コードを通して改めて理解が出来た。
・CNNで実際に動かしてみると、層数が少ないシンプルなCNNだが、これまで演習で行ってきたニューラルネットワークと違い、顕著に処理速度が遅くなった。これまで話としてPCのスペックや、GPUについて聞いてきたが、それらが実感として感じ取れた。
・MNISTのデータセットで試してみたところ、前回までの演習でやった通常のNNに比べて、精度が格段に向上したのが確認出来た。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0