ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

強化学習: Q Learningを理解する

[technology]Q Tableの更新に使う評価関数の意味

Q Learningを絶賛お勉強中です。
下記のサイトを参考にしながら自分でPythonでScript動かして、Q Learningが「状態xアクションでテーブルを作り、そこに各アクションを取った結果の良し悪しを評価値として実際に試行錯誤を繰り返しながら書き込んでいく。学習が進んだら、各状態毎に一番高い評価値を持つアクションを選択すると、上手く目的の制御だったりゲームが出来る様になる」と理解しました。

deepage.net
NumPyで強化学習を実装する - DeepAge
blog.brainpad.co.jp

しかし、やはりちょっと解りにくいな?と思ったのは以下のQ Tableの評価式。

Q(st,at) = (1 - α)Q(st,at) + α(rt+1 + γmaxat+1Q(st+1,at+1) )

あるいはpythonのコードで以下の様になっているところ。


q_table[state, action] = (1 - alpha) * q_table[state, action] +\
alpha * (reward + gamma * q_table[next_state, next_action])

次の時刻t+1の状態のアクションの評価値のMAXの値を現時刻tに一定の割引率で反映しているのですが(上記の式の赤書きのところ)、この意味がすっと頭に入り難いなと思いました。
理解してみれば納得で、上記のサイトの説明もするする頭に入るのですが、初見の人はなかなか判らないんじゃなかろうか?

というわけで、非常に単純な壁打ちゲームのイメージで以下の様な絵を描いてみました。

時刻tにおいて取れるアクションはラケットを左に動かすか、右に動かすか?という2択です。(動かさないという選択肢もあって良いのですが、簡単化のために2択にします)

とりあえず次の時刻にボールがコートに残っていればrewardは+1、ボールがコート外に出たらrewardは-100(失敗)とすると、時刻tの状態Saでは、アクションとして左、右どちらをとっても次の時刻t+1ではまだボールがコート内に留まっています。
従って、どちらのアクションでもrewardは+1です。
しかし、アクション左を取って、状態Sbに行くと、更に次の時刻t+2ではラケットを左、右どちらに動かしてもボールを拾いそこねてコート外に出てしまいます。
もし状態Sbを過去に何度か試行してれば、状態SbのQ-Tableは以下の様な感じになっているはずです。

状態アクション左アクション右
Sb-100-100
一方で状態Scの方はラケットを更に右に動かせば次の時刻t+1でボールを打ち返せるので、状態ScのQ-Tableのアクション右の評価値は既に何度か試行した後であれば、少なくともプラスの値になっているはずです。
状態アクション左アクション右
Sc???10
状態SaからのSbとScを眺めてみると、どちらに行っても即ボールがアウトにはなりませんが、Sbは更に次の時刻には確実にアウトになるので、Sbに行くことを避けなければなりません。Saのアクション左の評価値を更新する場合、Sbのテーブルの評価値を反映すれば、action左の評価が低くなり、悪い結果に繋がる選択を排除できます。最初はランダムにそして、徐々にQ-Tableの評価値に従って各アクションの評価値を更新する際に、次の時刻のアクションの評価値を反映することで、良い評価と悪い評価がそれぞれ状態間で繋がっていき、悪い方に行きやすい状態への遷移を避けられる様になる...というのが自分の理解です。

うーん、書いてみたけど、文章にするとあんまり判りやすく無いですね....

追記:
結局のところQ-Learningって、とにかくたくさんアクションを試して、その結果、良かったか悪かったをそのアクションへの評価としてテーブルにどんどん書いていく。十分に経験を積んだら、後は状態毎に一番評価の高いアクションを常に選択するって感じなんですよね。 学習を効率化、安定化するところには色々なギミックや工夫があるのでしょうが、大雑把な仕掛けとしては無茶苦茶シンプルだなあ...というのが感じたところ。 エージェントは環境については予備知識をもたず、与えられた報酬だけでアクションを評価...つまり制御対象を何も理解していない...にも関わらず有用な結果が出る。

人間を打ち負かすのは超知性なんかじゃなくて、圧倒的な単純作業の蓄積だってところが、あまり世間一般の人には理解されていないだろうなあ。

日本だと大手の電機メーカーとかIT企業でも、理解している人は極一部な気がします。