ハイパーパラメータの最適化
基本的なハイパーパラメータ調整との違い
「ハイパーパラメータ調整」には、大きく分けて2つの論点があります。
| 論点 | 内容 | 本ページの対象 |
|---|---|---|
| 何を調整するか | 学習率、隠れ層の数、ユニット数、ドロップアウトの割合、バッチサイズなど | 対象外(別ページ参照) |
| どう探すか | 複数のハイパーパラメータ候補の組み合わせを、どういう戦略で試すか | 本ページの対象 |
共通の前提
ハイパーパラメータは、学習(勾配降下法など)によって自動的には最適化されないパラメータです。そのため、複数の候補を実際に学習・検証データで評価し、最も性能が良かった組み合わせを採用するという「外側のループ」が必要になります。この外側のループの戦略が、以下の3手法です。
1. グリッドサーチ(Grid Search)
調べたいハイパーパラメータそれぞれについて、あらかじめ候補値のリストを決め、その全組み合わせを格子(グリッド)状に総当たりで試す手法です。
具体例
- 学習率の候補:
{0.1, 0.01, 0.001}(3通り) - バッチサイズの候補:
{32, 64, 128}(3通り)
この場合、$3 \times 3 = 9$ 通りすべての組み合わせで学習・評価を行います。
特徴
- 網羅的に探索するため、候補の範囲内であれば最良の組み合わせを取りこぼさない
- ハイパーパラメータの種類・候補数が増えると組み合わせ数が指数的に爆発する(組み合わせ爆発)
- 各試行が独立しているため並列化しやすい
2. ランダムサーチ(Random Search)
あらかじめ決めた範囲・分布の中から、ハイパーパラメータの組み合わせをランダムにサンプリングして試す手法です。
特徴
- グリッドサーチのような全組み合わせの総当たりをしないため、試行回数を自分で決められる(計算予算に合わせやすい)
- 実は「重要でないハイパーパラメータ」に無駄な試行回数を割かずに済むため、同じ試行回数ならグリッドサーチより良い解を見つけやすいことが知られている
- 理由:グリッドサーチは格子状に固定されているため、ある1つのパラメータの影響度が低い場合、そのパラメータの違いだけの試行を何度も繰り返すことになり非効率。ランダムサーチは毎回すべてのパラメータの値を変えるため、重要なパラメータの多様な値を自然とカバーできる
- 最良解を保証するものではなく、あくまで確率的な探索
3. ベイズ最適化(Bayesian Optimization)
過去に試した「ハイパーパラメータの組み合わせ」と「そのときの性能(検証誤差など)」の関係を確率モデル(代表的にはガウス過程)でモデル化し、次に試すべき最も有望な組み合わせを予測しながら効率的に探索する手法です。
仕組みのイメージ
- いくつかの初期点をランダムに試し、性能を観測する
- 観測結果から「ハイパーパラメータ → 性能」の関係を確率モデル(代理モデル、サロゲートモデル)で推定する
- 獲得関数(Acquisition Function)を使い、「まだ試していない有望そうな領域」を次の候補として選ぶ
- 有望さは「平均的に良さそうな場所(活用)」と「不確実性が高くまだ調べていない場所(探索)」のバランスで決まる
- その候補を実際に試し、結果を確率モデルに反映して2〜4を繰り返す
特徴
- グリッドサーチ・ランダムサーチのように闇雲に候補を試すのではなく、過去の結果を使って賢く次の候補を選ぶため、少ない試行回数で良い解に到達しやすい
- 1回の学習(1試行)のコストが高い深層学習のハイパーパラメータ探索と相性が良い
- 代理モデルの計算自体にもコストがかかり、仕組みがグリッド/ランダムサーチより複雑
まとめ:3手法の比較
| 手法 | 探索方法 | 過去の結果の活用 | 試行回数の決め方 | 強み |
|---|---|---|---|---|
| グリッドサーチ | 候補の全組み合わせを総当たり | しない | 候補数×候補数で自動的に決まる | 網羅的、実装が単純 |
| ランダムサーチ | 候補範囲からランダムサンプリング | しない | 自由に設定できる | 同じ試行回数ならグリッドサーチより効率的なことが多い |
| ベイズ最適化 | 確率モデルで次の有望な点を予測 | する | 自由に設定できる | 少ない試行回数で良い解に到達しやすい |
ハイパーパラメータとしての「隠れ層の数」「ユニット数」
ニューラルネットワークの重み・バイアスは学習(勾配降下法)によって自動的に決まりますが、「そもそも層をいくつ重ねるか」「各層に何個のニューロンを置くか」は学習では決まらず、人間があらかじめ決めて固定する必要があるハイパーパラメータです。
| ハイパーパラメータ | 意味 | 別名 |
|---|---|---|
| 隠れ層の数 | 入力層と出力層の間にある層をいくつ重ねるか(ネットワークの「深さ」) | レイヤー層数 |
| ユニット数 | 各層に配置するニューロンの数(ネットワークの「幅」) | ノード数、ニューロン数 |
隠れ層の数(深さ)を増やすと何が起きるか
- 表現力が上がり、より複雑な関数・パターンを学習できるようになる
- 一方で、以下のリスクが高まる
- 過学習(オーバーフィッティング):訓練データに対して複雑すぎるモデルになりやすい
- 勾配消失(Vanishing Gradient):層が深くなるほど、誤差逆伝播の際に勾配が小さくなっていきやすい(詳細は optimization.md 参照)
- 学習・推論にかかる計算コストの増加
ユニット数(幅)を増やすと何が起きるか
- 各層がより多くの特徴・パターンを同時に表現できるようになり、表現力が上がる
- 一方で、パラメータ数が増えるため
- 過学習しやすくなる
- 計算コスト・メモリ使用量が増える
モデルの複雑さという観点からの位置づけ
隠れ層の数・ユニット数は、いずれもモデルの複雑さ(表現力)を直接左右するハイパーパラメータという点で共通しています。誤差(バイアス・バリアンス分解) の文脈で言えば、これらを増やすことは「モデルを複雑にする」方向の操作にあたり、
という、正則化 の強さの調整($\lambda$ の増減)と似たトレードオフの関係にあります。そのため実務では、隠れ層の数・ユニット数も、学習率やバッチサイズと同様に、検証データでの性能を見ながら調整する対象 ハイパーパラメータの1つとして扱われます。探索方法としては、候補をいくつか決めて グリッドサーチ・ランダムサーチ・ベイズ最適化 などで最適な組み合わせを探すのが一般的です。