Up r_t 値の決め方 作成: 2026-06-07
更新: 2026-06-07

4足歩行ロボット歩容生成報酬設定r_t 値の決め方

    行動 a_t には,報酬 r_t を与える。
    「報酬」 は,つぎのようなカテゴリーが設定される::
     ・前進
     ・姿勢安定
     ・エネルギー効率
     ・接地・歩容の安定性
     ・衝突・転倒ペナルティ
     ・動作の滑らかさ
     ・CoM が支持多角形の外に出たら,ペナルティ

    ただ,基本は:
      「前進」 には,プラス
      「エネルギー効率がよい」 には,プラス
      「転倒しそう」 には,マイナス
    こうすると自ずと4足動物のような前進の足運びになるだろう,と当て込むわけである。


    しかしここで疑問が。
    行動 a_t に報酬 r_t を与えるのは,1/60 秒間隔である。
    この時間間隔で,「前進」 , 「エネルギー効率がよい」, 「転倒しそう」 を判定できるのか?
    「前進」 , 「エネルギー効率がよい」, 「転倒しそう」 は,結果論ではないのか?

    r_t の計算は,この点を厳密に考えない。
    各種センサー値の変化率を使って,計算する。

    例えば,「転倒しそう」 は,つぎの値を見る:
      ロール角(横倒れ方向)
      ピッチ角(前後倒れ方向)
      角速度(回転の勢い)
      接地脚の数
      重心位置(CoM)の支持多角形からのズレ

    即ち,転倒ペナルティは,つぎのように与えられる:
    • 「右に倒れかけている」
        ロール角が +30°
        角速度が大きい
        左脚が浮いている
      → この 「瞬間」 の a_t にペナルティ

    • 「前につんのめっている」
        ピッチ角が +40°
        前脚が両方浮いている
        CoM が支持多角形の外
      → この 「瞬間」 の a_t にペナルティ

    • 「脚が全て浮いた (ジャンプ状態)」
        接地脚数 = 0
        角速度が大きい
      → この 「瞬間」 の a_t にペナルティ


    しかし,また疑問が。
    「瞬間」 と定めても,r_t に与えた報酬値は,続く r_{t +1}, r_{t +2}, ‥‥ の中で引きずるのではないか?
    その報酬値の累積は,実際と乖離しないか?
    「報酬の暴走」 にならないか?

    実際,報酬値はセンサー値から機械的に計算されるものなので,「報酬の暴走」 は,問題になる。
    そして,対策することになる。
    報酬設定,Policy 更新のアルゴリズムには,この対策が含まれている:

    ① 転倒したら,試行 (「エピソード」) 終了
      転倒した瞬間の r_t には,−100 の大ペナルティ。
      r_{t+1}, r_{t+2} は存在しない

    ② 転倒の兆候ペナルティは「小さく」設計されている
    実際,兆候ペナルティは「注意しろ」の信号であり, 大きすぎると学習が不安定になる。
     例:
      ロール角が大きい → − 0.1
      ピッチ角が大きい → − 0.1
      接地脚が少ない  → − 0.2

    ③ 割引率 γ により,累積報酬は有限値に収束
    RL の累積報酬は:
      G_t = r_t +γr_{t+1} +γ^2 r_{t+2} + ⋯
    仮に
      r_t = r_{t+1} = ‥‥ = a
    とすると,
      G_t = a +γa +γ^2 a + ⋯
      γG_t = γa +γ^2 a +γ^3 a+ ⋯
     ⇒ (1−γ) G_t = a
      G_t = a / (1−γ)
    γ の典型値は 0.95 で,この場合:
      G_t = a × 20
    割引率 γ の一般的な説明は:
      未来の報酬をどれだけ重視するか
      γ が大きいほど長期的な報酬を重視
      γ が小さいほど短期的な報酬を重視
    しかし,割引率 γ は「報酬の引きずり」を制御するための仕組みでもある。

    ③ 報酬クリッピング(reward clipping)
    -1 〜 +1 の範囲に収めることも多い。
    (クリッピング付き目的関数)

    ④ 正規化(normalization)
    観測値や報酬を正規化して安定化。