ネズミを追いかける振り子と機械の自動操作(深層強化学習  Deep Reinforcement Learning)

こんにちは。
今回は、「機械の自動操作」について、少しお話をしたいと思います。
機械学習の一つの領域に「強化学習」がありますが、強化学習とディープラーニングを統合させた深層強化学習を用いた、「機械の自動操作」についてご紹介したいと思います。

自動操作で最近のホットな話題は、「車の自動運転」です。
Googleをはじめ、車の製造メーカー各社は、大量の機械学習技術者を採用し、「車の自動運転」を目指して競争しているようです。

複数のモータをスムーズに制御しなければならいない人間型ロボットについても同様で、機械学習を用いた制御方法が盛んに研究されているようです。

「強化学習」の基本につきましては、「強い三目並べをつくる」をテーマに、書籍「実装 ディープラーニング」(2016 オーム社)の第6章で紹介させていただきました。詳しくはこちらをご覧下さい。

初めに、強化学習と自動操作の基本ともいえる「倒立振り子」のご紹介です。
ここでは、この「倒立振り子」も簡単な制御機械の一つとして考えています。

 

1 倒立振り子

touritsu001

 
上の図のような振り子を考えます。
この振り子の「条件」、「目標」、「報酬」は次の通りです。

 
〇条件
     振り子を回すトルクは、左まわり、右まわりの二種類がある
     トルクは小さい(振り子を一気に上まで持ち上げられない。もちろん「水平90度の位置」も維持で      きません)

 
〇目標
     振り子を倒立させたい(静止状態)

 
〇報酬
     振り子の位置が高いほど報酬は大きい

振り子は、自分の今の状態(振り子の角度など)がわかるので、この状態でどれだけ「報酬」がもらえるかを計算することができます。
振り子はこの報酬をもとに、「右へトルクをかける」、「左へトルクをかける」という行動を何百万回も試行(学習)して、どのようなときに、どうトルクをかければ、倒立することができるか、を学習していきます。

ここでのポイントは、振り子が「自ら学習する」という点で、「状態Aのときに、行動Bをとる」、といった組み合わせパターンを、人が解析してプログラムで制御している、ということではないところです。
このため、より複雑な制御も可能になるといわれています。

それでは、(深層強化学習の)学習の状況によって、振り子がどのように動くようになるのかをみてみましょう。

 

(1)学習 「初期段階」 の振り子の動き

学習が進んでいないため、トルクを右回り、左回りにランダムにかけています。
ちょうど小さな子供が逆上がりの練習をしているような姿にも見えますね。

(2)学習 「中盤」 の振り子の動き

だいぶ学習が進み、一旦振り上げて、その反動を使えば振り子を上に持ち上げられることを学習したようです。
しかし、てっぺんまでいった振り子は、勢い余って下に落ちてしまっています。

(3)学習 「完了後」 の振り子の動き

学習がほぼ完了した状況です。振り子がてっぺんで静止し、見事に倒立しています。無駄な動きもありません。 「振り子の位置が高いほど報酬は大きい」として報酬を与えるだけで、左右へのトルクを自動制御しながら、倒立するという目標を達成しています。

2 ネズミを追いかける振り子

さて、いよいよ本題です。

上の「倒立振り子」を少し応用して、振り子がネズミを追いかけるように変更してみます。
ネズミがゆっくり振り子の周りをまわります。そのネズミを振り子が追いかける、という設定です。
ネズミがてっぺんにずっと停まっていれば、上の「倒立振り子」と同じ状況になりますね。

nezumi001

 ネズミを追いかける振り子の「条件」、「目標」、「報酬」は次の通りです。

〇条件
      振り子を回すトルクは、左まわり、右まわりの二種類がある       
      トルクは小さい(振り子を一気に上まで持ち上げられない。もちろん「水平90度の位置」も維持
      できません)
     (これは「倒立振り子」と同じ条件です)

〇目標
     振り子でネズミを追いかけたい
     (ネズミは時計の反対周りに、ゆっくり逃げます)

〇報酬
     ネズミと振り子の位置が近いほど、報酬は大きい

 

以上の設定で学習を進めると、(深層強化学習の)学習「完了後」の振り子の動きは次のようになります。
このとき、
    ・ネズミはてっぺんからスタートし、ゆっくり左周りで(ずっと)回り続けます。
    ・ネズミは「仮想的」な目標なので、ネズミは画面に表示していません。

 

振り子は途中までネズミを追いかけるのですが、ネズミが(時計の)10時ごろの位置までいくと、振り子は重力に抗うだけのトルクがないため、(時計の)10時の位置をキープできず、下に落ちてしまいます。

ところが、ネズミが(時計の)9時ごろの位置までいくと、勢いをつければネズミの近くまでいけることに振り子が気づき、クルクルと回る動作をします。
ネズミが下までくると、振り子は再びゆっくりとネズミに追従します。
しかしネズミが(時計の)4時頃の位置までいくと、トルクがないため振り子は追従できず、ネズミが上に登っていくのをジッと待っています。

見ていると、振り子に何か知能が備わったみたいで、とても面白い動きですね。

当然、ネズミが停止すれば振り子も止まり、ネズミが右回転すれば、振り子も右回転します。もし重力がなければ、あるいは重力に負けないトルクを振り子が持っていれば、振り子は一周ずっとネズミに追従します。

「ネズミを追いかける振り子」では、

仮想のネズミをうまく移動するだけで、すなわち、行動目標を定めるだけで、「この状況のとき、トルクをこうかける」などの操作は一切意識せずに、振り子を自由にコントロールできる

ことを示しています。

  ①ネズミを「カメラからの入力画像」
  ②振り子のトルク操作を、「車のハンドル、アクセル、ブレーキの操作」

に置き換えれば、「ネズミを追いかける振り子」の延長線上に「車の自動運転」もありそうです。

今や「車の自動運転」は機械学習の先にある、ということなのでしょうか。

機械学習の中の一領域である「強化学習」は、MIT Technology で、2017年のブレークスルーテクノロジーの一つにあげられています。

世界が少しずつ変わっていくような気がします。今後が楽しみですね。