Up 強化学習 (Reinforcement Learning, RL) 作成: 2026-02-28
更新: 2026-03-01


    ○ 報酬
    コントローラが,アーキテクチャ (ネットワーク構造)を提案する。
    ユーザが,そのアーキテクチャを実際に訓練して,性能(例えば精度)を測定する。
    そしてそれを「報酬」として,コントローラに返す。

    報酬は,つぎのように定めた:
      報酬 = 精度 - α × モデルサイズ
      精度が高いほど報酬アップ
      モデルが大きすぎるとペナルティ (αは重み)
      例えば,検証精度が80%,α=0 だったら,
      報酬 = 0.8
    では,「0.8」を返されたコントローラは何をするのか?


    (以下は通説である。
     コントローラが実際にしていることは,不可視・不可思議。)


    ○ 行動系列(action sequence)
    コントローラは,一連の穴埋め行動を
       状態 → 行動 → 報酬
    の「行動系列」として扱う:
     ・状態 (state):テンプレートの現在の埋まり具合
     ・行動 (action):どの穴にどの値を入れるかの選択
     ・報酬 (reward):最終的に得られたモデルの性能(例:0.8)
    そして,「一連の選択の結果として報酬を得た」とみなして,全体の選択に対して「学習」を行う。


    ○ ポリシー勾配法(REINFORCE)
    「学習」の方法だが,NASでよく使われるのが,
      ポリシー勾配法:「報酬をもとにポリシーを更新する」
    これは,
      報酬を使って,選択した各アクション(穴の埋め方)に対する「良さ」を評価
      良い報酬を得たアクションの確率を上げるように,コントローラのパラメータを更新

    コントローラは「どの穴が良かったか」は直接わからないが,全体として良かった選択の傾向を学習していく。

    たとえば,何度も「conv → conv → pool → fc → fc」みたいな構成で高い報酬が得られたら,コントローラは「convを最初に選ぶと良いかも」と学習していく。

    ○ 処理の概要:
    1. コントローラがアーキテクチャ A を設計(穴を埋める)
    2. A を訓練・評価 → 報酬 R = 0.8 を得る
    3. コントローラは,A を生成した確率 log P(A) を計算
    4. 勾配を計算:
         ∇J(θ) = R⋅∇log ⁡P(A;θ)

    θは,コントローラのパラメータ。
    θ を更新して,次回はより良いアーキテクチャを出せるようにする


    ○ 確率分布(policy)
    コントローラは,各穴に対して「どの値を選ぶか」の確率分布を持っている。

      例えば:
      第1層の layer_type に対して: P(conv) = 0.6, P(pool) = 0.3, P(fc) = 0.1 第1層の kernel_size に対して: P(3) = 0.5, P(5) = 0.3, P(7) = 0.2
    報酬は一連の選択全体に対して与えられる。
    コントローラは,この報酬をもとに,確率分布を少しずつ調整していく。

      例えば,コントローラが次のような確率を持っているとする:  P(layer_type) = [conv: 0.6, pool: 0.3, fc: 0.1] この確率に従って,サンプリング(くじ引き)で選択する。
      そして,報酬が高かったら:
        conv を選んだ確率を もっと高くする(強化)
        他の選択肢の確率を 少し下げる

    これを何千回,何万回と繰り返すことで,
    「良いアーキテクチャを生みやすい確率分布」に近づいていく。

    これが,「学習」の意味。
    そして,良いアーキテクチャを生み出すための選択確率の分布が,コントローラの「能力」。


    ○ 「組み合わせの数が膨大」問題を免れる
    「組み合わせの数が膨大」でも選択が出来ているのは,コントローラは「前の選択」を踏まえて「次の穴の値」を選ぶようになっているから。