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

今回は、Part 3 - Model-Based RL

概要

パート2がpolicy based、今回がmodel basedですね!
と思ったが、今回もpolicy basedも使っています。

model_based

In this case, a model is going to be a neural network that attempts to learn the dynamics of the real environment.

モデルがneural networkになる…

For example, in the CartPole we would like a model to be able to predict the next position of the Cart given the previous position and an action.

CartPoleで予測ができるのか。

With such a model, an agent can ‘imagine’ what it might be like to move around the real environment, and we can train a policy on this imagined environment in addition to the real one.

モデルの方が、学習がスムーズにいくのかね。

Our training procedure will involve switching between training our model using the real environment, and training our agent’s policy using the model environment.
By using this approach we will be able to learn a policy that allows our agent to solve the CartPole task without actually ever training the policy on the real environment!

物理エンジンの環境でエージェントのポリシーを学習することから、リアルな環境でモデルを学習することに切り替えた!
その結果、私達は、ポリシーの学習をすることなく、ポリシーを学習することができるのですぅ!

ここで再度、何をやっている(言っている)のか確認したい。

  • 方策:現在の状態から可能な行動を選択する確率。
  • モデル学習:モデルの改良(そのまま)。実際の環境により正確に適応できるように。

なので、ここまでのところ、行動の報酬を計算して、最適報酬を選択するように学習させてたけど、ここでは、方策の代わりにモデルを学習させるから、学習がスムーズにいくんだと解釈した。
コードを見よう。

コード例

Setting Hyper-parameters

model_bs = 3 # Batch size when learning from model
real_bs = 3 # Batch size when learning from real environment

このあたりがどういう使われ方をしているか確認したいですね…

Policy Network

tf.get_variableってfind_or_createなんですね。

Gets an existing variable with these parameters or create a new one.

tf.matmul

Multiplies matrix a by matrix b, producing a * b.

tf.contrib.layers.xavier_initializer()

Returns an initializer performing “Xavier” initialization for weights.

Xavier initializationに関してはこちらです!

ここがpolicyなのか。
ウェイト付けがメインな感じ。

この辺りで定義しているplaceholderは、のちほど、sess.runのときのfeed_dictで与えられるんだ!
もう忘れないぜ!

Model Network

そして、ここでニューラルネットを作る。

variable_scopeはなぜ使われているのか…イマイチわからん…

with tf.variable_scope('rnnlm'):
    softmax_w = tf.get_variable("softmax_w", [mH, 50])
    softmax_b = tf.get_variable("softmax_b", [50])

tf.variable_scopeは奥が深かったのですが、

softmax_wsoftmax_bもどこにも使われていないのんですが、これはどういう…
なんならその上にある

input_data = tf.placeholder(tf.float32, [None, 5])

も使われておらず、コードの消し忘れと判断します…

ここでは2層だけなんですね。

Helper-functions

np.hstackは結合だったのか…

np.clipは、範囲外のものを変更するメソッド。

Training the Policy and Model

numpyの:はここがわかりやすい。

あとは、結構分岐はあるが学習しているところ。

モデル学習と実際の環境からの学習の違い

        # step the  model or real environment and get new measurements
        if drawFromModel == False:
            observation, reward, done, info = env.step(action)
        else:
            observation, reward, done = stepModel(sess,xs,action)

ここでいう、実際の環境からの学習というのはgym環境からということで、env.stepを使っている。

In Part 4 I will be exploring how to utilize convolutional networks to learn representations of more complex environments, such as Atari games.

コメントを残す

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