标准化奖励以在强化学习中生成回报

问题是关于香草的,非批式的强化学习.基本上是在Sutton’s book中定义的here.
我的模型训练,(呜呼!)尽管有一个使我困惑的元素.

背景:

在奖励持续时间的环境中(例如平衡),我们每步奖励(例如)1.插播之后,在将这一系列的1发送到训练步骤之前,我们进行标准的折现和归一化以获取回报:

returns = self.discount_rewards(rewards)
returns = (returns - np.mean(returns)) / (np.std(returns) + 1e-10) // usual normalization

discount_rewards是通常的方法,但是如果好奇,则为here is gist.

因此,奖励数组[1,1,1,1,1,1,1,1,1,1]成为回报数组[1.539,1.160,0.777,0.392,0.006,-0.382,-0.773,-1.164,- 1.556.

在此基本背景下,我可以问一个问题:

如果强制执行正收益,并且不鼓励负收益(在优化步骤中),则无论情节持续多长时间,都会鼓励大约前一半的行为,而后一半则不鼓励.是真的,还是我误会了什么?

如果不是真的,很想了解我做错了什么.

如果这是真的,那我就不理解该模型为什么要训练,因为即使表现良好的情节也会阻止其后半部分的动作.

重申一下,这是非分批学习(因此收益与培训步骤中另一个情节的收益并不相关).在每个情节之后,模型训练,并且训练得很好:)

希望这是有道理的,并且足够简短,足以让人感觉像是一个适当的明确问题.

解决方法:

背景

>是的,正面奖励比负面奖励要好
>不,绝对的正面奖励并不好
>不,负回报绝对绝对不错

如果您平均增加或减少所有奖励(好坏),则什么都没有改变.

优化器试图使损失最小化(使报酬最大化),这意味着它只对值之间的增量(梯度)感兴趣,而不是对绝对值或正负号感兴趣.

强化学习

假设您的图表看起来像这样:

...
logits = tf.nn.softmax(...)
labels = tf.one_hot(q_actions, n_actions)
loss = tf.losses.softmax_cross_entropy(labels, logits, weights=q_rewards)

各个“类别”的损失按权重进行缩放,在这种情况下,权重为q_rewards:

loss[i] = -q_rewards[i] * tf.log( tf.nn.softmax( logits[i] ) )

损失是奖励的线性函数,梯度在线性变换下保持单调.

奖励归一化

>不会弄乱渐变的符号
>使梯度变得更陡峭,以获得远非均值的奖励
>使梯度变浅,以获得接近均值的奖励

当代理人的表现很差时,它得到的不良奖励要多于良好的奖励.归一化使良好奖励的梯度变大(赋予更多的权重),而对不良奖励的梯度变浅(使更少的权重).

当代理商的表现相当不错时,那就是另一回合.

你的问题

If positive returns are enforced, and negative returns are discouraged (in the optimize step) …

不是符号(绝对值),而是增量(相对值).

… then no matter the length of the episode, roughly the first half of the actions will be encouraged, and the latter half will be discouraged.

如果奖励价值更高或更低,那么您将拥有较小的一半,且梯度较大(权重较大),较大的一半则具有较浅的梯度(权重较小).

If it IS true, then I don’t understand why the model trains, since even a good-performing episode will have the latter half of its actions discouraged.

实际上,您的损失值在某些时候预计将保持恒定.因此,您必须通过运行程序并查看(未标准化的)奖励来衡量进度.

作为参考,请参阅来自Google IO的示例网络:
github.com/GoogleCloudPlatform/tensorflow-without-a-phd/…/tensorflow-rl-pong/…搜索_rollout_reward

但是,这并不是一件坏事.只是您的损失(或多或少)也已“正常化”.但是无论如何,网络都会通过在每个训练步骤中查看梯度来保持改进.

分类问题通常具有“全局”损失,并且随着时间的流逝不断下降.一些优化器保留了梯度的历史记录以适应学习速率(有效地缩放梯度),这意味着在内部,他们还对梯度进行了“标准化”,因此不管我们是否这样做.

如果您想了解有关幕后渐变缩放的更多信息,建议您看一下ruder.io/optimizing-gradient-descent

To reiterate, this is non-batched learning (so the returns are not relative to returns in another episode in the training step). After each episode, the model trains, and again, it trains well

相关文章

MNIST数据集可以说是深度学习的入门,但是使用模型预测单张M...
1、新建tensorflow环境(1)打开anacondaprompt,输入命令行...
这篇文章主要介绍“张量tensor是什么”,在日常操作中,相信...
tensorflow中model.fit()用法model.fit()方法用于执行训练过...
https://blog.csdn.net/To_be_little/article/details/12443...
根据身高推测体重const$=require('jquery');const...