倒立振子の作り方
ゼロから学ぶ強化学習
物理シミュレーション×機械学習
著者 | 遠藤 理平 |
---|---|
判型 | B5変型、160頁 |
ISBN | 978-4-87783-440-1 |
価格 | 本体 2,400円 |
発行日 | 2019年 2月10日(初版第1刷) |
備考 | ダウンロードサービス:学習に使えるサンプルファイル |
本書について
小学生の時分、雨上がりの学校からの帰り道で、「手のひらに乗せた傘」を倒さないように歩いた経験は誰にでもあると思います。「傘の角度」や手に感じる「傘から受ける力」などの情報をもとに、状況を瞬間的に判断して最適な行動を取ることで傘の状態を維持しますが、誰に教わるでもなく、練習を重ねることで誰でも出来るようになります。反対に、行動指針を言葉で説明しようとすると、冗長でわかりにくい表現にならざるを得ません。
このように言葉で説明するのは難しいが、練習により失敗と成功を繰り返すことで習得できる認知のことを暗黙知と呼びます。自転車に乗る、ブランコを漕ぐ、などの動作が、その代表例となります。反対に、言葉や図表、法則などで表現できる知識は形式知と呼ばれ、科学・技術と高い親和性がある領域となります。
昨今の人工知能と評される機械学習は、人間が設定した目的に対して「試行錯誤の反復訓練」を行うことで、期待値が高い行動を学習できるものです。つまり、コンピュータには苦手な領域とされていた暗黙知を従来の技術基盤に取り込むという、全く新しい価値創造の可能性を意味しています。
本書は、コンピュータを用いて物理現象を再現する「物理シミュレーション」と、与えられた環境内で目的に応じて最適な行動を決定する「強化学習」を組み合わせて解説する書籍です。先ほど例として紹介した「手のひらに乗せた傘」をモデル化した倒立振子を対象に強化学習の方法を解説していきます。
本書は大きく分けて、前半4章と後半6章の2部構成になっています。前半は、3×3のマス目に○(先手)と×(後手)のマークを交互に埋めていき、「縦・横・斜めのいずれかで同じマークが3つ並ぶと勝ち」という2人対決ゲーム(三目並べ)を題材にして強化学習の基本を解説します。その結果を踏まえて、コンピュータ対戦型の三目並べ(Webブラウザゲーム)を開発します。実行環境にWebブラウザを利用するため、HTML5(JavaScript)を使ってゲームを開発します。後半は、振り子運動のシミュレーションの実装方法を解説し、その後、倒立振子を強化学習と組み合わせて実現するために必要な要素を順番に解説していきます。物理シミュレーションは計算量が多いため、プログラミング言語としてC++を利用します。
目次
- 第1章 強化学習で三目並べを学習させよう!
- 1.1 強化学習の概念
- 1.2 環境・エージェント・状態・行動の定義
- 1.3 状態と行動の三目並べにおける具体例
- 1.4 報酬の定義
- 1.5 行動評価関数の定義とQ学習のアルゴリズム
- 1.6 Q学習アルゴリズムの導出
- 1.7 行動選択の方法
- 第2章 三目並べ全状態の列挙方法
- 2.1 対称性の確認
- 2.2 対称操作の方法
- 2.3 状態の定義と重複チェックの方法
- 2.4 対称性を考慮した全状態を列挙
- 2.5 勝敗決定時に終了する場合の全状態
- 第3章 三目並べの強化学習
- 3.1 三目並べにおける行動評価関数の更新方法
- 3.2 三目並べ強化学習の環境を表現するEnvironmentクラス
- 3.3 三目並べ強化学習のエージェントを表現するAgentクラス
- 第4章 強化学習成果のパラメータ依存性
- 4.1 強化学習の実行方法
- 4.2 学習成果の検証方法
- 4.3 ランダム法の成果
- 4.4 Epsilon-Greedy法を用いた学習
- 4.5 Epsilon-Greedy法のε依存性
- 4.6 ボルツマン法を用いた学習
- 4.7 ボルツマン法のβ依存性
- 4.8 学習回数ごとにパラメータを変化させる学習法
- 4.9 ペナルティ値の依存性
- 4.10 割引率依存性
- 4.11 最適パラメータによる学習成果
- 4.12 コンピュータ対戦型三目並べゲーム
- 第5章 振子運動のシミュレーション方法
- 5.1 倒立振子の数理モデル
- 5.2 張力の導出
- 5.3 ルンゲ・クッタ法を用いたプログラミングの方法
- 5.4 Vector3クラスのヘッダーファイル
- 5.5 RK4_Nbodyクラスのヘッダーファイル
- 第6章 振子運動シミュレーション
- 6.1 動作確認1:おもりに初速度を与えた場合
- 6.2 動作確認2:滑車に周期的な力を与えた場合
- 6.3 単振子運動シミュレーション
- 6.4 強制振動運動シミュレーション
- 第7章 強化学習で倒立振子シミュレーション
- 7.1 倒立振子運動に対する強化学習の実装
- 7.2 環境(Environmentクラス)の実装
- 7.3 エージェント(Agentクラス)の実装
- 第8章 倒立状態維持の強化学習
- 8.1 学習対象と報酬の定義
- 8.2 基本パラメータによる学習結果
- 8.3 原点近傍近くに縛る報酬の与え方
- 8.4 最適な割引率について
- 第9章 最下点から強制振動運動の強化学習
- 9.1 学習対象の報酬の定義
- 9.2 成功と失敗の設定
- 9.3 学習結果
- 第10章 最下点から倒立状態維持の強化学習
- 10.1 学習対象の報酬の定義
- 10.2 成功と失敗の設定
- 10.3 学習結果
- 10.4 最適なApの探索
- 10.5 最適なパラメータの探索時のメモ