Policy-Based Reinforcement Learning
Policy-based Approach
policy-based 强化学习通常是要学习一个actor, actor可以用\(\pi_\theta (S)\) 来确定。如果我们用actor来玩游戏,那么每一局可以看成是一个操作序列\(\tau=\{s_1, a_1, r_1, s_2, a_2, r_2, \dots, s_T, a_T, r_T\}\)
其中\(s_i\) 表示状态,\(a_i\)表示action,\(r_i\)表示在\(s_i\)的状态下采取\(a_i\)动作可以获得的奖励。与普通的深度学习不一样,强化学习需要至少完成一局游戏后才会进行更新,也就是说强化学习看重的是整个局的最后的奖励。如果每走一步就更新,那么整个模型就没有全局观。
玩一局游戏,最终的得分是
\[R_\theta = \sum_{t=1}^Tr_t
\]
我们用\(\bar{R_\theta}\)来表示期望的奖励,那么我们的目的就是使得这个期望奖励最大化。其中
\[\bar{R_\theta}=\sum_\tau R(\tau)P(\tau|\theta)\approx \dfrac{1}{N}\sum_{n=1}^NR(\tau^n)
\]
当采样的数足够大的时候,右边就会与左边无限逼近。类似于抛质地均匀的硬币,当抛的次数足够多的时候,正反面的比例接近\(1:1\)。
现在目标有了,我们要做的就是找出最大化\(\bar{R_\theta}\)的\(\theta\)
\[\theta^* = \arg\max_\theta\sum_\tau R(\tau)P(\tau|\theta)
\]
梯度上升来一发?
\[\bigtriangledown\bar{R_\theta}=\sum_{\tau}R(\tau)\bigtriangledown P(\tau|\theta)
\]
因为奖励不是由\(\theta\)决定的,所以要做的是对\(P(\tau|\theta)\)进行梯度计算。
这里要引入一个公式
\[\dfrac{\log (f(x))}{dx} = \dfrac{df(x)}{f(x)dx}
\]
那么
\[\bigtriangledown\bar{R_\theta}=\sum_{\tau}R(\tau)\bigtriangledown P(\tau|\theta)=\sum_\tau R(\tau)P(\tau|\theta)\dfrac{\bigtriangledown P(\tau|\theta)}{P(\tau|\theta)}=\sum_\tau R(\tau)P(\tau|\theta)\bigtriangledown\log P(\tau|\theta)
\]
\[\bigtriangledown\bar{R_\theta}\approx\dfrac{1}{N}\sum_{n=1}^NR(\tau^n)\bigtriangledown\log P(\tau^n|\theta)
\]
那么\(P(\tau|\theta)\)怎么计算?
\[P(\tau|\theta)=p(s_1)p(a_1|s_1,\theta)p(r_1,s_2|s_1,a_1)p(a_2|s_2,\theta)p(r_2,s_3|s_2, a_2)\dots
\]
\[P(\tau|\theta)=p(s_1)\prod_{t=1}^Tp(a_t|s_t,\theta)p(r_t, s_{t+1}|s_t,a_t)
\]
所以由
\[\bigtriangledown\log P(\tau|\theta) = \sum_{t=1}^T\bigtriangledown \log p(a_t|s_t,\theta)
\]
最后有
\[\bigtriangledown\bar{R_\theta}\approx\dfrac{1}{N}\sum_{n=1}^NR(\tau^n)\sum_{t=1}^{T_n}\bigtriangledown \log p(a_t|s_t,\theta)
\]
至于为什么最后要取log,因为取了log,本质上\(\dfrac{dp(a_t|s_t,\theta)}{p(a_t|s_t,\theta)}\),这样就相当于有了一个归一化,整个期望的结果,不会由那些出现很频繁的但是奖励比较低的骚操作所主导(出现越频繁,分母越大)。
参考
- 台大李宏毅老师的DL presentation
夜空中最亮的星,照亮我前行