【機械学習基礎研究14】
最下点からの強制振動の強化学習(原点付近に留まるような報酬の与え方)
前回に続いて、最下点に置かれた振り子を、できるだけ原点付近に留まるようにして強制振動の強化学習を行います。5秒間で力学的エネルギーが20[N](振り子が1回転できる量)を超えたら成功とみなします。 前回と同様、利得に原点からの距離の2乗に比例する減点項を加えることで意図通りの学習ができることを確認できました。
Q学習のパラメータ
環境と行動と利得の定義(最適行動価値関数の定義)
・おもりの角度の分割数:11
・おもりの角速度の分割数:7
・滑車の位置の分割数:7
・滑車の速度の分割数:7
→ 環境数:11×7×7×7
・力の分割数(行動数):5
利得の定義:原点からの距離の2乗に比例する減点項
力学的エネルギー(位置エネルギー+運動エネルギー)が増大するように、利得として力学的エネルギーをそのまま与えます。 一方、滑車ができるだけ原点近傍に留まってほしいので、原点からの距離の2乗に比例する減点項(バネ弾性力のポテンシャルに相当)を考慮します。
\begin{align} r = mgz + \frac{1}{2} m v^2 - \frac{1}{2} k x^2 \end{align}
第1項目:ポテンシャルエネルギー(加点)、第2項目:運動エネルギー(加点)、第3項目:バネ弾性力ポテンシャル(減点)
成功時や失敗時の加点・減点は行っていません。
Q学習の表式とパラメータの値
\begin{align} Q^{(i+1)}(s,a) \leftarrow Q^{(i)}(s,a)+\eta\left[ r+\gamma \max\limits_{a'} Q^{(i)}(s',a') -Q^{(i)}(s,a) \right] \end{align}
$s$ : 時刻tにおける状態。$s(t)$と同値。
$a$ : 時刻tにおける行動。$a(t)$と同値。
$r$ : 時刻tの行動で得られた利得。$r(t+1)$と同値。
$Q(s, a)$ : 状態$s$における行動aに対する行動価値関数。上付き添字($i$)は学習回数を表す。
$\gamma$ : 割引率($0< \gamma \le 1$)
$\eta$ : 学習率($0< \eta \le 1$)
$s'=s(t+1)$
今回の設定
行動時間間隔:0.05(20Hz)(0.05秒ごとに行動を選択・実行する)
学習回数(episode):9,000回(残りの1,000回は学習なし)
割引率($\gamma$): 1.0
貪欲性($\epsilon$):学習回数0回から9,000回まで0.5から1.0まで徐々に上げる。それ以降1.0のまま
学習率($\eta$):学習回数0回から9,000回まで0.1、それ以降0。
初速度( $\boldsymbol{v}_{0}$ ):-1~1[m/s]でランダムに与える
外力( $\boldsymbol{f}_{\rm ext}$ ):なし
学習回数に対する成功確率と力学的エネルギー(運動エネルギーと位置エネルギーの和)の時系列グラフ
学習回数に対する成功率(100回学習ごとの平均)のグラフを示します。最後の1,000回は貪欲性1として学習結果を評価しています。同じ条件で100回学習し、①最も成績が良い結果(青色)、②最も成績が悪い結果(橙色)、③100回の平均(茶色)の3つを表示します。
また、力学的エネルギーの時系列グラフは振り子の運動エネルギーと位置エネルギーと力学的エネルギーの時間変化、また参考までに振り子の位置(x座標)の時間変化を示しています。
$k=0$(ばね弾性力ポテンシャルなし)の学習回数に対する成功確率
$k=0$(ばね弾性力ポテンシャルなし)の力学的エネルギーと振り子の位置の時系列データ
$k=1$の学習回数に対する成功確率
$k=1$の力学的エネルギーと振り子の位置の時系列データ
$k=2$の学習回数に対する成功確率
$k=2$の力学的エネルギーと振り子の位置の時系列データ
$k=3$の学習回数に対する成功確率
$k=3$の力学的エネルギーと振り子の位置の時系列データ
$k=4$の学習回数に対する成功確率
$k=4$の力学的エネルギーと振り子の位置の時系列データ
$k=5$の学習回数に対する成功確率
$k=5$の力学的エネルギーと振り子の位置の時系列データ
$k=6$の学習回数に対する成功確率
$k=6$の力学的エネルギーと振り子の位置の時系列データ
$k=7$の学習回数に対する成功確率
$k=7$の力学的エネルギーと振り子の位置の時系列データ
$k=8$の学習回数に対する成功確率
$k=8$の力学的エネルギーと振り子の位置の時系列データ
$k=9$の学習回数に対する成功確率
$k=9$の力学的エネルギーと振り子の位置の時系列データ
$k=10$の学習回数に対する成功確率
$k=10$の力学的エネルギーと振り子の位置の時系列データ
結果と考察とメモ
・$k=5$が最も想定通りの学習結果である。
→ 共鳴させる場合、最下点の速度が一番遅く、最上点の速度が一番早いことがわかる(ちょっと意外)。
【メモ】最下点からスタートして倒立させる学習を行う。
【メモ】減点に向かって収束させるにはどのような学習が必要なのか?
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/20180727-1.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。
参考(物理シミュレーション)
上記シミュレーションは、ルンゲ・クッタ法という常微分方程式を解くアルゴリズムを用いてニュートンの運動方程式を数値的に解いています。本稿で紹介した物理シミュレーションの方法を詳しく解説している書籍です。もしよろしければ「ルンゲ・クッタで行こう!~物理シミュレーションを基礎から学ぶ~(目次)」を参照ください。