機械学習の諸手法、教師あり学習、教師なし学習、強化学習

作田 誠

目次

1  機械学習の諸手法、教師あり学習、教師なし学習、強化学習

※ 本ページの内容には、

数理・データサイエンス・AI教育強化拠点コンソーシアム
応用基礎レベルモデルカリキュラム対応教材
東京大学 数理・情報教育研究センター 二反田篤史 2021 CC BY-NC-SA

からの引用を多く含みます。

1.1 機械学習とは

機械学習 (machine learning)

Arthur Samuel (著名なAI研究者)
"Field of study that gives computers the ability to learn without being explicitly programmed" (1959)
明示的にプログラムせずにコンピュータに学習能力を与える研究分野

機械学習では蓄積されたデータからルールを発見する学習方法自体をプログラムする。
機械学習は観測データからルールの仮説を出力する過程を実現する技術といえる。

機械学習の特徴

1.2 学習と汎化

機械学習で、ルール発見のための材料となるデータを 訓練データ (training data) と言う。
訓練データに含まれない未知データに対しても正しく予測する事 (汎化 (generalization)) が目的

1.3 機械学習の学習方式

教師あり学習
訓練データが入力データと対応する出力値のペアから成る。
訓練データを基に学習を進め、任意のデータに対して出力値を予想できるようになることを目指す。
(例)
●需要予測:   気温,地域情報から電力使用量を予測
●メールのスパム判定:   メールの表題や本文の内容からスパムか否かを予測
教師なし学習
訓練データが入力データのみから成る。
訓練データから有益な知識の発見を目指す。
(手法・例)
クラスタリング:   データを類似点のあるグループに分類
●密度推定:   データを⽣成する確率密度関数を推定
●異常検知:   出現頻度の低いデータを検出
強化学習
問題の状態があったとき何通りかの行動の内一つを選択して実行し、状態遷移する。
特定状態になるとプラスまたはマイナスの報酬を得られるよう設定してシミュレーションを繰り返し、累積の報酬ができるだけ大きくなるような行動規則の獲得を目指す。
(例)
●ロボットの最適行動獲得
●将棋・囲碁AI:   勝ちにプラス報酬・負けにマイナス報酬を設定して、ランダム性を含む一定方針の着手により多数回のゲームを行うこと繰り返し、学習している側のプレーヤを強くしていく

1.4 強化学習: 説明と演習

強化学習 (reinforcement learning)

問題の 状態 (state) があったとき何通りかの 行動 (action) の内一つを何らかの選択規則 (ポリシー (policy) または 方策) を使って選択して実行し、状態遷移する。
特定状態になるとプラスまたはマイナスの 報酬 (reward) を得られるよう設定してシミュレーションを繰り返し、累積の報酬ができるだけ大きくなるような行動規則の獲得を目指す。

1.4.1 Q学習

Q学習 (Q-learning)

各状態での各行動に対する価値 (予想される累積報酬) を表す Qテーブル (配列) を用い、以下の式でQテーブルを更新していく。

Q(s, a) ← Q(s, a) + α [ r + γ maxpQ(s', p) - Q(s, a) ]

ここで、maxpQ(s', p) の部分は、Q(s', 行動) の値を取り得る行動全部で調べて最大値を求めることを意味する。

Q : Qテーブル
s : 現在の状態
a : 現在の状態でポリシーによって選択される行動
r : 行動の結果得られる報酬
s' : 行動の結果の次の状態
α: 学習率 (learning rate)。学習で一回につきQに対して加える変化量の割合の目安
γ: 割引率 (discount factor)。将来獲得できる報酬をどれくらい現在の価値として考慮に入れるかを表す目安
r : 行動の結果得られる報酬

※ 割引率 γ (ガンマ) と報酬 r (アール) が紛らわしいので注意すること。

シミュレーションの際の代表的なポリシーとして、ε-greedy法とsoft-max法がある。ここでは ε-greedy法 のみ示す。

ε-greedy法

確率 ε (探索率 (exploration rate)) で、取り得る行動の中からランダム選択する。それ以外の場合、Q値の最も大きい行動を選択する。

ε は 0 以上 1 以下の値だが、一般的には 0.1 や 0.01, 0.001 など小さい値が選ばれることが多い。
値をうまく調整することにより、大体の場合は一番報酬の高そうな行動を選択するが、小さい確率でランダム選択して他の行動も試してみる、という風に設定できる。

Q学習がうまく進んだ場合、最適の行動が獲得できる。

1.4.2 倒立振子の制御の学習

倒立振子 (とうりつしんし inverted pendulum) は支点よりも重心が高い位置にある振り子のことだが、今回は、下に台車を置き、台車の上に棒状の倒立振子を乗せて、倒立振子ができるだけ倒れてこないような制御を学習させる。

中央位置から制御を始めて倒立振子が倒れてしまうまでの間を エピソード (episode) とする。各エピソードでは短い時間間隔ごとに制御をしていくものとし、時間間隔一個分を ステップ (step) で表す。
エピソードごとのステップ数をできるだけ大きくすることが学習の目的となる。ただし、ステップ数 10000 で打ち切りとしている。

通常のステップ終了ごとに報酬 +1 を与え、失敗の場合は報酬 -10000 を設定することで、ステップ数が大きくなるよう学習していくことになる。

今回の演習では、10000 エピソードで学習させ、最後に1回最終テストで1エピソード実行する。
Q学習のパラメータ α, γ および ε-greedy のパラメータ ε をうまく調整し、少なくとも 1500 ステップ以上、望むらくは数千ステップまで、続けられるようにする。

雛形ZIPファイルがTeams「人工知能」チームの「ファイル」の「機械学習」フォルダにあるので、ダウンロードし、適当なフォルダに展開し、ファイル InvertedPendulum.java に以下の変更を加える。

  • 15行および19行の学籍番号・氏名を自分のものにする
  • 280〜282行の ALPHA, GAMMA, EPSILON の値を調整する

今回の演習では複数のJavaソースファイルからなるプログラムのため、実行のためには、 ソースを変更したら毎回、javac コマンドでコンパイルした後、java コマンドで実行する。

具体的には、コマンドプロンプトまたはPowerShellを起動し、以下を順に実行する。

作業フォルダに移動
cd   /D   "作業フォルダ"    (コマンドプロンプトのとき)
cd        "作業フォルダ"    (PowerShellのとき)
コンパイル (ソースを修正したら毎回行う)
javac  InvertedPendulum.java

※ Javaのバージョンが古くエンコードの問題でエラーが出る場合は、以下のコマンドを入れる。

javac  -encoding UTF-8  InvertedPendulum.java
実行
java  InvertedPendulum


課題14 Q学習 (一般課題)

調整の結果、最終テストで少なくとも 1500 ステップ以上、望むらくは数千ステップまで、続けられるようになったら、以下をWordファイル (拡張子 docx) にまとめて PDF ファイルとして保存し、授業Webページから提出。

  • 「課題番号 課題名」、「自分の学籍番号・氏名」
  • 280〜282行の ALPHA, GAMMA, EPSILON の調整結果
  • 実行時のコマンドプロンプト (またはPowerShell、または端末) の出力で、最後の episode:9990 以降の出力全部
  • 最終テストで 1500 ステップ以上達成時のGUIアプリケーション・ウィンドウの画面コピー (Alt-PrintScreen でコピーし貼り付け)
    ※ 最後の画像をコピーするために、最終テストでは Skip をしないでエピソードを終りまで実行させる必要がある。