概要
前回の続き。歩くモーションも出来るんじゃないかと思って実験してみた。
(前回の記事)Unityの機械学習ライブラリで待機モーションを作成する実験をした
出来たのが以下のもの。想像の範囲外の歩き方になった。これが機械学習の面白いところかもしれない。
機械学習で歩くモーションを作る実験。想像の斜め上を行く歩き方になった。 pic.twitter.com/wUXG335Poe
— unagi (@UnagiHuman) 2017年10月22日
この記事にはこの歩き方にいたるまでの試行錯誤の過程を書いておこうと思う。
失敗例1
まずは歩いて前進するという行為を要素に分解してみた。
- 足以外の部分が地面につかない(待機モーションと同じ)
- 目標地点に到達するように移動する
これをAgentが得られる報酬に置き換えると
- 足以外の部分が地面に設置したら罰則を与えてstep終了しリセット
- 目標地点に到達したら報酬を得られてstep終了しリセット
- 1step毎に目標地点に近いほど多く報酬をもらえる
その結果がこれ。
機械学習で画面手前の個所まで2足歩行させようとしているのだが、なかなか1歩目を踏み出してくれない。。 pic.twitter.com/XyXppRMIwf
— unagi (@UnagiHuman) 2017年10月21日
おそらくこの条件が良くなくて、前に倒れこむだけで報酬が貰えるという欠陥があるのだろうと推測。
- 1step毎に目標地点に近いほど多く報酬をもらえる
失敗例2
失敗例1の欠点である倒れこむだけで報酬が貰えるのを改善する為に目的地までの間に撒き餌をまいて、撒き餌を採ると報酬が貰える条件を追加してみた。
- 足以外の部分が地面に設置したら罰則を与えてstep終了しリセット
- 目標地点に到達したら報酬を得られてstep終了しリセット
- 1step毎に目標地点に近いほど多く報酬をもらえる(近づいたときだけ貰える)
- (New)撒き餌を採ったら報酬が貰える
結果がこれ。
撒き餌をしてみたらやっと一歩を踏み出してくれた。 pic.twitter.com/9VScKvPZlD
— unagi (@UnagiHuman) 2017年10月22日
これまでのように足が地面についたまま倒れこむのではなく、足を浮かせて前に進もうとしているのが分かる。一歩を踏み出したので大きな前進である。
成功例
正直、これ以上どんな条件を加えれば良いのか思い浮かばなかったので、公式のページをここで初めて参考にしてみた。
Camera as a state #92
Agentの状態を測定するのに、手動で加えたState(前回の記事ではStateにRagdollの位置、速度を与えた)だけではなく、Cameraからの画像を利用する方法があるようだ。これを利用してみる。設定は、Agentのインスペクタのobservationsにカメラを設定するとの事。
カメラを使うと計算時間が何倍にもなるようで自分の環境で30分ぐらいで済んでいた計算が3時間ほどかかった。
ただ、結果としては概要で示したように、満足いくものとなった。今回の実験のように、操作するパラメタ(36つ)と監視するパラメタ(72こ)が多い場合はカメラを使った方が効率的に分析できるのかも?
成功例の考察
なぜ、奇妙な動き方になったのかは正直分からない。どの関節にも均等に偏りなく回転速度を与えるようにしたし、報酬を与える条件も目的値に近づくという単純な条件だけである。Unityの物理エンジンにおいてRagdollが一番安定して移動できる方法がそれだったという事か。