【Unity 6 × ML-Agents】Vol.3 学習実行・仕上げ編

これまでの作業で、ロボットは歩く準備が整いました。 あとは、私たちが先生となって「トレーニング」を開始するだけです。

この最終回では、以下の手順を解説します。

  1. 学習プラン(YAML)の作成: AIの学習スピードや性格を決める設定ファイル。
  2. トレーニング開始: コマンド一発で学習をスタートさせる方法。
  3. 学習の監視: 「TensorBoard」を使って、AIの成長グラフを見る方法。
  4. モデルの書き出し: 賢くなった脳みそ(.onnx)をゲームに組み込む。

これが終われば、あなたの画面の中で、オリジナルロボットが永久に歩き続けるようになります!


第12章:学習設定ファイル(YAML)を作る

AIに学習させるには、「どれくらいのペースで学ぶか?」「何回繰り返すか?」といったスケジュール表が必要です。これを設定するのが YAML(ヤムル)ファイル です。

  1. Unityプロジェクトフォルダの中に、config という新しいフォルダを作ります(Assetsフォルダの外でもOKです)。
  2. その中にテキストファイルを作り、名前を walker_config.yaml に変更します。
  3. テキストエディタ(メモ帳やVS Code)で開き、以下のコードをコピペしてください。

YAML

behaviors:
  WalkerBrain: # Vol.2で設定した「Behavior Name」と完全に一致させる!
    trainer_type: ppo
    hyperparameters:
      batch_size: 2048
      buffer_size: 20480
      learning_rate: 0.0003
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: linear
    network_settings:
      normalize: true
      hidden_units: 512
      num_layers: 3
    reward_signals:
      extrinsic:
        gamma: 0.995
        strength: 1.0
    max_steps: 1000000 # 100万ステップ(長い学習用)
    time_horizon: 1000
    summary_freq: 30000

【設定のポイント】

  • WalkerBrain: ここは必ず Vol.2 の Inspector で設定した Behavior Name と同じ名前にしてください。間違っていると学習が始まりません。
  • max_steps: 学習の長さです。最初は 500000 (50万) くらいでもOKですが、完璧な歩行を目指すなら 1000000 (100万) 以上推奨です。
  • hidden_units / num_layers: 脳の大きさです。二足歩行は難しいので、少し大きめ(512, 3層)にしています。

第13章:いよいよ学習スタート!

準備は整いました。心臓が高鳴る瞬間です。

13-1. ターミナル(コマンドプロンプト)の準備

  1. Windowsなら「コマンドプロンプト」または「PowerShell」、Macなら「ターミナル」を開きます。
  2. Pythonの仮想環境を使っている場合は、activate して有効化しておきます。
  3. cd コマンドを使って、Unityプロジェクトのフォルダまで移動します。
    • 例:cd C:\Users\User\Documents\Unity Projects\AI_Walker_Project

13-2. 学習コマンドの実行

以下のコマンドを入力し、Enterキーを押します。

Bash

mlagents-learn config/walker_config.yaml --run-id=MyWalkerTest01 --force
  • config/walker_config.yaml: さっき作ったファイルの場所。
  • --run-id=MyWalkerTest01: 今回の実験の名前(好きな名前でOK)。
  • --force: 同じ名前の実験データがあったら上書きする(初回はなくてもOK)。

13-3. Unityの再生ボタンを押す

コマンドを実行すると、数秒後に以下のようなアスキーアート(ロゴ)が表示され、最後の行にこう出ます。

[INFO] Listening on port 5004. Start training by pressing the Play button in the Unity Editor.

これが合図です。Unityエディタに戻り、再生ボタン(▶)を押してください。


第14章:感動の成長記録(モニタリング)

再生ボタンを押した瞬間、Unityが少しカクついたり、高速で動き始めたりします。 (※TimeScaleが自動的に変更され、20倍速〜100倍速でシミュレーションが行われます)

成長の3段階フェーズ

画面をぼーっと眺めていると、AIは次のように進化していきます。

  1. フェーズ1:生まれたての子鹿(0〜5万ステップ)
    • 状態: スタートした瞬間に崩れ落ちる。バタバタと痙攣する。
    • スコア: ほぼゼロかマイナス。
    • 解説: まだ何も分かっていません。「動くと倒れるから動かないほうがいいのでは?」と疑心暗鬼になっています。
  2. フェーズ2:ハイハイと膝立ち(10万〜30万ステップ)
    • 状態: 膝を曲げたまま耐えるようになる。片足を前に出そうとして転ぶ。
    • スコア: 徐々に上がり始める。
    • 解説: 「膝(Leg)の力を抜くと衝撃を吸収できるぞ!」と気づく時期です。Vol.1で設定した物理設定が正しければ、ここで急速に成長します。
  3. フェーズ3:二足歩行の覚醒(50万ステップ〜)
    • 状態: ターゲットに向かって歩き出す。最初は酔っ払いのようにフラフラですが、次第に体幹が安定してきます。
    • スコア: 右肩上がりに急上昇。
    • 解説: 感動の瞬間です。ここからは放置していても勝手に上手くなります。

グラフで確認する(TensorBoard)

数値で成長を見たい場合は、別のターミナルを開き、プロジェクトフォルダで以下のコマンドを打ちます。

Bash

tensorboard --logdir config/results

