Up パラメータ値の更新 作成: 2026-06-14
更新: 2026-06-14

4足歩行ロボット > 基礎研究型運転脳 > 訓練アルゴリズムパラメータ値更新

    訓練 (シミュレーション) は,並列環境で行う。

    パラメータ値θのもと,1回の試行で,つぎのデータが,ロボットの数だけ集まる: \[ ( s_t, a_t, r_t, s_{t+1}, done ) \]   \( done \) は終了フラグで,
       衝突や逸脱でエピソード終了 → True

    このデータのプール (「リプレイバッファ/経験プール」 ) を,D で表す。


    損失関数 \( L( \theta ) \) \[ L( \theta ) = \mathbb{E} [\ ( y - Q(s_t, a_t\ ; \theta) )^2\ ] \]
    ここで \( y \) は,
     done = True なら: \[ y = r_t \]  そうでなければ: \[ y = r_t + \gamma\ max \{ Q(s_{t+1}, a_{t+1}\ ; \theta^{-})\ |\ a_{t+1} \} \] \( \mathbb{E} \) は,Dの中で ( s_t, a_t, r_t, s_{t+1} ) を動かしたときの期待値をとることを意味する。
    γは 「割引率」 で,0.9〜0.99 くらい。
    そして \( \theta^{-} \) は,一定の間固定の古いパラメータ値で, 安定化用 (「ターゲットネット」)。


    損失関数 \( L( \theta ) の読み方
      状態 s_t に対し,行動 a_t を選んだ。
      行動 a_t の結果と合う \( Q(s_t, a_t) \) は,y である。
      NN が示す \( Q(s_t, a_t) \) を \( y \) に近づけるべし。
      即ち,\( L( \theta ) \) を小さくするように,\( Q(s_t, a_t) \) を変更すべし。

    y ≈ r_t と見る:  
     s_t に対し a_t を選んだら,よい結果に
     → r_t がプラス
     → y はプラス
     → Q(s_t, a_t ) がプラスになるように,パラメータ値更新  
       s_t に対し a_t を選んだら,わるい結果に
     → r_t がマイナス
     → y はマイナス
     → Q(s_t, a_t ) がマイナスになるように,パラメータ値更新

    しかし,t の間隔は短いので,r_t は信頼に足らない。
    そこで,クッションとして
      \( \gamma\ max \{ Q(s_{t+1}, a_{t+1}\ ; \theta^{-})\ |\ a_{t+1} \} \)
    を付ける。


    パラメータ値の更新:
     損失 \( L( \theta ) \) を小さくするように,
     パラメータ値 θ を更新する(勾配降下)

    DQN は,いま (θ) の状況を前回 (θ_old ) の状況と比較するのではない。
    いまの状況での Q値の誤差 (「今回の経験が Q値の式に合っているか」) だけを見て,更新する。
    だから,状況が毎回違っても学習できる


    最初は:
      F/R/L をほぼランダムに選ぶ
      しょっちゅう障害物にぶつかる
      行路から外れまくる
    しかし経験が溜まり,DQN が更新されていくと:
      行路からズレたときに自然に R/L を選ぶ
      障害物の左右位置を見て,適切な側に回り込む
      無駄な旋回が減り,スムーズに進む