【ラビットチャレンジ】深層学習day2レポート

◆Section1:勾配消失問題

【要点のまとめ】
誤差逆伝播法が下位層に進んで勾配がどんどん緩やかになっていくと、更新で下位層のパラメータはほとんど変わらず、訓練は最適値に収束しなくなる。

【確認テストなど自身の考察】
重みの初期値に0を設定すると、どのような問題が発生するか。

初期値を0に設定すると、更新しても重みが均一のままになってしまい学習が進まない。

【参考図書・関連情報】

○Xavierの初期値について
重みの初期値は精度に大きな影響がある。
SGDでは初期値の位置により最小値にたどり着くことができない場合がある。このような問題をカバーするために提案された手法である。
https://qiita.com/Becon147/items/a9971041bca5c10483bc

【実装演習】
シグモイド関数にXavierを使用


◆Section2:学習率最適化手

【要点のまとめ】

○学習率最適化手法
Momentum(モメンタム)
AdaGrad
Adadelta
Adam

○Momentum(モメンタム)
誤差をパラメータで微分したものと学習率の積を減算した後、
現在の重みに前回の重みを減算した値と慣性の積を加算
・大域的最適解
・最適値到達までの時間が早い

<コード>self.v[key] = self.momentum* self.v[key] -self.learning_rate* grad[key]

○AdaGrad
誤差をパラメータで微分したものと再定義した学習率の積を減算
学習率が徐々に小さくなるので、鞍点問題※を引き起こす事があった

○Adam
モメンタムの「過去の勾配の指数関数的減衰平均」
RMSPropの「過去の勾配の2乗の指数関数的減衰平均」
をそれぞれ取り入れた最適化アルゴリズム




【確認テストなど自身の考察】
モメンタム・AdaGrad・RMSPropの特徴をそれぞれ簡潔に説明せよ。

モメンタム:勾配降下法と比較して緩やかな変動
AdaGrad:過去の勾配の結果を全て保持しており、最新の勾配が大きく異なっていたら学習率高めにするなど調整を行う
RMSProp:過去の勾配と最新の勾配を元に各パラメータごとに学習率を調整する

【参考図書・関連情報】
○鞍点(あんてん)
ある方向で見れば極大値だが別の方向で見れば極小値となる点。
ある次元の勾配が上がる一方、別の勾配が下がる点。

【実装演習】
モメンタム


ボールが転がっていくような緩やかな変動がイメージできる
ーーーー
update = eta * df(x0_mom, y0_mom) + alpha * pre_update
x0_mom, y0_mom = np.array([x0_mom, y0_mom]) - update
pre_update = update
x_mom.append(x0_mom)
y_mom.append(y0_mom)




◆Section3:過学習

【要点のまとめ】

○過学習
テスト誤差と訓練誤差とで学習曲線が乖離
特定の訓練サンプルに対して、特化して学習する
(カスタマイズされすぎた接客)
パラメータの数の多さ・不適合により発生。

○正則化
ネットワークの自由度(層数、ノード数、パラメータの値など)を制約すること
(シンプルにすること)

○Weight decay(荷重減衰)
重みが大きい値は、学習において重要な値であるが、
重みが大きいと過学習が起こるため、重みをコントロールしつつ重みの大き
さにばらつきを出す必要がある。
(なんだか難しそう)

○ドロップアウト
ランダムにノードを削除して学習させること
これにより過学習を抑制する

【確認テストなど自身の考察】
○リッジ回帰
重みの二乗の合計
○ロッソ回帰
重みの合計

【参考図書・関連情報】
○Elastic Net
リッジ回帰とロッソ回帰の折衷案的な手法
「ロッソ回帰のモデルに取り込める説明変数の数に制限がある」という問題点をカバーできる

【実装演習】
○L2正規化
計算式行う方法とnumpyを使用する方法(当然結果は同じ)


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

【要点のまとめ】

○畳み込み層

入力値

フィルター

出力値

バイアス 

活性化関数

出力値

次元の空間情報も学習できる層
画像の場合、縦、横、チャンネルの3次元のデータをそのまま学習し、
次に伝えることができる。

○ストライド
ストライド2の場合、2セル開けルコと

○プーリング層
対象領域のMax値or平均値を取得

【確認テストなど自身の考察】
サイズ6×6の入力画像を、サイズ2×2のフィルタで畳み込んだ時の出力画像のサイズを答えよ。なおストライドとパディングは1とする。

【参考図書・関連情報】
○プーリング
特徴を指定された方法で整理していく手法
画像だけでなく音声データも対応できる


【実装演習】

○画像をプーリング処理する場合


参考



◆Section5:最新のCNN

【要点のまとめ】
○CNN
Convolutional Neural Networkの略
一般的な順伝播型のニューラルネットワークとは違い、
全結合層だけでなく畳み込み層(Convolution Layer)とプーリング層から構成されるニューラルネットワーク

○AlexNet
過学習を防ぐ施策として、サイズ4096の全結合層の出力にドロップアウトを使用
モデル層/5層の畳み込み層・プーリング層/3層の結合層から構成されている。


【参考図書・関連情報】
○CNN
Facebookのタグ付けの顔検出、Googleの写真検索や音声認識に使用されている。郵便番号の手書き文字認識のために研究された経緯から、画像認識に使われる事が多いが、感情分析やテキスト分類、翻訳などにも応用されるようになってきている。

↓参考サイト

【確認テストなど自身の考察】
○AlexNet
2012に年に登場し革命を起こした
大規模画像クラス識別向けのニューラルネットワークとのことだが、
テキストデータより画像データのほうが保有するコストが高いと言えるので、畳み込み処理が活躍しているのだろうなと推察した。

↓参考サイト

https://cvml-expertguide.net/terms/dl/cnn-backbone/alexnet/

【実装演習】
課題がないので参考サイトでコードを確認

活性化関数ReLUを特徴マップに適用
ーーーーーーーー
f_map1 = torch.nn.functional.relu(f_map1)
print(f_map1)
ーーーーーーーー

プーリング処理
ーーーーーーーー
pooled1 = pool(f_map1)
print(pooled1)
ーーーーーーーー


↓参考サイト
https://atmarkit.itmedia.co.jp/ait/articles/2006/05/news018.html

この記事が気に入ったらサポートをしてみませんか?