Python 深度Q学习:关于反向传播的问题

Python 深度Q学习:关于反向传播的问题,python,machine-learning,deep-learning,openai-gym,q-learning,Python,Machine Learning,Deep Learning,Openai Gym,Q Learning,我正试图为OpenAI健身房的CartPole v0问题创建一个强化学习神经网络。我知道,为了找出神经网络的误差,我必须从贝尔曼方程中计算出目标Q值,然后从神经网络输出的Q值中减去目标Q值。但这不是只给了我一个输出的错误吗?例如,如果我的网络输出两个Q值[A=.2,B=.8],那么选择的动作将是B,因为它有一个更大的Q值。然后,使用贝尔曼方程,我可以在找到下一个状态后,计算动作B的目标Q值。如果要选择动作A,我们不知道下一个状态,如何找到A的目标值 这是我的反向传播代码: 它从大小为32的随机小

我正试图为OpenAI健身房的CartPole v0问题创建一个强化学习神经网络。我知道,为了找出神经网络的误差,我必须从贝尔曼方程中计算出目标Q值,然后从神经网络输出的Q值中减去目标Q值。但这不是只给了我一个输出的错误吗?例如,如果我的网络输出两个Q值[A=.2,B=.8],那么选择的动作将是B,因为它有一个更大的Q值。然后,使用贝尔曼方程,我可以在找到下一个状态后,计算动作B的目标Q值。如果要选择动作A,我们不知道下一个状态,如何找到A的目标值

这是我的反向传播代码:

它从大小为32的随机小批量中学习

delta_目标是所选操作的错误

delta_1是神经网络输出层的误差(仅2个输出)

我将未选择操作的错误设置为零(应该设置为什么??)

def replay(self, b_size):
    mini_batch = random.sample(self.memory, b_size) 

    for c_state, c_action, c_reward, n_state, n_done in mini_batch:
        target = c_reward
        if not done:
            target = (c_reward + self.gamma * np.amax(self.predict(n_state)))
        delta_target = self.predict(c_state)[action] - target
        self.learn(delta_target, c_action)

    if self.epsilon > self.epsilon_min:
        self.epsilon *= self.epsilon_decay

def learn(self, d_target, act):

    delta_1 = np.zeros((self.action_size, 1))
    delta_1[act] = d_target
    delta_0 = np.dot(web.weight[1].T, delta_1)

    web.weight[1] -= self.alpha * web.layer[1].T * delta_1
    web.weight[0] -= self.alpha * web.layer[0].T * delta_0

    web.bias[2] -= self.alpha * delta_1
    web.bias[1] -= self.alpha * delta_0