【book review】ゼロから作るDeep Learning (Chapter 6)

今回読んでいる本

前回は誤差逆伝播法, 特にレイヤー間に受け渡されるパラメタに関する理論部分を補足した.

第六章では, 一貫して学習に関するテクニックを紹介している.

詳細は書籍を読んでもらうとし, 前々回からの復習として, 推論処理とはネットワークの(各レイヤーごとに設定されている)重みパラメタと(殆ど至る所 = a.e.-)可微分写像のペア (f, (w, b))[1]wweight, bbiasとし, fwbと入力xをパラメタとするa.e.-可微分写像.に, 入力を与えて出力を得るプロセスと言える. この前提で, n-Layered Networkを a.e.-可微分写像の列\{f_i(w_i, b_i, -)\}_{1\leq i\leq n}と見ると[2]この書籍におけるLayerの定義としては, ここで記述した写像の列の他, Loss Function, Gradient (勾配算出のアルゴリズム) … Continue reading, 列の合成とそれへの入力xの代入が推論処理に当たる. すなわち

    \[f_n(w_n, b_n, f_{n-1}(..., f_2(w_2,b_2, f_1(w_1, b_1, x)))...)\]


に相応する.
この叙述から分かるように, 学習とは(a.e.-可微分写像族のパラメタである)\{(w_i, b_i)\}_iを, ネットワークに入力を入れたときの推論精度が高くなるように調整することであった.

前置きが長くなったが書籍の内容に移ろう. 概要は次のようである:

  1. (重み更新の) 最適化手法
  2. (重みの) 初期値
  3. Batch Normalization
  4. 正則化
  5. ハイパーパラメタの最適化

1. 最適化手法について

ここで言う最適化は, 学習[3]陽に言えばLoss Functionが最小化されるようなネットワークの重みを得るためのプロセス.の最適化のこと. これまで扱ってきた初等的な重み更新手法であるSGD (Stochastic Gradient Descent) [4]Loss Functionの微分係数(実際には多次元化するのでJacobian)に学習係数を掛けたものを重みら引いていくことで (楽観的に) いずれLoss … Continue readingの問題点と, 代替手法であるAdaGrad等を紹介している.

2. 初期値について

重みの初期値が学習に与える影響について示している. ここで重みとは (各i次Layerに対し) 上述の(w_i, b_i)のことであるが, 学習を実施する前に初期値を設定しておく. この初期値が偏り過ぎていたり, 規則性が強いと学習の効率に影響することが実験的に示される.

3. Batch Normalizationについて

学習に必ず共通している基準はLoss Functionの値を小さくするかどうかだが, この基準だけでは, ネットワークから重みパラメタの偏りに注意が払われることはない. ここで言う偏りとは, 重みパラメタ(w_i, b_i)の値が特定の値に近づきすぎた結果, 該当の第i-Layerが意味をなさなくなる (広く, 特徴を表現する力が失われる) という結果の意味での偏りであって, 重みパラメタそのものの大小スケールの問題ではない. これをLayerまたはLayerの一部として組み込んで(表現力が担保されるよう)強制的に調整するアルゴリズムがBatch Normalizationである (著書にもそのような説明がなされている).

Batch Normalization Layerは, m個の入力データB=\{x_1,\ldots,x_m\}に対し, 平均\mu_B, 分散\sigma^2_Bで以下のように書かれる (\epsilondivision by zeroを回避するための微小数):

    \[y_i=\displaystyle{\gamma \frac{x_i-\mu_B}{\sqrt{\sigma^2_B+\epsilon}}+ \beta}\]


この変換によって, 次のLayerで平均0, 分散1の変数に比例した入力が得られる.

特筆すべき点として, Batch Normを導入した学習では, ほとんど全ての(重みの)初期値において精度が高くなる結果が示されていた. 初期値に依存しない性質を得るために重要とされる.

4. 正則化について

訓練データとテストデータで推論の精度に差が出る(訓練データの精度だけ高い)学習のことを過学習 (overfitting) という. 書籍では, 過学習を抑制する手法としてWeight DecayとDropoutを説明する.

