G検定を受ける前に、公式テキストを読んでメモした走り書きがあったので公開するよ。
#1.tanh関数
ディープニューラルネットワークの問題点
層が深くなると誤差逆伝播法が使えない
→勾配消失問題
勾配消失問題の理由
→シグモイド関数の微分(最大値)
重要な点
出力層では、シグモイド関数やソフトマックス関数を用いないと、出力を確立で表現できいので、これらの関数を変更することはできない。
しかし
隠れ層では違う
隠れ層では、任意の実数を(非線形に)変換することができる関数であれば、特にどんな関数であろうと問題はない。
そこで、活性化関数を工夫した
###1.tanh関数(ハイパボリックタンジェント関数)
シグモイド関数の最大値は0.25だが、tanh関数の最大値は1となる。
###2.ReLU関数
tanh関数の代わりに、現在最もよく使われている
ReLU(Recitified Linear Unit)関数
y=max(0,x)
xが0より大きい限り1となるため、ピーク時のみ1となるtanh関数よりも
誤差逆伝播の際に勾配が小さくなりにくい(勾配消失しにくい)
xが0以下の時は、微分値も0になるので学習がうまく行かない場合もある。
派生形
###3.LeakyReLU関数
xが0以下でも小さな傾きがある。
###4.ParametricReLU
LeakyReLU関数の傾きを学習によって最適化する
###5.Randomized ReLU
複数の傾きをランダムに試す
どれが一番いいかは一概には言えない
#6-2 学習率の最適化
###1.勾配降下法
機械学習の手法が目指している物
「モデルの予測値と、実際の値の誤差を無くすこと」
誤差を誤差関数と定義して、これを最小化する、という問題
関数の最小化問題
関数の最小化とは微分
それぞれの層の重みで誤差関数を微分した値がzeroになるような重みを求めれば良いこここでは、偏微分となる。
問題点
ニューラルネットワークで解こうとする問題h、次元が多次元に渡るので、最適なパラメータが簡単には求まらない
そこで、解析的に求めるのではなく、アルゴリズムを用いて最適解を探索するアプローチをとる
ここで用いられる手法のことを 勾配降下法 と言う
勾配降下法
勾配に沿って降りていくことで界を探索する 手法
勾配とは微分値
微分は接線の傾きを意味する
x^(k+1)=x^(k)ーαf’(x^(k))(α>0)
エポック k、これまで何回繰り返し計算を行ったかをしめす
α 学習率と呼ばれるハイパーパラメータ
勾配に沿って一度にどれだけおりて行くかをきめるもの
ニューラルネットワークでは、各パラメータ(重み)にたいして勾配降下法を適用する
勾配降下法を用いて繰り返し計算を行うこと
###2.勾配降下法の問題と改善
勾配降下法では、最適な解が得られないケースが多々ある
勾配降下法は「見せかけの最適解」であるかどうかを見抜く事ができません。
見せかけの解を 局所最適解
本当の解を 大域最適解
局所最適解を防ぐ方法
・学習率の値を大きく設定 する
問題点 学習率が大きすぎて、最適解を飛び越えて探索し続けてしまう
→適切なタイ民腕学習率の値を小さくしていく
よりやっかいな問題点
鞍点 あんてん
ある次元から見れば極小、別の次元から見れば極大となる
一度鞍点付近に陥ると抜け出せなくなる。
こうした停留状態にあることを プラトー と呼ぶ
回避策
どの方向に沿って勾配を進んでいるとき学習率を大きく(あるいは小さく)すべきか考える
1990年 モーメンタムという手法
最適化の進行方向に学習を加速させることで学習の停滞を防ぐ
Adagrad
Adadelta
RMSprop
Adam
それぞれ、土台はモーメンタムと同じどの方向に学習を加速すればよいかと考えた物。
新しい手法
RMSprop
Adam
が用いられるケースがほとん
#6-3 さらなるテクニック
###1.ドロップアウト
機械学習の最大の敵 「オーバーフィッティング」
###1.ドロップアウト
ランダムにニューロンをドロップアウトさせる
エポックごとにニューロンを除外する
単一のネットワークで学習するとオーバーフィッティングになりやすい
→毎回ことなるネットワークで複数学習する事でリスクの回避
ドロップアウトはアンサンブル学習を行っている
###2.early stopping
学習を早めに打ち切る
テストデータに対する誤差関数の値が上がり始めたら、その時点で学習をやめる
とても効果的な手法で、ジェフリーヒントンもearlystoppingの事を、※Beautiful FREE LUNCH と表現している
※ノーフリーランチ定理にかけた表現
ノーフリーランチ定理とは、「あらゆる問題で性能の良い汎用最適解化戦略は理論上不可能」というもの
ヒントン先生も上手い事言ってやったぜ的な感じだったんだろうな~
###3.データの正規化・重みの初期化
データ全体を調整する処理・・・正規化
事前にデータのスケールを調整した方が効率よく学習が行える。
入力データの正規化の種類
・各特徴量を0~1の範囲に変換する処理
それぞれの特徴量をおなz特徴量の最大値で割る
これにより、各特徴量間のスケールの違いを合わせることができる
→画像データの処理に使うことが多い
###標準化
各特徴量の平均を0、分散を1にする、
すなわち各特徴量を標準正規分布に従うように変換する
###白色化
各特徴量を無相関化したうえで、標準化するという手法
効果的だが、計算コストが高いので、標準化を用いるのが一般的
###正規化
・・・偏りのあるデータの偏りを無くすための前処理
###標準化
・・・データを標準正規分布に従うように変換する
###白色化
・・・正規化の一種で、データの相関を無くす処理
相関を無くしたら標準化して正規分布にする
データの標準化は機械学習全般に効果的
しかし、ディープニューラルネットワークの学習では、効果が薄くなる
・解決策
「重みの初期値を工夫する」
勾配降下法に用いる初期値は乱数が使われていた。
これらの乱数にネットワークの大きさに合わせた敵と運計数をかける
ことで、データの分布が崩れにくい初期値が考えられた。
シグモイド関数・・・Xavierの初期値
ReLU関数・・・Heの初期値
勾配降下法の探索は初期値に依存するので、重みの初期値の設定は重要。
###4.バッチ正規化
各層に伝わってきたデータを、その層でまた正規化してしまう。
バッチ正規化(batch normalization)
各層において活性化関数をかける前に伝播してきたデータを正規化する
バッチ正規化は非常に強力な手法
・学習が上手くいきやすくなる
・オーバーフィッティングしにくくなる