ハイパーパラメータと、交差検証
この章では、次のような「学習の前に人間が決める設定」がたくさん出てきました。
- 多項式の次数、正則化の強さ α
- 学習率、ミニバッチの大きさ、周の数
- 層の数、ニューロンの数、ドロップアウトの確率
学習で決まる重みとは別に、人間が決めるこれらの設定を ハイパーパラメータ と呼びます。この章の実験のとおり、ハイパーパラメータによって結果は大きく変わります。では、どうやって決めればよいのでしょうか。
テストデータで選んではいけない
いくつかの候補を試して、テストデータの結果が一番よいものを選ぶと、テストデータに合わせて選んだことになります。その結果は、もう「新しいデータでの実力」ではありません。レッスン3と同じく、選ぶのは検証データで、テストデータは最後に一度だけ使う のが決まりです。
ホールドアウト法と、k-分割交差検証
訓練データの一部を検証データとして取り分けておく方法を ホールドアウト法 と呼びます(レッスン3の早期終了で使った方法です)。簡単ですが、データが少ないと、検証データの選ばれ方によって結果がぶれます。
そこで、訓練データを k 個の組に分け、1つの組を検証用、残りを学習用にする ことを、検証用の組を入れ替えながら k 回繰り返し、k 回の検証の結果を平均します。これを k-分割交差検証(クロスバリデーション)と呼びます。k=5 なら次のようになります。
どのデータも、ちょうど1回ずつ検証に使われるので、少ないデータを無駄なく使え、結果のぶれも小さくなります。その代わり、学習を k 回行うので、時間は k 倍かかります。
グリッドサーチ:候補を全部試して、交差検証で選ぶ
ハイパーパラメータの候補を並べて、全部の組み合わせを交差検証で試し、検証の結果が一番よいものを選ぶ 方法を グリッドサーチ と呼びます。scikit-learnでは GridSearchCV で行えます。
実験:正則化の強さ α を、交差検証で選ぶ
y=sinx に誤差を加えた点を、今度は40個用意し、14次式にL2正則化(Ridge)を加えて当てはめます。α の候補を6つ用意し、5-分割交差検証で比べました。テスト誤差は、当てはめにも選択にも使っていない、別の200点での値です(参考のために載せていますが、選ぶときには使いません)。
交差検証の誤差が最も小さい α=0.001 が選ばれ、そのテスト誤差0.078は、候補の中で最も小さい値でした。テストデータを使わずに、よい α を選べたことになります。
注意:データが少なすぎると、交差検証もあてにならない
レッスン1・2の 15点 で同じことをすると、交差検証は α=0.0001 を選び、そのテスト誤差は0.326でした(α=0.01 なら0.097)。15点を5つに分けると、1つの組は3点しかなく、検証の結果が大きくぶれるからです。交差検証は万能ではなく、データの量が足りているか もあわせて考える必要があります。
グリッドサーチ以外の方法
- ランダムサーチ: 候補の組み合わせの中から、でたらめにいくつか選んで試す。ハイパーパラメータが多いと、グリッドサーチは組み合わせが爆発的に増える(候補5つが6種類なら 56=15625 通り)ため、決まった回数だけ試すランダムサーチがよく使われる
- ベイズ最適化: それまでに試した結果から、「次はこのあたりがよさそう」と予想して、次の候補を選ぶ。少ない試行回数でよい組み合わせを見つけやすい
ミニプロジェクトと、この章の振り返り
ミニプロジェクト:交差検証で正則化の強さを選び、テスト誤差を測る
次の演習では、前のスライドの実験を自分で行います。流れは次のとおりです。
- 訓練データ(40点)とテストデータ(200点)を用意する
- 特徴量 x,x2,…,x14 を作り、標準化する。標準化に使う平均と標準偏差は、訓練データから求めたものを、テストデータにも使う
GridSearchCV で、訓練データだけを使って α を選ぶ
- 選んだモデルで、テストデータの誤差を最後に一度だけ測る
2の注意は大切です。テストデータの平均で標準化すると、テストデータの情報(平均)を、モデルを作る段階で使ってしまうことになります。このように、本来使ってはいけない情報がモデル作りに紛れ込むことを データリーク(情報のもれ)と呼びます。次の章で、詳しく学びます。
よくある誤解
- 「テストデータで一番よかった設定を選べばよい」: テストデータに合わせて選んだ時点で、テストデータの結果は実力を表さなくなります。選ぶのは検証データ(交差検証)です
- 「交差検証をすれば、必ずよい設定が選べる」: 15点の実験のとおり、データが少なすぎると、交差検証の結果もぶれます
- 「ハイパーパラメータは、たくさん試すほどよい」: 候補を増やしすぎると、検証データに対して「選びすぎる」ことになり、検証の結果が実力より楽観的になることがあります
この章の振り返り
- 過学習と過少適合: 訓練誤差とテスト誤差の差で見分ける。バイアスとバリアンスのトレードオフ
- 正則化: L2(Ridge、weight decay)は係数を全体に小さく、L1(Lasso)は多くの係数を0にする
- 早期終了とドロップアウト: 検証データの損失を見て止める。学習中にニューロンをランダムに休ませる
- 最適化の手法: ミニバッチとSGD、勢いを使うモメンタム、重みごとに進む幅を変えるAdam
- 勾配消失と初期化: シグモイド関数の傾きは最大0.25。ReLUとHe法で勾配が届く
- Batch Normalization: 各層でミニバッチごとに値をそろえ、深いネットワークを学習できるようにする
- ハイパーパラメータの選び方: 訓練・検証・テストに分け、交差検証とグリッドサーチで選ぶ
どの方法も、実験の数値のとおり「いつでも効く」わけではありません。検証データで効果を確かめながら使う のが、この章で最も大切な考え方です。