[ディープラーニング入門]⑤実装時の問題とその対策

ディープラーニングで気を付けないといけないこと。対策のその方法。

引き続き「はじめてのディープラーニング(我妻幸長[著])」を使用して学んでいきます。

1.多層化に伴う問題

層を増やすと表現力は向上する。しかし、計算量が増大する。他にも以下の代表的な問題が存在する。

(1) 局所最適解へのトラップ

以下のように単純だと問題ないが

以下のように局所最適解が存在すると、そこに落ち着いてしまい誤差調整が進まない。

(2) 過学習

訓練データに過剰に適合してしまい、テストデータや未知のデータで正解率が落ちること。(汎化能力が低い状態)

(3) 勾配消失

逆伝播の際に、層を遡るほど勾配が0になってしまい、パラメータ調整ができなくなる問題。
活性化関数にシグモイド関数を使用している場合、逆伝播で使用する勾配の最大値は0.25のため、層を遡るほどに勾配は小さくなる。
例えば、
●中間層最後のデルタは「\(δ_{j}=∂y_{j}\frac{∂y_{j}}{∂u_{j}}→∂y_{j}*0.25\)」
●最後1つ前のデルタは「\(δ_{i}=∂y_{i}\frac{∂y_{i}}{∂u_{i}}→(\sum δ_{j}w_{ij})\frac{∂y_{i}}{∂u_{i}}→(\sum(y_{j}*0.25)w_{ij})*0.25\)」
勾配消失を抑制するため、ディープラーニングでは活性化関数にReLUを使うことが多い。

(4) 学習に時間がかかる問題

重みとバイアスの数が数億になることもあり、学習に数週間かかることも少なくない。
「必要以上にネットワークを複雑にしないこと、コードから実行速度ボトルネックの除去、スペックの高いマシンを使うこと」は重要。

2.多層化に伴う問題への対策

(1) ハイパーパラメータの最適化

適切なハイパーパラメータを設定することで、問題を抑制する。
例えば、
●中間層のニューロン数を増やすと、表現力が向上する、過学習が起きやすくなる。
●中間層のニューロン数を減らすと、表現力が減少する、過学習が起きにくくなる。
※ハイパーパラメータ・・・学習前に決めておく層の数、ニューロンの数、学習係数など。学習により調整される重みとバイアスはこれに当たらない
※層の数やニューロンの数は過学習や学習時間に、学習係数は局所最適化トラップに効果があると思われる。

(2) 正則化

重みに上限を設けたり、重みを減衰させることで、重みに制限を加えること。
例えば、
●重みに上限・・・1つのニューロンの重みの二乗和が定数を超えないように調整する(\(\sum w_{i}^{2}<c\))
●重みを減衰・・・重みの更新に使用する誤差に(\(\frac{λ}{2}||W||_{2}\))を足し、重みの減少量を多くする。

「\(||W||_{2}\)」
“L2ノルム”という。
\(||W||_{2}=\sqrt{W^{2}}\)
※すべての重みを二乗した総和の平方根のこと

「減衰の補足」
重みの更新式は「\(w←w-\frac{∂E}{∂w}\)」で
L2ノルムを加えた誤差は「\(E+(\frac{λ}{2}||W||_{2})\)」なので、
L2ノルムの分、重みは小さくなる。

(3) 重みとバイアスの初期値

・重みとバイアスの初期値はランダムに→同じ値だと同じ勾配になるので表現力が失われる(多層の意味がない)
・重みの値は小さく→大きいと局所最適解トラップしやすい

(4) 早期終了

学習を途中で打ち切ること。学習のし過ぎ(過学習)を防ぐ。また誤差が停滞した場合にも時間節約の意味合いで学習を終了する。
最初に適切なエポックを決めるのが難しいため、結果を見ながら終了を決めることは多い。

(5) データ拡張

訓練データのサンプル数が少ないと過学習が起きやすいため、訓練データを水増しする。
既存のサンプルに何らかの加工を加えて新たなサンプルとする。

(6) データの前処理

入力データを学習前に処理して扱いやすくする。ネットワークの性能向上や学習高速化が見込める。
(a) 正規化・・・すべてのデータを0~1の範囲に変換する
(b) 標準化・・・平均と標準偏差を用いて、平均を0、±1σに大多数が収まるようにする。標準偏差のため±1σの外側のデータも存在する。
(c) 無相関化・・・データ同士の関係性を除去する
(d) 白色化・・・標準化と無相関化を行う

(7) ドロップアウト

出力層以外のニューロンを一定の確率で消去する方法。過学習を抑制できる。
訓練時にドロップアウトを行った場合、テスト時はドロップアウトしなかった確率を層の出力に掛けてつじつまを合わせる。
※規模の大きなネットワークは過学習を起こしやすいが、ドロップアウトにより小規模の異なるネットワークを使用していることになり、表現力を維持しつつ過学習防止となっている。

◇ドロップアウトしない場合

◇ドロップアウト率=40%

ドロップアウトを実装する際は1つの層として組み込むので、仕組みの概念とは少々イメージが異なる。