0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++で始める強化学習[Q学習](前編)

Posted at

はじめに

AIの進化が著しい昨今ですが、その技術や実装がどのようなものか、恥ずかしながら僕には見当がつきません。
今更ながら「機械学習はどのような作りになっているのか」、「AIを自作することは可能なのか」と気になり、軽い気持ちで本記事を書いてみました。
今回はQ学習について概要までにとどめ、次回でC++による実装とともに詳細に触れていきたいと思います。
素人の初学者のため、記事に誤りがあるかもしれません。
もし、間違いに気づかれた方がおりましたら、お手数ですがご指摘いただけますと幸いです。

強化学習

機械学習の実装について興味を持った理由をもう少し話しますと、僕は将棋が好きなのですね。
将棋をよく観る方はご存知でしょうが、AIが盤面状態から形勢を判断し、次の一手の候補手を提示し、その手を指すと形勢がどう変動するかまで表示してくれます。
それを見て「AIを自作できれば、常に自分と互角の手を指す将棋相手ができるんじゃね?」と思ったのです(既にそのようなAI将棋ソフトは出ているようですね)。

そして、「将棋に適した機械学習は何だろう?」と思い、最初に目を付けたのが強化学習です
(実際には様々な学習を組み合わせているのでしょうが、いきなりそこまでは踏み込めません)。

強化学習とは何か。その概念は昔からあるようです。

スキナー箱の実験が有名でしょうか。
レバーを押すと餌が出る仕掛けを用意した箱の中にネズミを入れます。
やがてその仕掛けに気づいたネズミは頻繁にレバーを押すようになっていきます。
最終的には餌が出なくなっても、レバーを押し続けるという。

近代的な例としては。
とある男が「有償ガチャ」ボタンを押すとSSR「俺の嫁」をゲットできることに気が付きます。
男は延々とガチャボタンを押し続けたという、、、血の涙を流しながら...。

上記の例のように「行動の結果に報酬を付与し、特定の行動を強化する」、この仕組みを強化学習と呼びます。

Q学習

Q学習は強化学習の手法の一つです。
Q学習のアルゴリズムをC++に書き起こしていく前に、予備知識として用語や学習手順の理解から入りたいと思います。

用語

環境:Q学習を行う世界です。前述の「スキナー箱」が環境に該当します。
状態:環境の現在の状況です。将棋でいえば、盤上の駒配置や持ち駒はどのようなものか、を指します。
行動:状態に対してどのように振る舞うかです。例えば、株価の高騰状態で買増/売却/静観などを選択することです。
エージェント:行動を選択し、学習する人(※1)を指します。
報酬:行動によって得られる数値です。適切な行動を選択すれば+100点、致命的な行動であれば-100点など。
政策(ポリシー):行動を選択するためのルールです。ランダムに行動し学習の幅を拡げたり、現在の学習状態から最適な行動を選択し強化する、などの方針です。
学習率:学習の速度です。数値が高ければ新しい学習を高く評価し、低ければ長期間で安定的に学習を進めていきます(※2)。
Q値:強化された行動、価値の高い行動の指標となります。状態に対して行動を選択する度に、長期的・将来的に最も価値が高い行動に結びつくよう更新されます。

※1:「人」と表現しましたが、人間(や動物)とは限りません。次回の例で取り扱う予定ですが、行動を選択するのはプログラムです。この場合、エージェントは「プログラム」ということになります。
※2:人はギャンブルで負けているにも関わらず、なぜ依存してしまうのか。勝ったときの学習率が高く、負けたときの学習率が低いからなのですね、きっと。

学習手順

用語の列挙により、Q学習に登場する要素が分かりました。
次はこれらの要素をどのように扱い、学習を進めていけばいいのか。
学習手順は下記の2つのサイトを参考にしております。

はじめての強化学習〜Q-learningで迷路を解く〜
強化学習手法の一つ「Q学習」をなるべくわかりやすく解説してみた

両者ともに下記の手順で学習を進めています。
両サイトの記述を見比べていたところ、手順としてはほぼ差がないのですが、実際の処理レベルでは微妙な差(詳細は次回に触れます)がありました。

  1. 報酬の設定
  2. Q値を初期化
  3. 状態を初期状態にセット
  4. エージェントの行動を選択
  5. Q値を更新
  6. ゴール到達まで4と5を繰り返す
  7. Q値がいい感じになるまで3に戻る

ここまでの予備知識を頭に入れた段階で、ようやく「無限のリソースがなければ将棋の学習は無理だ」となりました。
9x9の盤面に40の駒の配置パターンすべてを状態として網羅し、さらに、すべての次の一手を行動として評価する必要があります。
個人のPCのリソースで実装できる範疇を余裕で振り切っていますね。

準備

言葉だけの説明ではピンと来ませんし、学習の手順を実装したとしても、その経過や結果が目に見えなければ体感につながりません。
前述の学習手順を参考にしたサイトは、奇しくも両方が迷路探索を取り扱っていました。
「迷路は初学者でも理解しやすい」とのことですので、それに倣いまして、ここでも迷路探索を扱おうと思います。

迷路の生成

Q学習の環境となる迷路は「棒倒し法」で生成します。
この手法では最短経路が一意となりますが、複数ある場合の学習も気になりますので、少しアレンジを加えたパターンも用意します。

001.jpg

学習の可視化

一つの迷路に対して、二つのQ学習手順によるQ値を可視化します。

002.jpg

また、学習の結果として、Q値に従うとどのような経路をたどるかも可視化します。

003.jpg

次回予告

環境(迷路)を生成し、Q値を可視化し、学習結果で得られた経路も可視化され、これで準備が整いました。
次回はQ学習の学習手順と、そのサンプルコード、Q値を並べ、詳細に触れていきたいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?