Qラーニング

Qラーニングと呼ばれる最初の強化学習(RL)アルゴリズムについて説明します。

Qラーニングの考え方は、ゲームの「チートシート」を学ぶことです。そうすることで、エージェントは各ステップで実行する最善のアクションを知ることができます。

DSS RLプラグインを使用して、FrozenLakeゲームのやり方を、エージェントに学習させます。

準備

https://github.com/dataiku/dss-plugin-reinforcement-learning のgitリポジトリから強化学習プラグインをインストールします。インストールの一部として、プラグインのコード環境を必ず構築してください。

Qラーニングの概要

ここでは、Qラーニングの概要を説明します。Qラーニングとは何か、そしてそれがどのように機能するかを理解するために、例から始めましょう。

騎士と王女

あなたが騎士であり、次の地図に示されている城に閉じ込められた王女を救う必要があるとしましょう。

敵は移動できませんが、一度に1つのタイルを移動できます。ただし、敵と同じタイルに移動すると死にます。

あなたの目標は、可能な限り最速のルートで城の王女を救うことです。これは、「ポイントスコアリング」システムを使用して評価できます。

  • 各ステップで-1を失います(各ステップでポイントを失うと、エージェントが高速になります)。
  • 敵に触れると-100ポイントを失い、エピソードは終了します。
  • あなたが城にいる場合、あなたは+100ポイントを獲得し、あなたは勝ちます。

問題はこれです:勝つことができるエージェントをどのように作成しますか?

1つのアプローチは、エージェントが各タイルに移動して(環境を探索)、各タイルに色を付けることです。緑は「安全」、それ以外の場合は赤です。

同じ地図ですが、どのタイルに安全にアクセスできるかを示すために色が付けられています

次に、エージェントに緑色のタイルのみを取るように指示できます。

ただし、このアプローチはあまり役に立ちません。緑のタイルが隣接している場合に最適なタイルはわかりません。したがって、私たちのエージェントは城を見つけようとすることで無限ループに陥る可能性があります!

Qテーブルの導入

最初のアプローチはあまり役に立たないので、2番目のアプローチを考えてみましょう。各タイルにいくつかの価値を割り当てることを検討してください。価値は、状態でのアクションの最大の予想される将来の報酬になります。つまり、価値は、特定の状態で開始し、その状態で特定のアクションを実行した場合に得られる報酬の合計を表します。

この2番目のアプローチを使用すると、最も高い価値を取得するだけで、状態に対して実行する最適なアクションを決定できます。

各状態(タイル)では、4つの可能なアクションが可能です。これらのアクションは次のとおりです。左、右、上、または下に移動します。

0は不可能な動きを表します。たとえば、左上隅にいる場合は、左または上に移動することはできません。

計算のために、このグリッドをテーブルに変換してみましょう。このテーブルはQテーブルと呼ばれます。「Q」は、アクションの「品質」に由来します。

次の図に示すように、列を4つのアクション(左、右、上、下)として表すことにより、Qテーブルを作成し、行は状態になります。

各Qテーブルのスコアは、その状態でそのアクションを実行した場合に得られる、予想される最大の将来の報酬になります。

このQテーブルをゲームの「チートシート」と考えてください。この「チートシート」のおかげで、各状態(Qテーブルの各行)で最も高いスコアを見つけることにより、その行で実行する最善のアクションを決定できます。

このQテーブルの価値を学習するために、DSSでQ学習アルゴリズムを使用します。このアルゴリズムは、環境を探索することにより、時間の経過とともに各状態の価値を更新します。

DSSによるQ学習

Qラーニングとは何かを理解したので、RLプラグインを使用して、DSSでFrozenLakeゲームをプレイするようにエージェントをトレーニングします。

このゲームの目標は、凍ったタイル(F)だけを歩き、穴(H)を避けて、開始状態(S)から目標状態(G)に移行することです。ただし、氷は滑りやすいため、(確率的環境をモデル化するために)意図した方向に常に移動するとは限りません。

プロジェクトを作成し、フォルダを準備します

新しいプロジェクトを作成し、次のような名前を付けます。

Q Learning with DSS

フローに2つのフォルダーを作成します。+Dataset dropdown から、Folder を選択します。

フォルダに名前を付けます。

  • Saved Models レーニング情報を含むJSONを保存するフォルダ
  • Saved Replays テスト情報を含むJSONを保存するフォルダ

エージェントを定義してトレーニングする

+Recipe ドロップダウンから、Reinforcement Learning > Train を選択します。

Recipe ボックスから、Saved Models を、“Saved Models” フォルダとして選択します。次に、Create Recipe をクリックします。

[トレーニング]ダイアログでは、多くのハイパーパラメータにアクセスできます。ハイパーパラメータは、学習アルゴリズムを適用する前に設定する必要のある変数です。

まず、エージェントが対話するenvironmentを選択します。

  • 「Environment library」で「OpenAI gym」を選択します。
  • 「Environment」には、FrozenLake v0を選択します。

次に、agent を選択します。(この場合はQ-Learning Agent)

  • 「Agent」には、Q-Learningを選択します。

学習パラメータとして、以下の値を設計します。

  • “Discount factor” 0.95. このハイパーパラメータにより、エージェントの長期的な報酬の大小を設定します。
  • “Learning Rate” 0.8.
  • “Total training episodes” 5000.
  • “Max steps per episodes” 99.

探索パラメーターには、探索/利用の値を設定します。

  • “Epsilon” 1. イプシロンは、探索パラメータです。
  • “Max Epsilon” 1
  • “Min Epsilon” 0.05
  • “Decay Rate” to 0.005. このハイパーパラメータは、イプシロンが最小値に達するまで、各エピソードでイプシロンが減少する速度を定義します。

Run をクリックして、エージェントの学習を開始します。

エージェントのテストをする

エージェントの訓練が終わったので、性能をテストします。+Recipe をドロップダウンメニューからクリックし、 Reinforcement Learning > Test を選択します。

レシピダイアログから、 Saved Models を “Saved Models” として選択します。そして、Saved Replays を、m “Saved Replays” フォルダとして、Create をクリックします。

Testing ウィンdーで、次の値を設定します。

  • “Environment library”  OpenAI Gym.
  • “Environment” FrozenLake v0.
  • “Agent”  Q-learning.

Run をクリックします。

テスト結果を表示する

これで、RLWebアプリを使用してテスト結果を視覚化できます。

コードメニュー > Webapps から、+New Webapp > Visual Webapp > RL Agent Testing Results を選択します。

ウェブアプリに、名前をつけて、Create をクリックします。

次に、テスト用 JSON ファイルのある Reply Folder を選択します。

Save and View webapp をクリックする。

これで、平均スコア(この場合、これは成功したテストエピソードのパーセンテージです)とトレーニングハイパーパラメーターを確認できます。

結論

Q-Learningを使用してFrozenLakeのプレイ方法を学習するエージェントをトレーニングしました。平均テストスコアは60から80の間でなければなりません。

次に、ハイパーパラメータを変更して、より良い結果が得られるかどうかを確認します。

他の環境で試してみてください(たとえば、8×8タイルのFrozen LakeやTaxi-v3などのより難しい環境を使用してください)。ハイパーパラメータを変更してみてください。

次は、2015年のDeep ReinforcementLearningの最も重要なブレークスルーの1つであるDeepQ-learningに取り組みます。また、Cartpoleゲームのプレイを学習するエージェントをトレーニングします。