過学習抑制手法概要
Weight Decay各Layerにおいて, 重みパラメタの(絶対値)増大にペナルティを与える — すなわちLoss Functionの値を重みパラメタに比例して大きくする — ことで, 学習時に重みのスケールを小さくする.
これは訓練データの特徴 (Loss Functionの微分係数に現れる) をマクロで見る事に対応し, 訓練で獲得して欲しい特徴量を必要なだけ小さく抑える働きがある.
Dropout与えられたDropout Rate (\in [0,1]) で指定された確率で重みパラメタを捨てる (0にする). G. E. Hintonらの原論文によれば, Dropout Rateは0.5が多くの場合有効で, (対象としたネットワークに対し) Generalization Performance[5]学習済みモデルの, 非テストデータに対する推論処理性能.が向上したという結果がある.

以下G. E. Hintonらの論文の引用. fully connected layer[6]次層の全ての入力変数 (activation unit) が, 現層の(重みパラメタを通じて)入力変数の関数になっているLayerのこと.は本章までにおいてはAffine Layerを想定すれば良い:

We have tried various dropout probabilities and almost all of them improve the generalization performance of the network. For fully connected layers, dropout in all hidden layers works better than dropout in only one hidden layer and more extreme probabilities tend to be worse.

Improving neural networks by preventing co-adaptation of feature detectors

また, 以下はDropout LayerのForwardの実装.
訓練時はDropout rateで乱数指定された重みパラメタを無効化 (0に) し, 推論時はDropout rate分重みパラメタをスケールダウンする:

    def forward(self, x, train_flg=True):
        if train_flg:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio
            return x * self.mask
        else:
            return x * (1.0 - self.dropout_ratio)

5. ハイパーパラメタの最適化について

ハイパーパラメタは, ネットワークに前もって与えておくパラメタのことを指す.[7]Learning Rateや, Batch Normalizationの係数, Weight Decayの係数. これには, 性能の良い — すなわち認識精度の高い — (学習済み)モデルを得るためだけでなく, 学習を効率よく行うために重みパラメタと別次元で最適なものを選びたいという要請があるとされる. 著者はハイパーパラメタの最適化において, 以下の点に注意を促している:

  • テストデータを使ってハイパーパラメタの性能を評価してはいけない.[8]テストデータは訓練済みモデルの汎化性を評価するデータで, もしテストデータをハイパーパラメタの調整 (従って学習時) に利用した場合, … Continue reading

では検証データ (validation data) をどう作るか?

専用のデータが集まら無さそうなら, 訓練データの一部 (著書では20%)を検証データとして予め分離しておくと良い.

また著者は, 非常に実践的なハイパーパラメタ探索の手順を記してくれている:

  1. ハイパーパラメタの範囲を設定
  2. 設定されたハイパーパラメタの範囲から, ランダムサンプリング.
  3. 2でサンプリングされたハイパーパラメタの値を使用し学習を行い, 検証データで認識精度を評価 (初期段階では筋の悪いハイパーパラメタの範囲を早めに切り捨てられるよう, epochは小さく設定).
  4. 2,3を繰り返し (100回等), 認識精度の結果を集計しハイパーパラメタの範囲を決定.

上記実践的手法とは別に, 理論建てが厳密な最適化手法であるベイズ最適化についても紹介しているが, 深くは触れられていない. これはPractical Bayesian Optimization of Machine Learning Algorithmsに詳細が書かれてあるので, 時間を見つけて紹介してみようと思う.

次回へ

Footnotes

Footnotes
1 wweight, bbiasとし, fwbと入力xをパラメタとするa.e.-可微分写像.
2 この書籍におけるLayerの定義としては, ここで記述した写像の列の他, Loss Function, Gradient (勾配算出のアルゴリズム) を本質的なデータとして含んでいるようである.
3 陽に言えばLoss Functionが最小化されるようなネットワークの重みを得るためのプロセス.
4 Loss Functionの微分係数(実際には多次元化するのでJacobian)に学習係数を掛けたものを重みら引いていくことで (楽観的に) いずれLoss Functionを最小化する重みに近づくとして更新する手法.
5 学習済みモデルの, 非テストデータに対する推論処理性能.
6 次層の全ての入力変数 (activation unit) が, 現層の(重みパラメタを通じて)入力変数の関数になっているLayerのこと.
7 Learning Rateや, Batch Normalizationの係数, Weight Decayの係数.
8 テストデータは訓練済みモデルの汎化性を評価するデータで, もしテストデータをハイパーパラメタの調整 (従って学習時) に利用した場合, ネットワークからすると入力として重複したデータを見る事になる (Batch Learningの作り方にも依るが, 少なくともその確率が高くなる). これにより, テストデータへの過学習が起こる可能性が高くなる.