如何将神经网络中的反向传播和强化学习结合起来?

人工智能 神经网络 强化学习 dqn 深度学习 反向传播
2021-10-28 01:12:16

我学习了一门机器学习课程,在那里我们学习了梯度下降 (GD) 和反向传播 (BP) 算法,它们可用于更新神经网络的权重,以及强化学习,特别是 Q-learning . 我分别实现了这些概念。

现在,我正在考虑使用神经网络来逼近 Q 函数,(s,一个),但我真的不知道如何设计神经网络以及如何使用反向传播来更新这个神经网络(NN)的权重。

  1. 这个NN的输入和输出应该是什么?

  2. 如何使用 GD 和 BP 来更新这样的 NN 的权重?或者我应该使用不同的算法来更新权重?

2个回答

梯度下降和反向传播

在深度学习中,梯度下降(GD)和反向传播(BP)用于更新神经网络的权重。

在强化学习中,可以使用神经网络将(状态、动作)对映射到 Q 值。然后可以使用GD和BP来更新这个神经网络的权重。

如何设计神经网络?

在这种情况下,可以以不同的方式设计神经网络。下面列出了一些:

  1. 状态和动作被连接起来并馈送到神经网络。神经网络经过训练以返回属于前面提到的状态和动作的单个 Q 值。

  2. 对于每个动作,都有一个神经网络提供给定状态的 Q 值。当存在大量动作时,这是不可取的。

  3. 另一种选择是构建一个接受状态作为输入的神经网络。输出层包括ķ- 单位ķ是可能动作的数量。每个输出单元都经过训练以返回特定操作的 Q 值。

Q-learning更新规则

这是 Q-learning 更新规则

更新规则

所以,我们选择一个动作一个(例如,与ε-贪婪行为政策)在该州s. 一旦行动一个已被采取,我们最终处于一个新的状态s+1并获得奖励r+1与之相关联。为了执行更新,我们还需要选择 Q 值s+1与动作相关的一个, IE最大限度一个(s+1,一个). 这里,γ是折扣因子和α是学习率。

反向传播和 Q 学习

如果我们使用神经网络将状态(或状态-动作对)映射到 Q 值,我们可以使用类似的更新规则,但我们使用 GD 和 BP 来更新这个神经网络的权重。

这是一个可能的函数实现,它可以更新这种神经网络的权重。

def update(self, old_state, old_action, new_state, 
  reward, isFinalState = False):
 
  # The neural network has a learning rate associated with it. 
  # It is advised not to use two learning rates
  learningRate = 1
  
  # Obtain the old value
  old_Q = self.getQ(old_state, old_action)

  # Obtain the max Q-value
  new_Q = -1000000
  action = 0
  for a in self.action_set:
    q_val = self.getQ(new_state, a)
    if (q_val > new_Q):
      new_Q = q_val
      action = a  

  # In the final state there is no action to be chosen
  if isFinalState:
    diff = learningRate * (reward - old_Q)
  else:
    diff = learningRate * (reward + self.discount * new_Q - old_Q)

  # Compute the target 
  target = old_Q + diff

  # Update the Q-value using backpropagation
  self.updateQ(action, old_state, target)

在上面的伪代码和 Q-learning 更新公式中,可以看到折扣因子γ. 这只是表示我们是对立即的奖励感兴趣,还是对以后更有意义和更持久的奖励感兴趣。该值通常设置为 0.9。

你应该阅读这些论文:

两者都来自 DeepMind。他们在电子游戏和其他任务上取得了超人的成绩。他们很好地描述了算法。它不像前面的答案那么简单,它不会在复杂环境中收敛到一个策略。