RL随笔-策略梯度的直观理解
书接上回,上面介绍了RL最基础的策略梯度,但没有理解计算出来的梯度 $\nabla J(\theta) =\mathbb{E}{\tau \sim \pi_\theta} \nabla log, P(\tau|\pi)R_\tau $ 是什么含义,现在具体的介绍一下。
还是分为了两部分,\(\nabla log\,P(\tau|\pi)\) 与 \(R_\tau\)
为了更好的理解,先回顾了一遍梯度到底是什么:😶
对于一个多元函数 \(f(\theta)\),梯度是:\(\nabla f(\theta) = \left( \frac{\partial f}{\partial \theta_1}, \frac{\partial f}{\partial \theta_2}, \dots \right)\)
从仅存的数学直觉,梯度是一个向量,从中可以得到 如果每个变量 \(\theta_i\) 增加一点点,函数值会增加多少,注意增加这个词
在梯度下降的方法中,为了最小化损失函数,在更新参数时便是 减去梯度(反梯度方向) :$\theta \leftarrow \theta - \nabla l(f(x),y) $
这个解释起来就很容易理解了,当梯度为正值时,参数增大,对应的损失值也增大,而我们的目标是最小化损失,所以要减去梯度;当梯度为负值时,参数增大,对应的损失值也就减小,所以减去 负梯度 也就达到了我们的目的,所以 在一般的监督学习中为了最小化损失函数,选择的参数更新方法为 梯度下降,减去对应的梯度。
回到策略梯度的 \(\nabla_\theta \log P(\tau|\pi_\theta)\) ,这部分 指示了如果继续选择 \(\tau\) (更准确的说 在未来想要增大采样到这条轨迹的概率),对应的参数应该如何变化。如果值为正,说明继续这个轨迹需要进一步增大参数值;而如果值为负,说明了 继续这个轨迹需要缩减参数值,概括来说 这部分是对 策略选择该轨迹的参数更新方向指引。
之后第二部分 \(R_\tau\) ,很明显这个就是 选择该轨迹得到的奖励值,这个值代表了 方向选择的“权重”,值越大表示这条轨迹得到的奖励值越高,从而鼓励模型继续选择该轨迹;相反,得到的奖励值小,从而弱化模型对该轨迹的选择。
自我感觉, \(\nabla_\theta \log P(\tau|\pi_\theta)\) 就像一个基向量,指引了优化的方向,而 \(R_\tau\) 就像是向量长度,代表了往该方向拓展的激进程度。
回到RL的参数更新,一点要明确的是 RL 相较于一般的 监督学习,没有明确的监督项,需要自己根据环境做出动作,之后根据动作的环境奖励反馈,一步步的去探索最优的策略轨迹,优化目标是 最大化得到的奖励值,因此 相较于梯度下降,这里采用的是 策略梯度上升 \(\theta \leftarrow \theta+ \nabla J(\theta)\) ,梯度的方向是函数值增大的方向,与RL任务目标一致。
ok,这部分完成了对 策略梯度进行参数更新的理解
下面再举一个简单的例子,可以更好的进行理解:
只有一个状态,两个动作 \(a\in\{0,1\}\)。
用一维参数 $\theta $ 定义策略:\(\pi_\theta(a=1)=\sigma(\theta),\pi_\theta(a=0)=1-\sigma(\theta)\),其中 \(\sigma\) 是 Sigmoid。
求这个策略函数(单步 Bernoulli 策略)的梯度
首先明确 Sigmoid函数:\(\sigma = \frac{1}{1+e^{-x}}\) , \(\sigma^{'} = \sigma(1-\sigma)\)
下面进入推导, 两个动作 \(a=0,a=1\),这里设 \(p=\sigma(\theta)\) ,那么 \(\pi(a,\theta)= p^a(1-p)^{1-a}\)
取 log 后, \(log\, \pi(a,\theta) = a\, log\, p+(1-a)\, log(1-p)\)
对于 \(log\,p\) ,\(\frac{\partial\,log\, p}{\partial \theta} = \frac{p^{'}}{p} = \frac{p(1-p)}{p}=1-p\)
对于 \(log\,(1-p)\) , \(\frac{\partial\,log\, (1-p)}{\partial \theta} = \frac{-p^{'}}{1-p} = \frac{-p(1-p)}{1-p}=-p\)
整体代入 \(\nabla log\,\pi(a,\theta) = a(1-p)-(1-a)p = a-p = a-\sigma(\theta)\)
那么 \(\Delta\theta \propto R\,(a-p) = R\,(a-\sigma(\theta)).\)
还是 原来的问题,应该怎么理解 这个梯度变化呢?🤔
说实话,根据之前的知识,进行梯度推导是没有问题的,但我不明白这个例子的 单状态,执行动作后的参数更新和进一步的动作选择有什么关系,
分析一下,这个例子就是一个方便解释的最简单状态,只有一个状态,就不需要考虑状态选择等因素的影响,只需要考虑动作选择的影响,在这个状态下多次选择,根据奖励调整选择,之后最大化奖励,搞清楚这个前提
现在先假设 选择 \(a=1\),得到的奖励 \(R_1=1\);选择 \(a=0\),得到的奖励 \(R_0=-1\) 。在此假设中模型的目的是最大化奖励,所以最终的结果很好估计,就是尽可能的选择 \(a=1\)
初始状态不知道应该选择 \(a=1 \,or\, a=0\) ,所以 \(p=\sigma(\theta)=0.5\) 对应 $\theta=0 $
选择 \(a=0\) ,那么 \(\nabla J(\theta) = R_0 (a-\sigma(\theta))=-1*(0-0.5)=0.5\) ,也就是说 在增大 \(\theta\) 时,得到的 reward 是会增大的,所以应该 继续增大 \(\theta\) 来增大奖励
相应的,如果选择 \(a=1\),那么 \(\nabla J(\theta) = R_1(a-\sigma(\theta))= 1*(1-0.5)=0.5\),也同样要求增大 \(\theta\)
经过多次决策,模型最终会选择 \(a=1\) 来最大化奖励
再举一个例子,\(R_0=2,R_1=1\),
\(\nabla J(\theta)_0 = R_0 (a-\sigma(\theta))=2*(0-0.5)=-1\) ;\(\nabla J(\theta)_1 = R_1(a-\sigma(\theta))= 1*(1-0.5)=0.5\)
可以看到两个梯度会相互竞争,两个动作会分别将 \(\theta\) 尽力的往自己的方向扯,而 \(a=0\) 扯的力度会更大,所以多次决策后,模型会更倾向于选择 \(a=0\),对应 \(\sigma(\theta)\) 值降低, 也就是往 \(\theta\) 减小等方向靠拢
同样的选择不同的 \(R_0,R_1\),也可以进行模拟,最终模型也会趋向于选择获取奖励更大的方向;同时 这个例子选择的 \(\theta\) 对应的方程为 \(\sigma\) 函数,在实际中策略通常由神经网络输出分布参数(如 softmax、Gaussian 等)来定义?这种情况下 万变不离其宗,我们还是只是关注 \(\nabla J(\theta)\) 即可
明确 如果 \(\nabla log\, \pi(\tau|\theta)\, or\, \nabla log\,\pi(a|s)\) 为正,那么对应继续该轨迹策略/动作需要进一步的增大 \(\theta\) ;为负对应继续该策略需要进一步的减小 \(\theta\) 的值,再乘以对应的 \(R\) ,便得到了完整的奖励程度,从而据此更新参数。
小结一下,这一部分承接了上一部分的策略梯度推导,对策略梯度的含义进行了分析,并介绍了梯度怎么运用到参数更新上,最后通过一个例子进一步的解释和升华;下一部分将针对 “实际中策略通常由神经网络输出分布参数” 这句话进行理解,为什么呢?因为我还不理解 orz 😇

浙公网安备 33010602011771号