用Keras模型进行强化学习

时间:2018-10-27 02:26:14

标签: python keras deep-learning reinforcement-learning q-learning

我试图在Keras中实现q学习算法。根据文章,我发现了这些代码行。

for state, action, reward, next_state, done in sample_batch:
        target = reward
        if not done:
            #formula
          target = reward + self.gamma * np.amax(self.brain.predict(next_state)[0])
        target_f = self.brain.predict(state)
        #shape (1,2)
        target_f[0][action] = target
        print(target_f.shape)
        self.brain.fit(state, target_f, epochs=1, verbose=0)
    if self.exploration_rate > self.exploration_min:
        self.exploration_rate *= self.exploration_decay

变量sample_batch是一个数组,其中包含来自收集到的数据的样本state, action, reward, next_state, done。 我还发现了以下q学习公式Formula

为什么等式(代码)中没有-符号?我发现np.amax返回数组的最大值或沿轴的最大值。当我打电话给self.brain.predict(next_state)时,我得到[[-0.06427538 -0.34116858]]。那么它在这个方程中扮演了预测的角色吗?在前进的过程中,target_f是当前状态的预测输出,然后我们还将在这一步骤中附加奖励。然后,我们在当前的stateX)和target_fY)上训练模型。我有几个问题。 self.brain.predict(next_state)的作用是什么,为什么没有减号?为什么我们对一个模型进行两次预测?例如self.brain.predict(state) and self.brain.predict(next_state)[0]

1 个答案:

答案 0 :(得分:3)

  

为什么没有-在方程式(代码)中签名?

这是因为损失计算是在fit函数中完成的。

reward + self.gamma * np.amax(self.brain.predict(next_state)[0])

这与损失功能中的 target 组件相同。

在拟合方法中,将按以下给出的方法计算喀拉斯损失。 对于单个训练数据点(神经网络的标准符号),

x = input state

y = predicted value

y_i = target value

loss(x) = y_i - y

在此步骤中,目标-预测在内部进行。

  

为什么我们要对一个模型进行两次预测?

好问题!!!

 target = reward + self.gamma * np.amax(self.brain.predict(next_state)[0])

在此步骤中,我们将预测下一个状态的值,以便在采取特定操作a(表示为Q(s,a))的情况下为状态s计算目标

>
 target_f = self.brain.predict(state)

在此步骤中,我们将计算可在状态s下执行的每个操作的所有 Q值

target = 1.00    // target is a single value for action a
target_f = (0.25,0.25,0.25,0.25)   //target_f is a list of values for all actions

然后执行以下步骤。

target_f[0][action] = target

我们仅更改所选操作的值。 (如果我们执行操作3)

target_f = (0.25,0.25,1.00,0.25)  // only action 3 value will change

现在target_f将是我们试图以正确形状进行预测的实际目标值