概要
前作の『ITエンジニアのための機械学習理論入門』から,5年経過しましたが,AI(人工知能)や機械学習に対しての期待と関心はまったく衰えません。むしろ機械学習の利用はIT業界で当然のものとなり,さらなる活用がさまざまな場所で行われています。前作では一般的な機械学習について解説しましたが,試行錯誤しながら1つの解をもとめていく「強化学習理論」についてくわしく・やさしく解説します。理論を表現するいろいろな数式とそれらをプログラミングするためのPythonコードを並列しながらその理論の神髄にせまり,強化学習の基礎となるさまざまなアルゴリズムを体系的に学びます。
こんな方におすすめ
- 機械学習,AI(人工知能)に興味があるITエンジニア,大学生,高専生,高校生など
著者から一言
「Q Learning とSARSA の違いを説明してください。」皆さんは,この質問に即答できるでしょうか? 本書を読めば,自信を持って答えられます! —— と,謎の宣伝文句(?)から始まりましたが,少しばかり背景を説明しておきましょう。
2015 年に『ITエンジニアのための機械学習理論入門』(技術評論社)を出版させていただいた後,驚くほどの勢いで機械学習の入門書が書店にあふれるようになりました。そしてまた,回帰モデルによる数値予測,分類モデルによる画像データの識別など,教師データを用いた機械学習モデル,いわゆる「教師あり学習」は,一般企業における活用が進みました。その一方で,エージェントが学習データを収集しながら学習処理を進める「強化学習」の利用は未だ敷居が高く,一般企業における活用は「まだこれから」という状況です。本書では,今後のスキルアップや強化学習の活用に向けた準備をしようと考えるIT エンジニアの方々に向けて,強化学習のアルゴリズムを基礎から解説しています。動的計画法による厳密解の導出方法から始まり,ニューラルネットワークと強化学習を組み合わせた「DQN(Deep Q Network)」まで,「強化学習がなぜうまくいくのか」という基本原理を解説します。Python で実装したコードをGoogle Colaboratory で実行しながら,それぞれのアルゴリズムがどのように機能するのかを「実感して理解する」ことが本書の一貫したテーマです。既存の機械学習ライブラリをブラックボックスとして用いるのではなく,具体的な動作原理が確認できるように,すべてのアルゴリズムを一から実装しています。「三目並べ」や「あるけあるけゲーム」など,シンプルな題材を用いて,エージェント同士の対戦による相互学習や,実行時の先読みによる性能向上など,より実践的なテクニックにも触れています。冒頭の「Q Learning」と「SARSA」は,どちらも強化学習の基礎的なアルゴリズムですが,機械学習の活用が広がるスピードを考えると,近い将来,機械学習に関わるIT エンジニアの採用面接では,冒頭のような質問が「あたりまえ」になる日が近いのかも知れません。試験対策が本書の目的ではありませんが,一般的な「教師あり学習」の仕組みを学んだ上で,次のステップとして「強化学習」に取り組みたいと考える皆さんの知的好奇心を満たし,IT エンジニアとしての活動の幅を広げるきっかけが供できれば,筆者にとってこの上ない喜びです。
目次
第1章 強化学習のゴールと課題
- 1.1 強化学習の考え方
- 1.2 実行環境のセットアップ
- 1.3 バンディットアルゴリズム(基本編)
- 1.4 バンディットアルゴリズム(応用編)
第2章 環境モデルを用いた強化学習の枠組み
- 2.1 マルコフ決定過程による環境のモデル化
- 2.2 エージェントの行動ポリシーと状態価値関数
- 2.3 動的計画法による状態価値関数の決定
第3章 行動ポリシーの改善アルゴリズム
- 3.1 ポリシー反復法
- 3.2 価値反復法
- 3.3 より実践的な実装例
第4章 サンプリングデータを用いた学習法
- 4.1 モンテカルロ法
- 4.2 TD(Temporal-Difference)法
第5章 ニューラルネットワークによる関数近似
- 5.1 ニューラルネットワークによる状態価値関数の計算
- 5.2 ニューラルネットワークを用いたQ-Learning
サポート
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
P.193 (下から6行目の末尾)
誤 |
極端に小さな値(10−10 )
|
---|
正 |
極端に小さな値(−1010 )
|
---|
P.213 (SARSA の実装コード:[MSA-05])
誤 |
------------------------------------------
16: a_new = agent.policy[s]
------------------------------------------
|
---|
正 |
------------------------------------------
16: a_new = agent.policy[s_new]
------------------------------------------
|
---|
この修正に伴い,コードの実行結果が少し変化するため,関連する本文の内容を次のように変更させていただきます。
P.214([MSA-09]の出力結果とその直後の一文)
変更前 |
############
#++++++++++#
# +#
####### +#
# +#
# ++++++++#
# + #######
# + #
# +++++++G#
############
ここでは、ε=0を指定して、ランダムな行動は混ぜないようにしていますが、最短の経路を学ぶことはできていないようです。先に説明したように、SARSAでは、ランダムな行動が混ざったデータを本来の行動ポリシーに基づいたデータとみなして学習します。そのため、学習結果にこのような変動が発生します。
|
---|
変更後 |
############
#+++++++ #
# + #
#######+ #
# +++ #
# ++ #
# +#######
# ++ #
# +++++G#
############
この例では、うまく最短の経路が学習できているようです。ただし、先に説明したように、SARSAでは、ランダムな行動が混ざったデータを本来の行動ポリシーに基づいたデータとみなして学習するため、もう少し複雑な問題になると、最短経路の学習に失敗する可能性が大きくなります(章末の演習問題2を参照)。
|
---|
P.216(図4.13)
変更後 |
#----------#
#S G#
# #### #
# #### #
# #
# #
# #
############
|
---|
SARSAが最短経路の学習に失敗しやすくなるように,迷路の形を変更しました。
P.218(図4.17:SARSAによる学習結果)
変更後 |
#----------#
#+ G#
#+ #### +#
#+ ####+++#
#++++++++ #
# #
# #
############
|
---|