【苦しみながら理解するReinforcement Learning】チュートリアル その4-1.5

今回は、Part 1.5: Contextual Bandits

概要

In that situation (part 1), there are no environmental states, and the agent must simply learn to choose which action is best to take.

Specifically, in this post I want to show how to solve problems in which there are states, but they aren’t determined by the previous states or actions.
Additionally, we won’t be considering delayed rewards. All of that comes in Part 2. This simplified way of posing the RL problem is referred to as the Contextual Bandit.

この図は、いまやっていることが整理される。
特に注釈がよいですね。

contextual_bandit

Contextual Bandit

ここまできて、ようやく気づいたけど、あんまりやっていることがわかっていない。
n本腕のバンディットなら、どれを回せばrewardが最も高くなるかという問題だったが、ここでは何が問題なのか…?
そして、なぜstateがここに来て必要とされるのか?

答えはこうだ!
大いなる勘違いの源泉は、シングルバンディット問題をスロットマシンが1台だけあると考えていたことにある。
ここでは、n本腕のバンディット問題と同様に複数台のスロットマシンが存在する。
異なる点は、ここではどれか一台の腕しか引けないということだ(n本腕のバンディットでは全部引いて一番高いやつを学習していた)。
そのため、1本腕を引いた後にactionだけでは評価することができないので、stateを持ち込み、1本腕を引いた影響を考えるということだ!
(たぶんね!)

コード例

The Contextual Bandits

Here we define our contextual bandits. In this example, we are using three four-armed bandit. What this means is that each bandit has four arms that can be pulled.

ま、マジか…
4本腕のバンディットを3台。

classも小文字が普通なのかね?

The Policy-Based Agent

one_hot_encodingは次のようにどれに分類されるかを返してくれます!

slim.one_hot_encodingは[1, 0, 2]といった配列を、[[0, 1, 0], [1, 0, 0], [0, 0, 1]]のような形式の行列に変換します。

biases_initializer=None,activation_fn=tf.nn.sigmoid,weights_initializer=tf.ones_initializer())

ここで、ネットワークを定義しているのですが、zero_initializerではなく、ones_initializerであるのは、どういう使い分け何だろう…

reshape-1にしているのは、1次元にしているんですね!そして、argmaxするという。

reshape(t, [-1]) ==> [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6]

Training the Agent

We will train our agent by getting a state from the environment, take an action, and recieve a reward.

tf.trainable_variables()は、

Returns all variables created with trainable=True.
らしいですね。

sess.runいつも忘れるけど、1つ目の引数を計算するように、feed_dictで値を渡しているということですね。

コメントを残す

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