NAS システムは,つぎのように設計されている:
テンプレートは,コードや DSL(ドメイン特化言語)で記述されていて,
コントローラは,それを読み取って,設計空間内で有効なアーキテクチャを生成する
最近の NAS の実装は,ほとんどが Python ベース。
「ユーザがコントローラを使う」は,
Python をインフラにして,
Python プロンプトで対話する
が,これの形になる。
即ち,
Python のコードとしてテンプレートを定義し,
コントローラを呼び出して,
結果を得る
という流れ。
例1
python
# テンプレートや探索空間を定義
search_space = {
"num_layers": 6,
"operations": ["conv3x3", "conv5x5", "maxpool", "skip"],
"channels": [16, 32, 64],
"activations": ["relu", "tanh"]
}
# コントローラの初期化
controller = TransformerController(search_space)
# アーキテクチャを生成
arch = controller.sample_architecture()
# 結果を表示
print("Generated architecture:", arch)
例2
python
# 擬似コードの例
template = {
"num_layers": 6,
"layer_type": ["conv", "pool", "fc"],
"kernel_size": [3, 5, 7],
"activation": ["relu", "tanh"]
}
# コントローラはこのテンプレートをもとに,
# 具体的な構成を出力
model_design = controller.generate(template)
○ ユーザがコントローラを使う手順
1. テンプレートや条件を用意する
これは,「設計のルールブック」みたいなもの。
たとえば,ユーザが「画像分類モデルを作りたい」と思ったとする。
そのとき,テンプレートにはつぎのような情報を入れる:
入力画像サイズ(例:224×224)
出力クラス数(例:1000)
使用可能な演算(Conv3x3, MaxPool, ReLU など)
モデルの最大深さやパラメータ数の制限
モバイル向けか,サーバ向けか(制約条件)
2. コントローラにテンプレートを渡す
ユーザは,テンプレートをコントローラに入力する。
コントローラはそれを読み取って,「この条件なら,こういう構造が良さそうだ」と判断し,アーキテクチャを出力する。
たとえば,出力はこんな感じ:
[Conv3x3-32, ReLU, Conv3x3-64, ReLU, MaxPool, FC-1000]
あるいは,もっと複雑な DAG(グラフ)構造になることもある。
🏗️
3. 出力されたアーキテクチャを構築する
この出力をもとに,実際のニューラルネットワークを構築する。
PyTorch や TensorFlow などのフレームワークで,コードに変換する。
python
# 擬似コード(PyTorch風)
model = nn.Sequential(
nn.Conv2d(3, 32, kernel_size=3),
nn.ReLU(),
nn.Conv2d(32, 64, kernel_size=3),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Flatten(),
nn.Linear(64 * 56 * 56, 1000)
)
ユーザがやることは:
- テンプレートを定義する(設計ルールを決める)
- コントローラに渡す(「この条件でモデル作って」と頼む)
- 出力されたアーキテクチャを使ってモデルを構築する
備考
最近では,GUI(グラフィカルなインターフェース)や Web ベースの NAS ツールも増えてきていて,Python を直接書かなくても使えるようになってきている。
たとえば:
・AutoKeras:
Keras ベースの NAS ライブラリ。簡単な関数呼び出しで使える。
・NNI (Neural Network Intelligence):
Microsoft が開発した NAS & ハイパーパラメータ最適化ツール。YAML で設定できる。
・Google AutoML:
GUI で操作できるクラウドベースの NAS サービス。
|