Pythonで機械学習入門④強化学習編



Pythonで強化学習について学びたいよ….!

この記事では、Pythonや投資初心者でもできるように、機械学習の入門をレクチャーしていきます!

今回の記事は日本ディープラーニング協会(JDLA)様のG検定公式テキストを参考に作成しています!

加えて、記事中の説明として、こーじ(物理エンジンYouTuber)様の動画のリンクを貼らさせて頂いています。

(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)

本記事は、全6回に渡って掲載される「Pythonで機械学習入門」シリーズの第4回になります!

このシリーズを読むとわかること

  • 機械学習の教師あり学習についてざっくり理解できる
  • 機械学習の教師なし学習についてざっくり理解できる
  • 機械学習の強化学習についてざっくり理解できる
  • 機械学習のニューラルネットワークについてざっくり理解できる
  • 機械学習の深層学習についてざっくり理解できる

機械学習について理解すれば、トレンドの技術である人工知能についてより正確な知識を身につけることができます!

それだけでなく、本記事ではPythonをつかい分析をするため プログラミングのスキルも磨けます!

第4回ではその中でも、

  • 強化学習をざっくり理解する
  • Pythonを用いて強化学習を体験する

といったことをおこなっていきます!

それでは一緒にまなんでいきましょう!

強化学習をざっくり理解する!

女性 トレーニング ジムここではまず、そもそも強化学習とはなんなのか、どういった仕組みで学習していくのかについて簡単に抑えていきます!

強化学習は、ロボットの歩行制御や、囲碁のAIで話題になったアルファ碁などにも使われています!

強化学習とは

強化学習とは

ある環境下で、目的とする報酬(スコア)を最大化するためにどういった行動をするべきが学習していく仕組み。

強化学習は、例えばロボットの歩行制御に用いられます。

ある研究室で、二足歩行ロボットを歩行テストしていたとしましょう。

このとき、二足歩行が売りなロボットですから、このテストの最大の目的はロボットができるだけ長く歩くことになります。

このとき、ロボットの歩行距離が伸びれば伸びるほどロボットに報酬(スコア)を与えるようにします。

ロボットには予めスコアを与えられるとその行動をするようなプログラムを組んでおきます。

すると、ロボットは見づから歩行距離を最大化するための行動を学習します。

この学習を何千何万回おこない、最終的に歩行するロボットが完成します!

このように、どれくらいの歩幅やスピードで歩くなりを意識せず、「歩けた距離」のみを報酬にして学習するのが強化学習です!

なお、今回の例のような強化学習を感覚的に理解したい方は、物理エンジン(アルゴリズム)系ユーチューバーの「こーじ」様の動画が非常にオススメですのでぜひご覧ください!!

引用:【こーじの歩行学習#1】強化学習で人間ぽい歩きを目指したけど癖の強い歩き方になってしまった

強化学習の流れ

ここでは、先ほど説明しなかった”環境”や”報酬”といった単語の解説も含め、強化学習の流れについて説明していきます!

強化学習の流れを抽象的に表すと以下の感じです。

  1. 「エージェント」がある「環境」の中に置かれ、その環境に対して「行動」を起こす
  2. 環境がエージェントに、行動により更新された「状態」と「報酬」をフィードバックする
  3. 環境からのフィードバックを元に、「方策」を修正する
  4. これまでの一連の行動の結果として変化した環境の中で、再びエージェントが環境に対して行動を起こす

先ほどのロボットの歩行制御を例に順番にみていきましょう!

①「エージェント」がある「環境」の中に置かれ、その環境に対して「行動」を起こす

エージェントとは

ある条件下において行動する主体。

環境とは

エージェントが存在する空間。

行動とは

エージェントが環境の中でとるアクション。

まず、「ロボットが二足歩行で歩行距離を伸ばす」という条件ですので、ロボットがエージェントに当たります。

そして、ロボットは研究室内で歩行テストをおこなっているため、環境は研究室になります。

その中で、ロボットが歩行距離を伸ばすために足の関節を動かしたり歩幅を変えてみたりするものが行動です。

②環境がエージェントに、行動により更新された「状態」と「報酬」をフィードバックする

状態とは

エージェント行動する度に更新される空間の情報。

報酬とは

行動の結果に応じて与えられるスコア。

ロボットは歩行距離を伸ばすためにあれこれ行動しますが、それによって研究室内の至る所に移動し環境が更新されます。

その環境の変化を、ロボットに伝達することが状態のフィードバックです。

