关于pytorch强化学习教程的一些注释

pytorch官网给出了一个使用DQN网络实现自平衡杆的demo:https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html,以下为一些注释:

1.

初看这段话会有些懵,它说的是policy gradient里面的一个trick。

在执行完某个策略产生的一个action序列后(例如使用一个策略打游戏,则该策略会在一局游戏中使用多次产生action,他们组成一个序列),会将每次执行策略后得到的reward相加得到一个总的reward。

为了评估策略好坏,一个简单的做法是使用该总的reward作为该策略的评分。

但是有时虽然结果是坏的,但中间仍然会出现一些较好的action,我们不能因为最终结果不好就否定整个策略序列。一个基本想法是,一个策略产生的action只会影响其后续的env和action,所以为了评判这一步action的好坏,我只需要将从这一步开始到游戏结束期间产生的reward加起来,就能表示这一步action可能贡献的reward

上式中的 t=t0到正无穷即指的是从t0时刻的action到游戏结束产生的reward(即式中的r_t)加起来。

但是一般来说,某时刻产生的action或许对后面几个action产生较大影响,但时间越长,该action的影响也会减弱,故这里有一个γ参数(一般取0.9或0.99),随着时间增长(即式中的 t – t_0 越大),r_t的系数也就越小,这就表示其对t_0时刻的reward影响就越小

2.

可能经常会看到其他地方说Q table的更新函数为:

事实上,这里式1只是将学习率α取为1了而已。

式2表示的是Q的预测值与当前策略下Q的真实值的一个误差。如何理解呢?我们知道DQN本质上只是将Q-learning中的Qtable替换成了Qfunction,在Qtable中,若表中各元素均满足式1中的关系,则其完成收敛。若希望Qfunction也达成同样的收敛条件,则其必须也满足相同的关系(某状态的输出与其他状态输出存在某种关系)。对于使用梯度下降作为优化函数的神经网络来说,我们需要给他一个loss函数,即上述式2

3.

Leave a Comment