我学习了一门机器学习课程,在那里我们学习了梯度下降 (GD) 和反向传播 (BP) 算法,它们可用于更新神经网络的权重,以及强化学习,特别是 Q-learning . 我分别实现了这些概念。
现在,我正在考虑使用神经网络来逼近 Q 函数,,但我真的不知道如何设计神经网络以及如何使用反向传播来更新这个神经网络(NN)的权重。
这个NN的输入和输出应该是什么?
如何使用 GD 和 BP 来更新这样的 NN 的权重?或者我应该使用不同的算法来更新权重?
我学习了一门机器学习课程,在那里我们学习了梯度下降 (GD) 和反向传播 (BP) 算法,它们可用于更新神经网络的权重,以及强化学习,特别是 Q-learning . 我分别实现了这些概念。
现在,我正在考虑使用神经网络来逼近 Q 函数,,但我真的不知道如何设计神经网络以及如何使用反向传播来更新这个神经网络(NN)的权重。
这个NN的输入和输出应该是什么?
如何使用 GD 和 BP 来更新这样的 NN 的权重?或者我应该使用不同的算法来更新权重?
在深度学习中,梯度下降(GD)和反向传播(BP)用于更新神经网络的权重。
在强化学习中,可以使用神经网络将(状态、动作)对映射到 Q 值。然后可以使用GD和BP来更新这个神经网络的权重。
在这种情况下,可以以不同的方式设计神经网络。下面列出了一些:
状态和动作被连接起来并馈送到神经网络。神经网络经过训练以返回属于前面提到的状态和动作的单个 Q 值。
对于每个动作,都有一个神经网络提供给定状态的 Q 值。当存在大量动作时,这是不可取的。
另一种选择是构建一个接受状态作为输入的神经网络。输出层包括- 单位是可能动作的数量。每个输出单元都经过训练以返回特定操作的 Q 值。
这是 Q-learning 更新规则
所以,我们选择一个动作(例如,与-贪婪行为政策)在该州. 一旦行动已被采取,我们最终处于一个新的状态并获得奖励与之相关联。为了执行更新,我们还需要选择 Q 值与动作相关的, IE. 这里,是折扣因子和是学习率。
如果我们使用神经网络将状态(或状态-动作对)映射到 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。