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对时概率提升的幅度更大。

\[\theta\leftarrow\theta+\alpha\bigtriangledown_\theta\log\pi_\theta(s_t,a_t)v_t \]

上述更新公式中,\(\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 大神 网页上扣下来的图, 也正是阐述的这个思想.

5-2-4.png

(上图1中,表示多个action各自对应一个参数更新方向;图2中,红色表示\(v_t=-1\),反正之绿色表示\(v_t=1\);图3中表示神经网络最终的正确的参数更新方向)

posted @ 2021-09-02 06:40  neumy  阅读(84)  评论(0)    收藏  举报