表示されたURL(http://localhost:6006)をブラウザで開くと、グラフが表示されます。 「Cumulative Reward(累積報酬)」 のグラフが右肩上がりになっていれば大成功です

ブラウザでTensorBoardを見ようとしてUnityから目を離すと、学習(Unity側の動き)も止まってしまいます。これを防ぐ設定が必須です。

【解決策】バックグラウンドでも動かす設定

学習中に他の作業ができるように、以下の設定をオンにしてください。

  1. Unityの画面上部メニューから Edit > Project Settings… を開きます。
  2. 左側のメニューで Player を選択します。
  3. 右側のタブ(地球儀やモニターのアイコン)で PC, Mac & Linux Standalone(パソコンのアイコン)が選ばれていることを確認します。
  4. Resolution and Presentation という項目を展開します。
  5. その中にある Run In Background(バックグラウンドで実行)のチェックボックスに チェックを入れます(ONにする)

学習を途中で中断し、後で続きから再開する方法はとても簡単です。 「Run ID(実験の名前)」を変えずに、--resume というオプションをつけて実行する だけです。

現在の実験名は MyWalkerTest01 で動いています。これを引き継ぐ手順を解説します。

1. 安全な止め方(中断)

学習中のターミナル(黒い画面)で、キーボードの Ctrl + C1回だけ押してください。

  • 少し待つと、「モデルを保存しました(Exported … .onnx)」というメッセージが出て、プログラムが綺麗に終了します。
  • ※いきなりウィンドウの「×」ボタンで閉じると、データが壊れる可能性があるので、なるべく Ctrl+C で止めるのがお作法です。

2. 再開の仕方(Resume)

PCを再起動したり休憩した後、続きから始めるときの手順です。

  1. 仮想環境に入る & フォルダ移動(いつもの手順)
  2. 「再開用」のコマンドを打つ 前回と同じコマンドの最後に、--resume を付け足します。DOSmlagents-learn config/walker_config.yaml --run-id=MyWalkerTest01 --resume
    • ポイント1: --run-id前回と同じ名前(画像の通りなら MyWalkerTest01)にしてください。
    • ポイント2: --force(上書き)ではなく、**--resume(再開)**を使います。
  3. Unityの再生ボタンを押す 「Listening on port 5004…」が出たら、Unityの再生ボタンを押します。

⚠️ 注意点:Force と Resume の違い

ここだけ間違えないように気をつけてください!

  • --resume (再開):
    • 「MyWalkerTest01 の続きからやってね」
    • 前回の脳みそをロードして、そこから学習を積み重ねます。
  • --force (強制上書き):
    • 「MyWalkerTest01 というフォルダが既にあっても、消して最初からやってね」
    • これを間違って使うと、数時間の努力が消滅します!

成功の確認方法

再開した後、TensorBoardを見ると、グラフの線が途切れたところからピタッと繋がって、右に伸びていけば成功です!

寝る時や出かける時は Ctrl+C で止めて、また時間がある時に --resume で育ててあげてください。

第15章:よくある失敗とリカバリー

もしグラフが上がらなかったり、変な動きになったりした場合は、以下をチェックしてください。

Q. ロボットが地面を高速で転がっていく(芋虫移動)

  • 原因: 「立って歩く」ことよりも「ターゲットに近づく」ことへの執着が強すぎました。
  • 対策: Vol.2のスクリプトで、「頭の位置が低いときは即座にゲームオーバー(罰)」という処理が正しく入っているか確認してください。厳しく躾けることが大事です。

Q. ずっと棒立ちで動かない

  • 原因: 罰を恐れすぎて「動かないのが一番安全」と学習してしまいました(局所解)。
  • 対策: Vol.1の物理設定で、初期位置を少しランダムにずらすか、ターゲットに近づいた時の報酬(AddReward)を少し増やして、「リスクを冒してでも進む価値」を教えてあげましょう。

Q. 膝がカクカクして竹馬みたい

  • 原因: Vol.1で解説した通り、「膝のSpring(バネ)」が強すぎます
  • 対策: Unityを停止し、InspectorでLegのSpring値を半分くらい(例:2000 → 1000)に下げて、学習を再開(--resumeオプションを使用)してください。

第16章:学習完了!脳みそを取り出す

満足いく動きになったら、Unityの停止ボタンを押すか、ターミナルで Ctrl + C を押して学習を終了します。

16-1. モデルファイル(.onnx)の場所

プロジェクトフォルダ内の results/MyWalkerTest01/WalkerBrain フォルダの中に、WalkerBrain.onnx というファイルが生成されています。 これが、数時間の特訓の末に完成した「学習済みの脳」です。

16-2. ゲームへの組み込み(推論モード)

  1. この .onnx ファイルをUnityのAssetsフォルダ内にドラッグ&ドロップします。
  2. Hierarchyのロボットを選択します。
  3. Behavior Parameters コンポーネントの Model という欄に、この .onnx ファイルをセットします。
  4. Behavior TypeInference Only(推論のみ)に変更します。

これでPythonはもう不要です。 再生ボタンを押せば、あなたのロボットは学習した通りに、凛々しく歩き始めるはずです!


第17章:完結!ここから広がる世界

おめでとうございます! これで「Unity ML-Agents 二足歩行プロジェクト」は完結です。

あなたが作ったのは、ただのアニメーションではありません。 物理演算に基づいているため、重いボールをぶつければよろめきますし、坂道になれば足の角度を自動で調整して登ろうとします。

次のステップへのアイデア

  • 障害物走: 壁や段差を配置して、避ける学習をさせる。
  • サッカー: ボールを蹴ってゴールに入れる学習をさせる。
  • オリジナルキャラ: 自分でモデリングしたキャラクターを歩かせる。

機械学習の面白さは、予想外の動きや成長ドラマが見られることです。