モデルのぬまっち様
この記事でわかること
- 強化学習が機械学習のなかの一つであることがわかる
- 強化学習の基本!エージェント、環境、リワードがマリオゲームの例でわかる
- おすすめのサイト、動画によって強化学習が理解できるようになる
- マルチエージェントシステムについてわかる
- 強化学習を学ぶ方法がわかる
強化学習とは、機械学習のひとつである
強化学習とは、機械学習の中の一つです。 機械学習は、大きく分けて3つあります。
-
教師あり学習
- 教師データという答え(ラベル)付きのデータを使用して学習させる。
- 迷惑メールの判定タスクで言えば、迷惑メールかどうかのラベルを付与した教師データを機械学習アルゴリズムに投入し学習させる。学習したモデルは、新しいメールを迷惑メールかどうか判断できるようになる。
-
教師なし学習
- 教師あり学習と異なる点は、ラベルが無くても学習させることができること。
- 特徴から、データを分類することできる。
-
強化学習
- データが無い状態から報酬、罰をあたえることによって学習させることができる。
- イメージし易い例だとサーカスの動物の調教と考えると良い。詳しくは「強化学習とは」のところで解説します。
強化学習とは
強化学習とは、Agent(エージェント)が、環境からの「状態、報酬」情報をもとに、もっとも最適な行動をとるように学習させる技術のことです。
スーパーマリオのゲームプレイで話を進めると・・・
Agent・・・マリオ(プレイヤー)
環境・・・ゲームそのもの(敵、障害物などの情報)
マリオが先に進んだら報酬を与えて、敵に倒されたり、穴に落ちて死んだ場合は、罰を与えて学習させて、ゴールを目指します。
強化学習を理解は難しい?まずは、教師あり学習の理解から!
「強化学習入門サイト」を見かけるけど、
CNN?NN(ニューラルネットワーク)?レイヤー(層)とか、良くわからない用語ばかりだな・・・。どこから理解したらよいかわからないな・・・。
そうなんです。
強化学習は、機械学習の基本である「教師あり学習」をある程度理解していることを前提に書いてあることが多いから難しいんだ。
だから、強化学習は、教師あり学習(ニューラルネットワーク、CNNなど)を勉強してからのほうが理解しやすいです。
ニューラルネットワークは、強化学習でよく使われるアルゴリズムDQNでは必須なので、ライブラリーが使えるだけで無く、どのような理論で動いているのかも抑えておきたいところです。
囲碁の世界でも衝撃を与えた「AlphaGo(アルファ碁)」でもニューラルネットワークが基礎になっています。
強化学習を理解するのにオススメな資料
そもそも、強化学習でどんなことができるの?
強化学習でどんなことができるのか、わかりやすい資料や動画があったので紹介したいと思います。
ゲームの自動プレイ
人間に変わって、自動でプレイさせることができます。
スーパーマリオだったら最速でゲームをクリアする方法を見つけるのに、強化学習を利用できそうです。
以下の動画は、強化学習を使ったスーパーマリオ自動プレイです。
リワードをどのように設計したら良いかも解説しているので、かなり勉強になります。
AlphaGo(アルファ碁)
AlphaGoの論文の解説があります。
特に気になった部分は「AlphaGo同士の対局による強化学習」を行っている部分です。
強化学習 AlphaZeroの実装例
どうぶつ将棋を例にしたAlphaZeroの実装例です。
内容は若干難しいかもしれませんが、ソースコードに細かくコメントを入れてくれているため、比較的読みやすいかと思います。
上記のブログの著者が出版している本です。
ロボットの制御
2足歩行ロボットの制御ができる。
どのようにすれば安定した歩きができるのか、強化学習で何度もリトライすることにより、人間に近い歩きを再現できます。
こちらは、強化学習で人間ぽい歩きを実践したものです。
かなり楽しめます。
強化学習を理解するのに役立つもの
深層強化学習アルゴリズムまとめ
深層強化学習のアルゴリズムが、解説されています。
強化学習ライブラリstable-baselines
強化学習ライブラリstable-baselinesのサイトです。
stable-baselinesを使うと比較的短いコードで強化学習が可能なので、初心者によっく使われるようです。
アルゴリズムとしては、「DQN」「A2C」「PPO2」など利用できます。
DeNA『逆転オセロニア 』アプリ開発事例
DeNAのアプリ『逆転オセロニア 』の開発事例です。
ゲームバランス調整に強化学習を使っているとのことです。
サイト内では、スライドで解説しているので、実際に強化学習をやるときに役立ちます。
PyTorchによる強化学習の入門
CartPole(カートポール)を使ったPyTorchの強化学習のチュートリアルです。
PyTorchは、deep learningのライブラリのため、stable-baselinesのような強化学習に特化していないため、少々長いコードを書くことになりますが、stable-baselinesになれてきたらPyTorchに切り替えて、カスタマイズができるようになります。
PyTorch 1.4 Tutorials : 強化学習 : 強化学習 (DQN) チュートリアル
マルチエージェントシステムについて
サッカーや、バスケボールの場合は、複数のエージェントが活躍するマルチエージェントシステムになります。
マルチエージェントについては、以下のサイトが参考になります。
AlphaZeroの解説
AlphaZeroについてわかりやすく解説しています。
また、AlphaZeroの背景になるモンテカルロ探索の話しも、参考になります。
将棋界最強AlphaZeroの論文をざっくり解説
強化学習を学ぶ環境2選
Kaggleのコンペ
Kaggleは世界中のAIエンジニアがあつまるコミュニティです。kaggleでは常にコンペが開催されていて、技術を競い合っています。
実践式なのでAIに関するスキルが上がります。
kaggleの強化学習のチュートリアル的なコンペ「connectx」があります。
色んな人がコードを公開しているので実際に動かしたりしていると徐々に実力がついてきます。
https://www.kaggle.com/c/connectx
Udemyの動画
Udemyには強化学習に特化した「【 TensorFlow・Python3 で学ぶ】深層強化学習入門」という講座があります。
この動画は、解説がわかりやすいので、初めて強化学習を学ぶ人にオススメの内容です。
ただし、ニューラルネットワークの知識をキャッチアップしていることが前提のため、もし知らないのであれば、ニューラルネットワークを学んだ後に講座を受けた方がより理解度が増します。
注意点:
動画を見る限りではTensorFlowの1系(現在は2.0系)を使っているため、今の技術に合わせるのであれば、TensorFlow2系のスキルが必要かもしれません。なお、TensorFlowはバージョンを指定してあげれば1系もまだ使用することができます。
>>Udemy・【 TensorFlow・Python3 で学ぶ】深層強化学習入門講座はこちらから!
まとめ
強化学習は、自動ゲームプレイ、ゲームの対戦相手、ロボット開発などで応用されています。
日常の業務に取り入れるには、まだ難しい部分がありますが、面白分野だと思います。
強化学習を学ぶには、機械学習の基礎である「教師あり学習」を理解していることが前提になっているため、
もし「強化学習わからん!」となったら「教師あり学習」から学ぶと良いかもしれません。