Up HPO とは 作成: 2026-03-11
更新: 2026-03-13


    NAS は,AOS。
    アーキテクチャを設計する。
      AOS : Architecture Optimization Search
      但し,AOS は一般的な用語ではなく,研究論文で使うのは:
        NAS(Neural Architecture Search)
        Architecture Optimization
        Architecture Search
        Model Search
        など

    HPO の出番は,モデルが出来てから。
    モデルのハイパーパラメータを,さらに,最適化しようとする。
      HPO:HyperParameter Optimization
        ハイパーパラメータ最適化
        (「ブラックボックス最適化」)

    ハイパーパラメータとは,モデルのプログラム (構造・アルゴリズム) の変数で,値が入っているもの。
    HPO は,この値を最適化しようというわけ。


    「ブラックボックス最適化」 は,「匙加減」の作業を思わせる。
    そして 「匙加減」は,NN (ニュウラルネットワーク) の十八番。
    そこで,HPO は,NAS の類の NN がと思ってします。

    しかし,そうではない。
    HPO は,明示的な数学的最適化アルゴリズムを中身とする,アプリケーションである。
    CPU でも動く。

      LLM, NASコントローラは,NN
      HPO は,アプリケーション


    AutoML における位置は:
    AutoML
    ├── ニューラルネット型
    │    ├── LLM(巨大 NN)
    │    └── NAS コントローラ(小型 NN)

    └── 数理アルゴリズム型
         └── HPO(ベイズ最適化・進化戦略・バンディット)


    ニューラルネットではないので,,
      パラメータを大量に持たない
      訓練データセットを必要としない

    HPO が NAS と同じなのは,「評価」を使って,最適化を進めるところ。
    HPO は次のように動作する:
     0. ユーザが,
        「評価関数」を用意する
        ハイパーパラメータの提案を求める
     1. HPO が,
        候補のハイパーパラメータを返す
     2. ユーザが,
        そのハイパーパラメータでモデルを訓練し,
        評価値(accuracy など)を返す
     3. HPO が,
        その評価値と自己史に整合的に,
        候補のハイパーパラメータを作成する
     1〜3 を繰り返す

    シンプルな HPO は,CPU でも動くほどのもの。
    大変なのは,やはりユーザ側の作業 (訓練・評価)。
    実際,HPO 製品の Vizier (Google) は,Google の巨大計算資源が前提になっている:
       分散クラスタ
         ↓
       大量並列訓練


    「最適化」 は:
     「評価値」を観測しながら,
     「どのハイパーパラメータが良さそうか」の確率分布を更新

    HPO の内部は,次のようなアルゴリズムで動く:
      ベイズ最適化(Gaussian Process, TPE など)
      進化戦略(Evolutionary Search)
      バンディットアルゴリズム(UCB, Thompson Sampling)
      ランダム探索
    そして 「確率分布を更新」 の形が,それぞれ,
      ガウス過程の平均・分散の更新
      進化戦略の個体群の更新
      バンディットの報酬分布の更新


    このなかでは「ベイズ最適化」が直感的にわかりやすので,簡単にこれを見ていく。

    <ハイパーパラメータ値の組み合わせ>の全体を, 「探索空間」 に見立てる。
    <ハイパーパラメータ値の組み合わせ>の1つが,空間の1点。

    既に試した点を,x_1, ‥‥, x_n とする。
    また,各 x_i に対する評価を f_i とする。

    そして,
      (x_1, f_1), ‥‥ , (x_n, f_n)
    に対し,
     ガウス過程を更新:
      ・平均 μ(x) を更新
      ・分散 σ(x) を更新
    そして評価関数を最大化する点を,次に試す点 x_(n+1) にする。

    ユーザは,x_(n+1) でモデルを訓練。
    そしてモデルの評価 f_(n+1) を,HPO に返す。

    イメージは,探索空間で試行点列が収束し,
    その収束点を 「最適化」 に見る,というわけ。

    なおこの方法は,「最適化」 が最初の点に依存する可能性がある(「局所最適」)。)


    ○ HPO 全体の流れ図解) ┌───────────────────┐ │ ユーザが「評価関数」を用意する  │ │  (モデル訓練+評価)       │ └───────────────┬───┘ │ 評価値 f(x) ▼ ┌─────────────────────┐ │ HPO アルゴリズム(最適化エンジン) │ │ ・ベイズ最適化 │ │ ・進化戦略 │ │ ・バンディット │ └───────────┬────────┘ │ 次の候補 x を提案 ▼ ┌────────────────────────┐ │ ユーザがそのハイパーパラメータでモデルを訓練 │ │ → 評価値 f(x) を返す │ └───────────────────────┘ (このループを繰り返す)


    1. ベイズ最適化(Gaussian Process)の内部構造
    ベイズ最適化は,
    「評価値の確率分布を学習しながら,次の候補を選ぶ」
    というアルゴリズム。

    <ハイパーパラメータ値の組み合わせ>の全体を, 「探索空間」 に見立てる。
    空間の1点は,1つの<ハイパーパラメータ値の組み合わせ>。

    ┌────────────────────┐ │ 既に試した点の集合 D = {(x1, f1), (x2, f2), ...} │ └───────────────┬───────┘ │ ▼ ┌──────────────────┐ │ ガウス過程(GP)を更新する │ │ ・平均 μ(x) を更新 │ │ ・分散 σ(x) を更新 │ └───────────┬──────┘ │ ▼ ┌─────────────────────┐ │ 取得関数(EI, UCB など)を最大化して │ │ 次に試す点 x_next を決める │ └───────────┬────────┘ │ ▼ ┌─────────────────┐ │ x_next でモデルを訓練     │ │   → 評価値 f(x_next) を返す │ └─────────────────┘ 要点:
      明示的な数式で μ(x), σ(x) を更新している
      評価値そのものが「データ」になる


    2. 進化戦略(Evolutionary Search)の内部構造
    進化戦略は,
    「良い個体を残し,突然変異させながら探索する」
    というアルゴリズム。 ┌────────────────────────┐ │ 個体群 P = {x1, x2, ..., xN}(ハイパーパラメータ集合)│ └───────────────┬─────────┘ │ ▼ ┌───────────────────┐ │ 各個体を評価(モデル訓練) │ │ → 評価値 f(x) を得る │ └───────────┬──────┘ │ ▼ ┌────────────────────┐ │ 良い個体を選択(Selection) │ └───────────┬────────┘ │ ▼ ┌──────────────────┐ │ 突然変異・交叉(Mutation / Crossover) │ │ → 新しい個体群 P' を生成 │ └───────────┬──────┘ │ ▼ ┌──────────────────┐ │ P ← P' として次の世代へ進む │ └──────────────────┘
    3. バンディット(Bandit Algorithm)の内部構造
    バンディットは,
    「試行回数と報酬のバランスを取りながら探索する」
    というアルゴリズム。 ┌───────────────────┐ │ 各アーム(候補ハイパーパラメータ)に対して │ │ ・平均報酬 μ_i │ │ ・試行回数 n_i │ │ を保持する │ └─────────────────┬────┘ │ ▼ ┌──────────────────────┐ │ UCB / Thompson Sampling で次のアームを選択 │ └───────────┬──────────┘ │ ▼ ┌────────────────┐ │ 選んだアームでモデルを訓練   │ │  → 報酬(評価値)を得る    │ └────────────────┘ │ ▼ ┌─────────────────┐ │ μ_i, n_i を更新(明示的な数式) │ └──────────────────┘