深層学習DAY2
◆復習
〇NNの仕組み
入力層から入ってきた情報を中間層で処理して、出力層から出力。
誤差関数で回答との差を算出する。その差を使って微分することで最適化する。
◆学習の流れ
〇中間層の増やし方
中間層が増えれば増えるほど、複雑な情報を処理できるようになるが、勾配消失問題が発生する。
◆中間層の増やし方
☆確認テスト(連鎖律の原理を使い、dz/dxを求めよ)
z=t2, t=x+y
2t=2(x+y)=2x+2y
◆誤差逆伝播法の問題
〇勾配消失問題
勾配降下法に関して、勾配がだんだん緩やかになってしまい、下位層のパラメーターはほとんど変わらずになること。
〇シグモイド関数の特徴
値自体は0~1だが、微分した時の最高値が0.25なので、中間層が増えて掛け算の回数が増えれば増えるほど、値がゼロに近づき、勾配消失問題が発生する。
☆確認テスト(シグモイド関数を微分した時の最大値の値は)
0.25
◆勾配消失問題を発生させないための工夫
〇3つある
活性化関数の選択
重みの初期値設定
バッチ正規化
〇ReLU関数(①活性化関数の選択)
マイナスの場合には0、0より大きければY=X つまり微分したら1でそのままの値を伝播することになる。
勾配消失問題としては、1をかけるので発生しない。0の場合には、その部分の重みは関係ないものとされて、必要な1の場所のみの値が使われる=モデルがスパース化される(効果的な部分のみを使うモデルとなる)
〇Xavier(②―1 重みの初期値設定)
重みは何かしらのルールに則って設定される(多くは乱数に則る)
そのルールがザビエル(Xavier)
標準正規分布に合わせて重みの値を補正する方法が良くとられていた。平均が0で分散が1の正規分布(中心が0で一番大きいもの)
self.params['W1'] = np.random.randn(input_size, hidden_size) / nq.sqrt(input_layer_size)
self.params['W2']=np.random.randn(hidden_size,output_size) / nq.sqrt(hidden_layer_size)
前のノード数のルートで割るのがポイント
〇He(②―2 重みの初期値設定)
ルート2/nで活性化関数を割る
ReLU関数を用いたときの活性化関数はほぼすべてが0になって使えない
重みの要素を、前の層のノード数の平方根で除算した値に対し、√2を掛け合わせた値
self.params['W1'] = np.random.randn(input_size, hidden_size) / nq.sqrt(input_layer_size)*np.sqrt(2)
self.params['W2'] = np.random.randn(hidden_size, output_size) / nq.sqrt(hidden_layer_size)*np.sqrt(2)
☆確認テスト(重みの初期値に0を設定するとどのような問題が発生するか)
重みに個性がなくなる、重みの更新量が全て同じになってしまって機能しない。
〇バッチ正規化(③バッチの正規化)
ミニバッチ単位で、入力値のデータの方よりを抑制する手法
学習用データを小分けにしたものをミニバッチと呼ぶ。
GPUなら1ミニバッチあたり1~64枚の画像の処理が可能
TPUなら1ミニバッチあたり1~256枚の画像の処理が可能
ミニバッチ単位で入力値の偏りを抑制する手法をミニバッチ正規化という。
活性化関数に値を渡す前後に、バッチ正規化の処理を孕んだ層を加える
過学習が抑えられる。
〇演習問題
各手法を用いたときの学習の進捗を、プログラムを行いながら実装
バッチ正規化の場合が最もスムースに学習しているのが見て取れる
☆確認テスト
(バッチアルゴリズムとミニバッチアルゴリズムについての虫食い問題)
解答:①
◆学習率の最適化手法
モメンタム
AdaGrad
RMSProp
Adam
◆モメンタム
誤差をパラメータで微分したものと、学習率の積を減算した後、現在の重みに前回の重みを減算した値と慣性の積を加算する
Vt=μVt−1−ϵ∇EVt=μVt−1−ϵ∇E
self.v[key] = self.momentum* self.v[key] -self.learning_rate* grad[key]
局所的最適解にはならず、大域的最適解となる
谷間についてから最も低い位置にいくまでの時間が早い
「慣性」を用いる点がポイント。μで表現。適当な値を置いてあげる
大域的最適解⇔局所最適解
◆AdaGrad
誤差をパラメータで微分したものと再定義した学習率の積を減算する。
〇AdaGradのメリット
勾配の緩やかな斜面に対して、最適値に近づける。
〇AdaGradのデメリット
学習率が徐々に小さくなるので、鞍点問題を引き起こす事がある。
◆RMSProp
誤差をパラメータで微分したものと再定義した学習率の積を減算する。
〇RMSPropのメリット
局所的最適解にはならず、大域的最適解となる。
ハイパーパラメータの調整が必要な場合が少ない。
〇Adam
モメンタムの、過去の勾配の指数関数的減衰平均のこと。
RMSPropの、過去の勾配の2乗の指数関数的減衰平均のこと。
〇Adamのメリット
モメンタムおよびRMSPropのメリットを孕んだアルゴリズムである。
実装演習 Section2
下部に記載。
〇おまけ その他の最適化手法
AdamW
Adabound
RAdam
Section3 過学習
過学習
テスト誤差と訓練誤差とで学習曲線が乖離すること。
◆正則化
ネットワークの自由度(層数、ノード数、パラメータの値等)を制約すること。
正則化手法を利用して過学習を抑制する。
Weight decay(荷重減衰)
重みが大きい値をとることで、過学習が発生することがある。
誤差に対して、正則化項を加算することで、重みを抑制する。
〇L1正則化(Lasso正則化)
正則化項(罰則項)として「L1ノルム」を採用した正則化のこと。
〇L2正則化(Ridge正則化)
正則化項(罰則項)として「L2ノルム」を採用した正則化のこと。
〇ドロップアウト
ランダムにノードを削除して学習させること。
〇実装演習 Section3
下部に記載。
〇おまけ スパース正則化
ユニットの活性の割合をコントロールする正則化手法のこと。
ハイパーパラメータとして、スパース正則化をどれくらい重要視するかを決める係数と活性の割合を設定する。
◆畳み込みニューラルネットワークの概念
〇畳み込み層
3次元の空間情報も学習できるような層が畳み込み層のこと。
単純型細胞をモデルに考えられたもののこと。
〇パディング
入力画像のピクセルの周りにピクセルを囲むテクニックのこと。
画像のサイズが変わらないようにする手法のこと。
端の特徴量もしっかり捉えることができる。
〇ストライド
フィルタが画像を移動する間隔のこと。
〇チャンネル
各フィルタに対応する畳み込み層内のニューロンセットのこと。
〇全結合層
各プーリング層からの出力を通常のニューラルネットワークにつなぐ層のこと。
〇全結合で画像を学習した際の課題
RGBの各チャンネル間の関連性が、学習に反映されないこと。
〇プーリング層
複雑型細胞をモデル化したもののこと。
入力画像におけるフィルタ形状の位置ずれを吸収するように機能する。
実装演習 Section4
下部に記載。
◆おまけ 全結合層
畳み込みフィルタ層とプーリング層を通して特徴部分が取り出された画像データを一つのノードに結合し、活性化関数によって変換された値を出力する層のこと。
◆最新のCNN
〇AlexNet
5層の畳み込み層およびプーリング層など、それに続く3層の全結合層から構成されるモデルのこと。
サイズ4096の全結合層の出力にドロップアウトを使用している。
ヒルトン教授らのチームによって発表された物体認識のためのモデルのこと。
物体認識のために、初めて深層学習の概念および畳み込みニューラルネットワークの概念を取り入れたアーキテクチャである。
〇AlexNetの特徴
〇活性化関数ReLU
Max Pooling
GPUの活用
Data Augmentation(データ拡張)
Dropout
◆実装演習 Section5
下部に記載。
〇おまけ その他のCNN
ZFNet(2013年)
GoogLeNet(2014年)
VGGNet(2014年)
ResNet(2015年)
SENet(2017年)