全3204文字
PR

 前回に続き、Scratchのゲームプログラム「砂漠でダイヤ集めゲーム」を使って「L1-Q学習」(強化学習の問題を単純化した場合のQ学習)の仕組みを見ていきましょう。今回は「行動選択」と「学習」のコードについて説明します。

行動選択

 行動選択のコードは、「(行動を選んで)を受け取ったとき」から始まります。

L1-Q学習の行動選択のコード
[画像のクリックで拡大表示]
L1-Q学習の行動選択のコード

 このメッセージ「行動を選んで」は司令塔として働いている「ステージ」のメインループから送られてきます。この行動選択のコードは、少し構造が入り組んでいるので、分解したコードを眺めてみましょう。

分解した行動選択のコード
[画像のクリックで拡大表示]
分解した行動選択のコード

 上のコードの初めの(A)は「もし((強化学習中)=(1))なら」というブロックですが、行動選択のメインのコードは、その内側の(B)になります。この「もし(〇〇)なら」というオレンジのコードブロックは「制御」グループにあります。(〇〇)の部分が正しいときに内側のコードを実行する、という機能を持っています。

 「((強化学習中)=(1))」の「=」を表す緑色の部分は、「演算」グループにあるコードブロックであり、式が正しいか正しくないかを判定します。これらのブロックの働きによって、「強化学習中」という変数の中身が1のときのみ、コード(B)が実行されるのです。

 この「強化学習中」という変数の意味を説明します。ゲームは、あなたがプレイするときと、強化学習がプレイするときの二つの場合があります。これをプログラム内で区別するために使っているのが「強化学習中」という変数です。

 あなたがプレイするときには「強化学習中」に0が入り、強化学習がプレイするときには1の値が入るようになっています。つまり、強化学習がプレイするときのみ(B)のコードが実行されることになります。この形は、次に説明する学習のコードでも同じです。

 では、行動選択の一番核心となる上の(D)のコードを見てみましょう。行動選択の仕事は、変数「行動」に1または2を入れることです。1は左を選んだこと、2は右を選んだことに対応します。(D)は、「左と右の報酬予測を比べ、大きい方の行動を選ぶ」という働きをしています。

 次に、(C)のコードの説明です。ゲーム開始時の報酬予測は適当に設定していますので正しくありません。このため、(D)のコードでのみ行動を選んでいると誤った行動を選び続けてしまう可能性があります。そこでランダムに選ぶという別の行動選択がこのコードでできるようになっています。