学習方法
学習頻度に関する基本用語
- エポック数(epochs)
- 1つの訓練データを繰り返して学習させる回数
- 少ないと学習が不十分に
- 多すぎると過学習に
- バッチサイズ(batch_size)
- ミニバッチ(ランダムに抽出した訓練データ)のサンプルサイズ
- 2^nにすることが多い
- 小さくすると
- メモリ使用量が減る(計算量は増える)
- 個々のデータに対するパラメータの変化が大きくなるので,一部の異常データによる影響も受けやすくなる
- 大きくすると
- 並列計算を利用しやすくなる
- データの平均的性質が反映されるが,局所解にはまると学習が進まなくなりやすい。
- 訓練データセットに似たサンプルが多く存在するときには,無駄に学習を多く行うことになる
学習方法
多層パーセプトロンの学習を議論する時,活性化関数の閾値は,常に1の大きさの入力信号に対する閾値で置き換えることで,結合荷重のみを学習パラメータとして議論することができる。
学習(訓練)においては,誤差関数$E(\boldsymbol{w})$を最小化するようにパラメータ($\boldsymbol{w}$)を更新する。
勾配降下法を用いると次式のようになる。
例えば,平均二乗誤差を用いる場合は$\displaystyle E(\boldsymbol{w})=\frac{1}{2}\sum_{n=1}^N ||\boldsymbol{d}_n-\boldsymbol{y}_n||^2$であり,右辺の$\boldsymbol{y}_n$は陽に$\boldsymbol{w}$を使って書き直せるので, 各素子の入出力を規定する関数$y=\boldsymbol{f}(\boldsymbol{x};\boldsymbol{w})$が微分可能な関数(sigmoid関数など)であれば,解析的に$\boldsymbol{w}$に対する微分計算が可能。各入力値に対する$\nabla E$を計算することでパラメータ更新をできる。
訓練データに対してパラメータ更新をどの程度の頻度で行うかによって,以下のように分類される。
- バッチ勾配降下法
- 目的関数(コスト関数)の勾配を全サンプルに対して計算し,その総和を使ってパラメータ更新を行う
- 「学習の回数=エポック数」になる
- 処理速度が遅い
- オンライン更新はできない
- 局所解にはまると抜けられない
- 確率的勾配降下法(Stochastic Gradient Descent, SGD)
- 目的関数(コスト関数)の勾配をサンプル毎に計算し,それを使ってパラメータ更新を行う
- バッチ勾配降下法より学習速度は大抵速い
- 目的関数の値は学習に伴って頻繁に変動する(短期的には悪くなることも)
- 局所解に陥っても抜け出せる場合がある
- 最適解への完全な収束は難しい
- ミニバッチ勾配降下法
確率的勾配法の修正版
最急降下法には,学習率の調整を加えた様々な修正版がある。以下は例。
- AdaGrad:
- 勾配のニ乗量を使って,学習率を徐々に減衰させる
- 局所解に陥るのを防ぐ効果を期待できるが,一方で時間とともに学習が停滞する
- RMSprop:
- 勾配のニ乗の指数移動平均を使い,勾配の減衰に伴う学習の停滞を防ぐ
- AdaProp:
- Adam:
- AdaGrad, RMSprop, AdaPropの変形版
Kerasで使える学習方法
学習テクニック
- ドロップアウト(Dropout)
- 設定した確率で選択した結合荷重は,更新をしない
- 過学習を防ぐ効果あり
参考URL