问题是关于香草的,非批式的强化学习.基本上是在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。