https://www.tensorflow.org/tutorials/reinforcement_learning/actor_critic#3_the_actor-critic_loss
在 Actor-Critic 方法的 TensorFlow 指南中,actor 损失使用以下公式计算:
advantage = returns - values
action_log_probs = tf.math.log(action_probs)
actor_loss = -tf.math.reduce_sum(action_log_probs * advantage)
描述说, “在总和中添加了一个负项,因为这个想法是通过最小化组合损失来最大化产生更高奖励的行动的概率。”
据我的理解,
action_log_probs
总是负数。
然后该公式令人困惑因为
tf.math.reduce_sum(action_log_probs * advantage)
乘以-1意味着当
advantage
为正数时,
actor_loss
变为正数。假设
advantege
越高越好,则最小化
actor_loss
将调整参数以最小化产生更高奖励的操作的概率。
是
advantage
总是负值并且较小
advantage
更好?我运行代码并打印出
by
advantage
,这表明
tf.print('advantage: ', advantage)
始终为负数。
advantage
您能解释一下为什么
为负数以及为什么较小的
advantage
更好吗?
advantage
显示最后一集最后 500 步的优势值的图形图像
An image of the figure showing the advantage values over the last 500 steps of the final episode
你对 Actor-Critic 损失函数的理解基本上是正确的,但对优势的解释有一些误解。让我们来分解一下:
-
action_log_probs
不一定为负数: 你是正确的,action_log_probs
表示采取所选行动的对数概率,由于概率在 0 到 1 之间,它们的对数通常为负数。但是,重要的是要注意,它们的值接近于零。 -
advantage
可以是正数或负数: 优势表示在给定状态下采取行动相对于预期回报的好坏程度。 -
正的
advantage
: 意味着采取的行动比该状态下的平均行动要好(即,它产生了比批评家预期的更高的回报)。 -
负的
advantage
: 意味着采取的行动比平均水平差。 -
最小化 Actor 损失: 目标是通过梯度下降来最小化 Actor 损失。让我们看看当
advantage
为正数和负数时会发生什么:-
正的
advantage
:actor_loss = - (positive value)
。最小化损失意味着增加采取该行动的对数概率(并因此增加概率本身),因为它导致了比预期更好的结果。 -
负的
advantage
:actor_loss = - (negative value)
。这有效地成为正损失。最小化它意味着减少采取该行动的对数概率(并因此降低概率本身),因为它导致了比预期更差的结果。
-
正的
-
为什么乘以 -1: 乘以 -1 是一个数学技巧,允许我们将最大化期望奖励的问题转换为最小化损失函数的问题,这与梯度下降的标准优化过程一致。
-
较小的
advantage
不一定更好: 你观察到advantage
值为负数,并且在你的实验中随着时间的推移而减小。这可能表明:-
你的 Actor 正在学习,并且在选择行动方面正在变得不那么“糟糕”。随着 Actor 的改进,
advantage
值将趋向于 0,因为它采取的行动与预期值没有太大差异。 - 你的批评家可能在高估状态值。
-
你的 Actor 正在学习,并且在选择行动方面正在变得不那么“糟糕”。随着 Actor 的改进,
总的来说,Actor-Critic 方法的目标是通过增加导致正
advantage
的行动的概率并减少导致负
advantage
的行动的概率来训练 Actor 采取更好的行动。
advantage
值本身的大小表示所采取行动与预期值相比的相对好坏程度。
为了进一步调试你的观察结果,跟踪奖励的移动平均值以及
advantage
和
value
函数可能会很有帮助。这将使你能够更好地了解代理的学习进度以及是否有任何潜在问题(例如,批评家中的偏差)。