Up モデルの評価 作成: 2026-03-02
更新: 2026-03-02


    コントローラは,
      設計を試し,その結果を設計にフィードバック
    の形で,設計能力を向上させていく存在である。
    そして,そのフィードバックは,
      「良い設計をしたら,報酬を与える」


    設計の評価・報酬は,つぎのプロセスになる:

       検証データ
         |
      [ 評価関数 ]
         ↓
        性能指標
         |
      [ 報酬関数 ]
         ↓
         報酬


    検証データ作成・評価関数・報酬関数は,PyTorch や TensorFlow (機械学習・深層学習のフレームワーク) のコードとして,標準で提供されている。


    検証データ
    モデルがどれくらい汎化できているか(未知のデータに強いか)を測る。
    標準的に使われるもので,訓練とは別に用意される。

    備考 :
    機械学習や深層学習の世界では,データを以下のように3つに分けるのが基本:
データの種類 目的 使うタイミング
訓練データ
(training set)
モデルの学習 学習中
検証データ
(validation set)
モデルの性能の
途中チェック
学習の合間
テストデータ
(test set)
モデルの性能の
最終的チェック
学習後


    評価
    評価は,基準がタスクの目的に応じて変わる。
    例えば:
    1. 画像分類タスクなら
    • 正解率(Accuracy):テスト画像に対して,正しく分類できた割合。
    • 損失関数の値(Loss):予測と正解のズレの大きさ。
    2. 自然言語処理タスクなら
    • BLEUスコア(翻訳の正確さ)
    • F1スコア(精度と再現率のバランス)
    3. モデルの効率性も加味する場合
    • パラメータ数(モデルの大きさ)
    • 推論時間(どれだけ速く答えを出せるか)
    • 消費メモリやエネルギー (リソース効率)


    評価関数
    検証データで得た性能を数値化する。

    PyTorch の例 def evaluate(model, dataloader, criterion, device): model.eval() total_loss = 0 correct = 0 total = 0 with torch.no_grad(): for inputs, labels in dataloader: inputs, labels = inputs.to(device), labels.to(device) outputs = model(inputs) loss = criterion(outputs, labels) total_loss += loss.item() preds = outputs.argmax(dim=1) correct += (preds == labels).sum().item() total += labels.size(0) accuracy = correct / total avg_loss = total_loss / len(dataloader) return accuracy, avg_loss この関数を使えば,検証データ (dataloader) から,精度 (accuracy) や損失 (loss) を一発で計算できる。


    報酬
    考え方:
      報酬 = 精度 - α × モデルサイズ
      精度が高いほど報酬アップ
      モデルが大きすぎるとペナルティ (αは重み)
    こうすることで,「高性能だけど軽いモデル」を好むようにコントローラを導ける。

    例えば,検証精度が80%,α=0 だったら,報酬 = 0.8 にする,といったぐあい。

    報酬関数(reward function)
    検証データで得られた性能指標をもとに,数値 (報酬) を出す。

    基本的な形が提供されていて,例えばつぎのようなシンプルな報酬関数がよく使われる: python def reward_function(validation_accuracy): return validation_accuracy
    目的によってはカスタマイズすることも多い。

    他には,つぎのような報酬関数もある:
    1. 精度とモデルサイズのバランスをとる: def reward_function(acc, model_size): # モデルが大きいとペナルティ return acc - 0.01 * model_size 2. 推論速度も考慮する: def reward_function(acc, latency): # 遅いモデルは報酬が下がる return acc - 0.05 * latency