gpt4 book ai didi

machine-learning - 设置 Deep Q-Learning 的目标值

转载 作者:行者123 更新时间:2023-11-30 08:42:10 24 4
gpt4 key购买 nike

对于与神经网络相结合的标准 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并不包含所有 Action 的奖励。只对某些人来说,也许只是一个 Action 。那么如何设置网络的目标值Q(s) = [Q(a_1), …. , Q(a_n) ]数据库中没有状态s的所有奖励?我见过不同的损失函数/目标值,但都包含奖励。

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

最佳答案

您只需获取与观察 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) # 暗淡: [batchSize , ]

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

当你计算损失值时,你也只对现有的 Action 进行反向运行,而其他 Action 的梯度为零。所以,你只需要现有行动的奖励。

关于machine-learning - 设置 Deep Q-Learning 的目标值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58559415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com