Up テンプレートの構築 作成: 2026-02-28
更新: 2026-03-03


    テンプレートは,
      「ここに畳み込み層を入れる場所があるよ」
      「ここは選択肢が複数あるよ」
    といった "穴あきの設計図"。
    これは人間が事前に用意することが多い。

    設計(パーツを組む)は,
     そのテンプレートの穴を,パーツで埋めること。
    これはコントローラの役割。
    「穴」 は変数で,「穴を埋める」 は値の設定。

    テンプレートは「設計図の下書き」,
    コントローラは「その下書きを埋めて完成させる職人」。


    テンプレートは,アーキテクチャの「枠組み」や「制約」を定めるもの。
    とえば:
     ・畳み込み層の数
     ・各層の種類(Conv, Pooling, Attention など)
     ・各層の幅の範囲 (フィルターサイズやストライド)
     ・接続のパターン(直列,並列,スキップ接続など)
     ・活性化関数の種類

    コントローラはこのテンプレート (「空の器」) を入力として受け取り,それに従って
      「どの層をどこに配置するか」
      「どのハイパーパラメータを使うか」
    などを決定する。


    NAS の「AI が AI を設計」は,
      モデルが出来上がっていく
      = コントローラが出来上がっていく

    コントローラーは,
      テンプレートの穴変数の値を調節
    という形で,テンプレートからモデルをつくる。

    そしてこれは,つぎのループを繰り返すことで実現される:
      コントローラ:
         テンプレートの穴変数に値を代入
         (「アーキテクチャの設計」)
      ユーザ:
         アーキテクチャを構築・訓練
         検証データで性能を測る(評価)
         性能を報酬としてコントローラに返す
      コントローラ:
         報酬をもとに,穴変数に代入する値を導出
         (「学習する」)


    実際の NAS システムでは,テンプレートはコードや DSL (ドメイン特化言語) で記述されている。
    即ち,テンプレートの実体は,つぎのようなコード:
      python template = { "num_layers": 6, "layer_type": ["conv", "pool", "fc"], "kernel_size": [3, 5, 7], "activation": ["relu", "tanh"] }
    このテンプレートは,
      6層のネットワーク
    で,各層に
      layer_type, kernel_size, activation
    の3つの穴がある。

    「穴」を意味は:
穴の名前 意味 選択肢(値の候補)
layer_type レイヤーの数 3〜10
num_layers 各レイヤーの種類 "conv", "pool", "fc"
kernel_size 畳み込みやプーリングの
カーネルサイズ
3, 5, 7
activation 活性化関数 "relu", "tanh"