21/9/2 读书笔记 Policy Gradient
21/9/2 读书笔记
强化学习 Policy Gradient
Policy Gradient是一种policy-based的强化学习方法,其直接基于概率进行方法的选择。与value-based的Q-Learning不同,Policy Gradient能够在一个连续的空间内挑选动作。
Policy Gradient的核心是神经网络,其通过学习reward来对选择动作的概率进行预测。如果我们采取回合更新的方式,在每次动作全部完成后再同时更新对神经网络进行传播以更新state-action对的概率,如果这一套动作最终的reward很高,则更新每个state-reward对时概率提升的幅度更大。
上述更新公式中,\(\alpha\)为学习率,\(\bigtriangledown_\theta\)是神经网络更新时的梯度,\(\pi_\theta(s_t,a_t)\)表示当前策略选择\(s_t-a_t\)的概率,\(v_t\)是这一个state-action的reward。我们采用\(log\pi_\theta(s_t,a_t)v_t\)作为“吃惊程度”,当一个state-action出现概率低,而取得了很好的reward,那么这个state-action的概率提升幅度也会更大。
我们会发现,很多强化学习任务中(比如象棋),只有当最终结束时我们才能知道动作的reward,之前所有的state-action都不能直接得到reward。在这种情况下,如果我们输了一局,那么这一局中那些正确的步的出现概率也会被削减。
但是从长远来看,正确的步在赢的局中出现概率更大,因此只要训练充分,就能避免上述问题带来的影响。
我们将\(v_t\)看做v[t],其反映了当前策略下这一步state-action的价值,其计算方式如下
# rewards[t] 第t步state-action在环境中返回的reward值
v = np.zeros_like(rewards)
running_add = 0
for t in reversed(range(0, len(rewards))): # 从最后一步开始累加,越靠前累加越大
running_add = running_add * gamma + rewards[t] # gamma 衰减系数,即之前Q-Learning中的γ
v[t] = running_add
# normalize episode rewards
v -= np.mean(v)
v /= np.std(v)
return v
事实上,我们如果把神经网络看做正在进行监督学习,那么我们输入的属性就是state,而输出的标签就是action。强化学习中将所谓“真实标签”恒等于当前策略下在该state选择的action,放弃了直接的标签对比,而转而利用乘上\(v_t\)来描述这个action是否正确。当\(v_t\)很小甚至是负的时,我们就应该向其他方向更新神经网络的参数。
movan:为了确保这个动作(指当前的action)真的是正确标签, 我们的 “loss” (需要打引号,其指\(log\pi_\theta(s_t,a_t)v_t\))在原本的 cross-entropy 形式上乘以
vt, 用vt来告诉这个 cross-entropy 算出来的梯度是不是一个值得信任的梯度. 如果vt小, 或者是负的, 就说明这个梯度下降是一个错误的方向, 我们应该向着另一个方向更新参数, 如果这个vt是正的, 或很大,vt就会称赞 cross-entropy 出来的梯度, 并朝着这个方向梯度下降. 下面有一张从 karpathy 大神 网页上扣下来的图, 也正是阐述的这个思想.
(上图1中,表示多个action各自对应一个参数更新方向;图2中,红色表示\(v_t=-1\),反正之绿色表示\(v_t=1\);图3中表示神经网络最终的正确的参数更新方向)


浙公网安备 33010602011771号