本文へスキップ
ひもとくAI

まとめ・ミニプロジェクト:ハイパーパラメータを交差検証で選ぶ

レッスン 7/7

ハイパーパラメータと、交差検証

この章では、次のような「学習の前に人間が決める設定」がたくさん出てきました。

  • 多項式の次数、正則化の強さ α\alpha
  • 学習率、ミニバッチの大きさ、周の数
  • 層の数、ニューロンの数、ドロップアウトの確率

学習で決まる重みとは別に、人間が決めるこれらの設定を ハイパーパラメータ と呼びます。この章の実験のとおり、ハイパーパラメータによって結果は大きく変わります。では、どうやって決めればよいのでしょうか。

テストデータで選んではいけない

いくつかの候補を試して、テストデータの結果が一番よいものを選ぶと、テストデータに合わせて選んだことになります。その結果は、もう「新しいデータでの実力」ではありません。レッスン3と同じく、選ぶのは検証データで、テストデータは最後に一度だけ使う のが決まりです。

ホールドアウト法と、k-分割交差検証

訓練データの一部を検証データとして取り分けておく方法を ホールドアウト法 と呼びます(レッスン3の早期終了で使った方法です)。簡単ですが、データが少ないと、検証データの選ばれ方によって結果がぶれます。

そこで、訓練データを kk 個の組に分け、1つの組を検証用、残りを学習用にする ことを、検証用の組を入れ替えながら kk 回繰り返し、kk 回の検証の結果を平均します。これを k-分割交差検証(クロスバリデーション)と呼びます。k=5k = 5 なら次のようになります。

組1組2組3組4組5
1回目検証学習学習学習学習
2回目学習検証学習学習学習
3回目学習学習検証学習学習
4回目学習学習学習検証学習
5回目学習学習学習学習検証

どのデータも、ちょうど1回ずつ検証に使われるので、少ないデータを無駄なく使え、結果のぶれも小さくなります。その代わり、学習を kk 回行うので、時間は kk 倍かかります。

グリッドサーチ:候補を全部試して、交差検証で選ぶ

ハイパーパラメータの候補を並べて、全部の組み合わせを交差検証で試し、検証の結果が一番よいものを選ぶ 方法を グリッドサーチ と呼びます。scikit-learnでは GridSearchCV で行えます。

実験:正則化の強さ α\alpha を、交差検証で選ぶ

y=sin⁡xy = \sin x に誤差を加えた点を、今度は40個用意し、14次式にL2正則化(Ridge)を加えて当てはめます。α\alpha の候補を6つ用意し、5-分割交差検証で比べました。テスト誤差は、当てはめにも選択にも使っていない、別の200点での値です(参考のために載せていますが、選ぶときには使いません)。

α\alpha交差検証の誤差(参考)テスト誤差
0.00010.1470.081
0.0010.1160.078
0.010.1220.078
0.10.1290.087
10.2020.148
100.2350.171

交差検証の誤差が最も小さい α=0.001\alpha = 0.001 が選ばれ、そのテスト誤差0.078は、候補の中で最も小さい値でした。テストデータを使わずに、よい α\alpha を選べたことになります。

注意:データが少なすぎると、交差検証もあてにならない

レッスン1・2の 15点 で同じことをすると、交差検証は α=0.0001\alpha = 0.0001 を選び、そのテスト誤差は0.326でした(α=0.01\alpha = 0.01 なら0.097)。15点を5つに分けると、1つの組は3点しかなく、検証の結果が大きくぶれるからです。交差検証は万能ではなく、データの量が足りているか もあわせて考える必要があります。

グリッドサーチ以外の方法

  • ランダムサーチ: 候補の組み合わせの中から、でたらめにいくつか選んで試す。ハイパーパラメータが多いと、グリッドサーチは組み合わせが爆発的に増える(候補5つが6種類なら 56=156255^6 = 15625 通り)ため、決まった回数だけ試すランダムサーチがよく使われる
  • ベイズ最適化: それまでに試した結果から、「次はこのあたりがよさそう」と予想して、次の候補を選ぶ。少ない試行回数でよい組み合わせを見つけやすい

ミニプロジェクトと、この章の振り返り

ミニプロジェクト:交差検証で正則化の強さを選び、テスト誤差を測る

次の演習では、前のスライドの実験を自分で行います。流れは次のとおりです。

  1. 訓練データ(40点)とテストデータ(200点)を用意する
  2. 特徴量 x,x2,…,x14x, x^2, \ldots, x^{14} を作り、標準化する。標準化に使う平均と標準偏差は、訓練データから求めたものを、テストデータにも使う
  3. GridSearchCV で、訓練データだけを使って α\alpha を選ぶ
  4. 選んだモデルで、テストデータの誤差を最後に一度だけ測る

2の注意は大切です。テストデータの平均で標準化すると、テストデータの情報(平均)を、モデルを作る段階で使ってしまうことになります。このように、本来使ってはいけない情報がモデル作りに紛れ込むことを データリーク(情報のもれ)と呼びます。次の章で、詳しく学びます。

よくある誤解

  • 「テストデータで一番よかった設定を選べばよい」: テストデータに合わせて選んだ時点で、テストデータの結果は実力を表さなくなります。選ぶのは検証データ(交差検証)です
  • 「交差検証をすれば、必ずよい設定が選べる」: 15点の実験のとおり、データが少なすぎると、交差検証の結果もぶれます
  • 「ハイパーパラメータは、たくさん試すほどよい」: 候補を増やしすぎると、検証データに対して「選びすぎる」ことになり、検証の結果が実力より楽観的になることがあります

この章の振り返り

  1. 過学習と過少適合: 訓練誤差とテスト誤差の差で見分ける。バイアスとバリアンスのトレードオフ
  2. 正則化: L2(Ridge、weight decay)は係数を全体に小さく、L1(Lasso)は多くの係数を0にする
  3. 早期終了とドロップアウト: 検証データの損失を見て止める。学習中にニューロンをランダムに休ませる
  4. 最適化の手法: ミニバッチとSGD、勢いを使うモメンタム、重みごとに進む幅を変えるAdam
  5. 勾配消失と初期化: シグモイド関数の傾きは最大0.25。ReLUとHe法で勾配が届く
  6. Batch Normalization: 各層でミニバッチごとに値をそろえ、深いネットワークを学習できるようにする
  7. ハイパーパラメータの選び方: 訓練・検証・テストに分け、交差検証とグリッドサーチで選ぶ

どの方法も、実験の数値のとおり「いつでも効く」わけではありません。検証データで効果を確かめながら使う のが、この章で最も大切な考え方です。

演習

演習を読み込んでいます…