「岩の上を歩く」という問題であるQラーニングを理解する

こんにちは、Habr! Lucas Vazquezの記事「Qラーニングの理解、崖のウォーキング問題」の翻訳に注目してください。









前回の投稿では、「岩の上を歩く」という問題を提示し、意味のないひどいアルゴリズムに落ち着きました。 今回は、この灰色のボックスの秘密を明らかにし、まったく怖くないことを確認します。







まとめ



将来の報酬の量を最大化することにより、目標への最速パスも見つけられると結論付けたため、現在の目標はこれを行う方法を見つけることです!









Qラーニングの概要





最適な「Qテーブル」には、各州で最高の行動を取ることができる値があり、最終的に勝つための最良の方法を提供します。 問題は解決されました、歓声、ロボット君たち:)。









最初の5つの状態のQ値。



Qラーニング





たとえば、ターゲットから1ステップ離れている(正方形[2、11])とし、下がった場合、-1ではなく0の報酬が得られるとします。

この情報を使用して、テーブル内の状態とアクションのペアの値を更新できます。次回アクセスしたときに、下に移動すると0の報酬が得られることが既にわかっています。









これで、この情報をさらに広めることができます! 正方形[2、11]からゴールへのパスがわかったので、正方形[2、11]につながるアクションも良好になります。したがって、正方形のQ値を更新し、[2、11]に導きます。 0に近づきます。







そして、それは皆さん、Qラーニングの本質です!







目標に到達するたびに、目標を達成する方法の「マップ」を1マスずつ増やすため、十分な数の反復の後、各状態から目標に到達する方法を示す完全なマップが得られることに注意してください。









パスは、すべての状態で最適なアクションを実行することにより生成されます。 緑色のキーはより良いアクションの意味を表し、飽和したキーはより高い値を表します。 テキストは、各アクション(上、下、右、左)の値を表します。



ベルマン方程式



コードについて説明する前に、数学について説明しましょう。Qラーニングの基本概念であるベルマン方程式です。













つまり、アクション値を1ステップずつ配布します。







しかし、現時点で報酬を受け取ることは、将来報酬を受け取ることよりも価値があると判断できるため、0から1(通常は0.9から0.99)の数字であるγに将来の報酬を掛けて、将来の報酬を割引します。







したがって、γ= 0.9を与え、これを世界のいくつかの状態(グリッド)に適用すると、次のようになります。











これらの値を上記のGIFの値と比較して、同じであることがわかります。









実装



Qラーニングがどのように機能するかを直感的に理解できたので、このすべての実装について考え始めることができます。 サットンの本のQラーニング擬似コードをガイドとして使用します。









サットンの本からの擬似コード。



コード:







# Initialize Q arbitrarily, in this case a table full of zeros q_values = np.zeros((num_states, num_actions)) # Iterate over 500 episodes for _ in range(500): state = env.reset() done = False # While episode is not over while not done: # Choose action action = egreedy_policy(q_values, state, epsilon=0.1) # Do the action next_state, reward, done = env.step(action) # Update q_values td_target = reward + gamma * np.max(q_values[next_state]) td_error = td_target - q_values[state][action] q_values[state][action] += learning_rate * td_error # Update state state = next_state
      
      







また、「最終状態のQの値はゼロです」と言います。最終状態ではアクションを実行できません。したがって、この状態のすべてのアクションの値はゼロと見なします。









「すべての条件で最も価値のある行動を取っていますか?







これを行う場合、Q値を使用してポリシーを作成します。 この場合、私たちは常にあらゆる州で最高の行動を取るため、貪欲な方針になります。したがって、私たちは貪欲に行動すると言われています。









ジャンク



しかし、このアプローチには問題があります。1つは+1で、もう1つは+100の2つの報酬がある迷宮にいると想像してください(1つを見つけるたびにゲームは終了します)。 私たちは常に最高だと考える行動をとるので、最初に見つかった賞にとどまり、常にそれに戻ります。したがって、最初に+1賞を認めると、大きな+100賞を逃します。









解決策



世界を十分に研究したことを確認する必要があります(これは驚くほど難しい作業です)。 これがεの出番です。 貪欲なアルゴリズムのεは熱心に行動しなければならないことを意味しますが、時間の経過に伴うεの割合としてランダムなアクションを実行するには、無限の試行ですべての状態を調べる必要があります。







アクションは、イプシロン= 0.1の12行目のこの戦略に従って選択されます。これは、世界で10%の時間を研究していることを意味します。 ポリシーの実装は次のとおりです。







 def egreedy_policy(q_values, state, epsilon=0.1): # Get a random number from a uniform distribution between 0 and 1, # if the number is lower than epsilon choose a random action if np.random.random() < epsilon: return np.random.choice(4) # Else choose the action with the highest value else: return np.argmax(q_values[state])
      
      





最初のリストの14行目で、stepメソッドを呼び出してアクションを完了します。世界は次の状態、報酬、ゲームの終了に関する情報を返します。







数学に戻る:







長い方程式があります。考えてみましょう。











α= 1を取る場合:











これは、数段落前に見たベルマン方程式と完全に一致します! したがって、これが状態値に関する情報を広める役割を果たしていることはすでにわかっています。







しかし、通常、α(ほとんどは学習速度として知られています)は1未満です。その主な目標は、1回の更新で大きな変更を避けることです。そのため、目標に飛び込むのではなく、ゆっくりとアプローチします。 表形式のアプローチでは、α= 1を設定しても問題は発生しませんが、ニューラルネットワークを使用する場合(これについては以下の記事で詳しく説明します)、すべてが簡単に手に負えなくなります。







コードを見ると、最初のリストの16行目でtd_targetを定義したことがわかりますが、これは近づくべき値ですが、17行目でこの値に直接移動する代わりに、td_errorを計算し、この値を速度と組み合わせて使用​​しますゆっくりと目標に向かって進むことを学ぶ。







この方程式はQラーニングエンティティであることを忘れないでください。







状態を更新するだけで、すべての準備が整いました。これは20行目です。エピソードの終わりに達するまで、岩で死ぬか、目標に達するまで、このプロセスを繰り返します。









おわりに



Q-Learning(少なくとも表形式のバージョン)をエンコードする方法を直感的に理解し、知っています。GitHubで利用できるこの投稿に使用されいるすべてのコードを確認してください。







学習プロセステストの視覚化:









すべてのアクションは、その最終的な値を超える値で始まることに注意してください。これは、世界の探索を刺激するトリックです。








All Articles