【问题标题】:Setting up target values for Deep Q-Learning设置深度 Q 学习的目标值
【发布时间】:2020-02-21 20:37:04
【问题描述】:

对于结合神经网络的标准 Q-Learning,事情或多或少都很容易。 一个人在与环境交互过程中存储(s,a,r,s')并使用

target = Qnew(s,a) = (1 - alpha) * Qold(s,a) + alpha * ( r + gamma * max_{a’} Qold(s’, a’) )

作为神经网络逼近 Q 函数的目标值。所以ANN的输入是(s,a),输出是标量Qnew(s,a)。深度 Q 学习论文/教程改变了 Q 函数的结构。现在应该为状态 s 提供所有可能动作的 Q 值,而不是为对 (s,a) 提供单个 Q 值,所以它是Q(s) 而不是 Q(s,a)

我的问题来了。用 (s,a,r,s') 填充的数据库确实针对特定状态 s 不包含所有动作的奖励。只对某些人,也许只是一个动作。那么如何设置网络Q(s) = [Q(a_1), …. , Q(a_n) ] 的目标值,而不需要数据库中状态 s 的所有奖励?我见过不同的损失函数/目标值,但都包含奖励。

如你所见;我很困惑。有人帮助我吗?网上有很多教程,但是这一步通常描述得不好,甚至没有动力去研究理论……

【问题讨论】:

  • 欢迎来到SO,这是关于具体编码的问题;关于机器学习理论和方法的问题不在此列,应该发到Cross Validated

标签: machine-learning deep-learning reinforcement-learning


【解决方案1】:

您只需获得与观察s,a,r,s' 上存在的操作相对应的目标值。基本上你得到所有动作的目标值,然后选择你自己写的最大值:max_{a'} Qold(s', a')。然后,将其与 r(s,a) 相加,结果为目标值。例如,假设您有 10 个操作,并且观察值是 (s_0, a=5, r(s_0,a=5)=123, s_1)。那么,目标值为r(s_0,a=5)+ \gamma* \max_{a'} Q_target(s_1,a')。例如,tensorflow 可能是这样的:

Q_Action = tf.reduce_sum(tf.multiply(Q_values,tf.one_hot(action,output_dim)), axis = 1) # dim: [batchSize , ]

其中Q_values 的大小为batchSize, output_dim。因此,输出是一个大小为batchSize 的向量,然后存在一个与目标值相同大小的向量。损失是它们差异的平方。

当你计算损失值时,你也只在现有动作上反向运行,而另一个动作的梯度为零。 所以,你只需要现有动作的奖励。

【讨论】:

  • 抱歉,我仍然不确定。 max_{a'} Qold(s',a') 是一个标量,不是吗?所以 r(s_0, a=5) 也是标量。但是网络看起来例如像这样:(InputDim,10 个神经元,10 个神经元,actionDim)。那么我怎样才能提供一个完整的向量作为目标,例如使用 Keras 进行近似?
  • 您不需要提供整个向量。您只能在其中一个输出上反向运行,而不是全部。我会找到一个例子。1
  • 我加了一个例子。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多