Up パラメータ値の目的関数 作成: 2026-05-17
更新: 2026-07-04

4足歩行ロボット他律型運動脳 > 訓練パラメータ値の目的関数

    一般に,強化学習でのパラメータ値の更新は,つぎのようにする:
     1. パラメータ値の目的を,関数で定義
     2. 目的関数の値を最小化/最大化するパラメータ変更を,
        勾配法で求める

    運動脳 NN の場合,目的関数は
      「<行動の良さ>の大きさ」
    を定義するものになる。


    <行動の良さ>は,アドバンテージで定義した :
      A_t =Σ { (γλ)^k δ(t+k) | k = 0, ‥‥, n-1-t}

    というわけで,「<行動の良さ>の大きさ」 を表す目的関数は,素朴にはつぎになる:
      L = E_(τ,t) [ A_(τ,t) ]
       ( 4096 × n の A_(τ,t) の平均 )

    「素朴」と言うのは,
      更新の方向性
    が盛られていないから。

    そこで,式をつぎのように補正する:
      A_(τ,t) → Ratio_(τ,t) A_(τ,t)
      Ratio_(τ,t) = θ(a_t|s_t) / θ_old(a_t|s_t; τ)


    Ratio_(τ,t) の意味は:,
     「θが θ_old よりも a_t を択ぶかどうか」
    Ratio_(τ,t) > 1 なら,a_s の良さがこの倍だけ上がるというわけ。

    ここで,つぎを想起しよう:
      PPO は「オンポリシー」だが,
      現パラメータ値θの更新には,
      θ上の試行のデータを使うのではなく,
      θ_old 上の試行のデータを使う

    Ratio_(τ,t) の定義の中の θ(a_t|s_t) は:
      NN (パラメータ値θ) に,s_t を入力する。
      行動の確率分布が出力される。
      この確率分布から,θ(a_t|s_t) を得る。


    しかし,目的関数Lは,まだ不十分である。
    Ratio_(τ,t) の値が大きいと,勾配が荒れる。
    そこで,「クリップ」 を施す:
      Ratio_(τ,t) → clip( Ratio_(τ,t),1−ϵ,1+ϵ )

    さらに,
      clip( Ratio_(τ,t),1−ϵ,1+ϵ ) A_(τ,t)
       → min ( Ratio_(τ,t) A_(τ,t),
           clip( Ratio_(τ,t),1−ϵ,1+ϵ ) A_(τ,t) )

    こうして,目的関数の仕上がり形は,
       L^CLIP(τ, t)
      = E_(τ,t) [ min( Ratio_(τ,t) A_(τ,t),
          clip( Ratio_(τ,t),1−ϵ,1+ϵ ) A_(τ,t) ) ]