また、そもそもロボットは歩行距離を伸ばすという命令を与えられたとしても、どう行動すればいいいのか全く分かりません。

イメージ的には、プログラミングを最初に学んだときの何がわからないのかわからない感じです(笑)

そこで、さまざまな行動をランダムに取ったときに、歩行距離が伸びたらスコア(報酬)を与え、歩行距離が下がったら罰を与えるようにします。

これにより、その都度の行動でロボットはスコア(報酬)を頼りにフィードバックしていきます!

③環境からのフィードバックを元に、「方策」を修正する

方策とは

将来得られる価値を最大化するための、行動の方針。

価値とは

一連の行動を経て得られる全体の報酬。

ロボットは、歩行距離を伸ばすためのフィードバックを受けましたが、状態や報酬といったものは、「足の関節がこの角度のときに距離が伸びた」「右足をかかとから降ろすと距離が伸びた」などどれもこれも部分的です。

そこで、行動によって得られる報酬をセットで価値と捉え、その価値を最大化するための方策を考えることにより、より全体として歩行距離を伸ばす方法を学習することができます!

④これまでの一連の行動の結果として変化した環境の中で、再びエージェントが環境に対して行動を起こす

①~③を流れを繰り返し行うことで、ロボットは歩行距離をどんどん学習していくというわけですね!

 

もっと知りたい方についてはクラスメソッド様の記事がオススメです!!

引用:実践・実装の前に押さえておきたい強化学習入門 その1



    Pythonを用いて深層強化学習を体験しよう!

    影 手

    強化学習についてなんとなく理解したところで、実際にPythonをもちいて体験していきましょう!

    今回は、コードを全てを解説し理解していくというよりは「実際に学習させるってこういうことなんだ」ということをある程度、理解してくださるくらいで大丈夫です。

    理由としては、「離散値」や「行動価値関数」など数学的な要素がかなり多いため、全てを解説するとなると記事10本分くらいは必要なためです。

    今回は、Gymと呼ばれるOpenAIを提供しているサイトより、CartPole(倒立振子)という課題の強化学習をおこなっていきます!

    倒立振子の課題は、土台の上に回転軸を固定した棒を立て、立てた棒が倒れないように土台を右・左へと細かく動かして、制御する課題です。

    イメージとしては、小学生の頃そうじ時間に手のひらの上にほうきを立てて遊んだ動きと全く同じです!

    それでは体験していきましょう!

    今回体験するデータを読み込む

    まずは、下記のLINE@から「機械学習入門4_強化学習編」のファイルをダウンロードします。

    メッセージにて、「機械学習」とお送りいただければダウンロードができます。

    友だち追加

    その後、ジュピターノートブックを使いファイルを読み込みます!

    今回のデータは下のようにかなり長いコードです…笑

    python コード

    なにをやっているのかわからないですが、ポイントだけ解説します。

    下記の画像のように、倒立振子のプログラムに報酬を与えるコードがあります。

    python コード

    これは、倒立振子が立っているときの高さを維持し続けるとプラスの報酬が与えられ、倒れたりし一番高いときの高さから低くなると罰としてマイナスを与えるように設定しています。

    これをもとに、何千回も学習させて、倒れないよう維持し続けるようにさせます!

    データを実行する

    では実際に、データを実行させましょう!

    実行させると、下記のように学習回数と、そのときのフィードバックが出力されます。

    今回は2000回を最大に学習させるよう設定しています。

    python コード

    その後しばらくすると、倒立振子の画面が表示されます!

    倒立振子

    このようにしっかり維持していることがわかります!

    データの報酬を変える

    加えて、報酬を変えたときの学習の変化を確認していきましょう!

    倒立振子が一番高いときから低くなる(棒が倒れる)と報酬を与えるように設定します。

    python コード

    実際に変化を見てみましょう!

    倒立振子

    明らかに先ほどと違うことがわかります!

    このように、目的に応じて報酬を与え方を変えることにより、全く別の行動をとるようになります!



    まとめ

    第4回では、

    • 強化学習をざっくり理解する
    • Pythonを用いて強化学習を体験する

    といったことをおこなっていきました!

    第5回では、機械学習の手法の一つのニューラルネットワークを学んでいきます!

    記事にでてくるコードはLINE@にて配布をしております!

    ラインのメッセージ欄に「機械学習」とお送りいただければ、ダウンロードリンクを送付いたします!

    友だち追加

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA