【苦しみながら理解する強化学習】チュートリアル その4-0

ようやく手を動かせそうなところに来た。

Reinforcement Learning with Tensorflowをやってく!

今回はPart 0: Q-Learning with Tables and Neural Networks

概要

Instead of starting with a complex and unwieldy deep neural network, we will begin by implementing a simple lookup-table version of the algorithm, and then show how to implement a neural-network equivalent using Tensorflow.

Unlike policy gradient methods, which attempt to learn functions which directly map an observation to an action, Q-Learning attempts to learn the value of being in a given state, and taking a specific action there.

うーん、Q-Learningとはなんだったか?

方策オフ型TD制御

ここで言いたかったのは、行動からマッピングする関数を学習する方策オン型とは異なり、Q-Learningは状態から価値を学習し、行動を取るということだったのだろう…

アタリのゲームもQ-Learningですよと。

このチュートリアルではOpenAI gymFrozenLakeを解く。

The FrozenLake environment consists of a 4×4 grid of blocks, each one either being the start block, the goal block, a safe frozen block, or a dangerous hole. The objective is to have an agent learn to navigate from the start to the goal without moving onto a hole.

実装方法。

In it’s simplest implementation, Q-Learning is a table of values for every state (row) and action (column) possible in the environment.

we have 16 possible states (one for each block), and 4 possible actions (the four directions of movement), giving us a 16×4 table of Q-values.

Bellman equationでテーブルをアップデートする。

これは、長期的な状態の価値と、直近の価値に次に最善の行動をとったときの価値を加えたものが等しいとしている。

この方法だとテーブル(Q-table)を将来の価値を予測するために再利用できる(どういう意味だ?)

Bellman equation

This says that the Q-value for a given state (s) and action (a) should represent the current reward (r) plus the maximum discounted (γ) future reward expected according to our own table for the next state (s’) we would end up in.

The discount variable allows us to decide how important the possible future rewards are compared to the present reward.

コード例

gymのdocumentationは見ておいた方がよいですね!
というか、gymってこうやって使えるの簡単…

環境の読み込みはこれで完結!
もちろんその前にはpip install gymをしておきましょう!

FrozenLakeの説明も載せておきます!

The FrozenLake environment consists of a 4×4 grid of blocks, each one either being the start block, the goal block, a safe frozen block, or a dangerous hole. The objective is to have an agent learn to navigate from the start to the goal without moving onto a hole. At any given time the agent can choose to move either up, down, left, or right. The catch is that there is a wind which occasionally blows the agent onto a space they didn’t choose. As such, perfect performance every time is impossible, but learning to avoid the holes and reach the goal are certainly still doable. The reward at every step is 0, except for entering the goal, which provides a reward of 1. Thus, we will need an algorithm that learns long-term expected rewards. This is exactly what Q-Learning is designed to provide.

ここでenvは、env.observation_space.nenv.action_space.n
コンソールでやってみると、

となるので、observation_spaceは状態の数、action_spaceは行動の数を返すんでしょう、おそらく。

なので、

は、

となるので、16x4の二次元行列を作成しています。
パラメータは以下の通り

行動(a)の決定。
Qテーブル内からノイズを含めた(グリーディな)選択を行う。

これだと、エピソードのカウントが増える度にノイズ部分が小さくなるようにしている(1./(i+1))のは、徐々にグリーディでなくならせようとしているのか…な…?

ここで再度エピソードとステップをしっかり把握!

一番上のパネルがインフォメーションパネルです。スライムがスタートからゴールへたどり着くまでが1エピソード(Episode)です。エピソードを何回も繰り返すことによって学習が進みます。ステップ(Step)は1エピソード内でスライムが何ステップ(歩)で迷路を抜けられるかを表しています。

しかし、このやり方だとaが少数にならないかな?

numpyのargmaxは最も高かったindexを返すので、少数にはならないんだよ!
謎は…解けた…

そして

step関数がめちゃ便利。
step関数はactionを入れることで、以下の4つを返す。

便利かよ!

ここで、Q関数のアップデートをする。

rAllで全部報酬を足して、sを次にアップデートをする。
で、これでループ回して

最終的に、全報酬を全エピソード数で割る。
なんかわかってきましたよね!w

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です