Policy-based Approach
policy-based 强化学习通常是要学习一个actor, actor可以用(pi_ heta (S)) 来确定。如果我们用actor来玩游戏,那么每一局可以看成是一个操作序列( au={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_ heta = sum_{t=1}^Tr_t
]
我们用(ar{R_ heta})来表示期望的奖励,那么我们的目的就是使得这个期望奖励最大化。其中
[ar{R_ heta}=sum_ au R( au)P( au| heta)approx dfrac{1}{N}sum_{n=1}^NR( au^n)
]
当采样的数足够大的时候,右边就会与左边无限逼近。类似于抛质地均匀的硬币,当抛的次数足够多的时候,正反面的比例接近(1:1)。
现在目标有了,我们要做的就是找出最大化(ar{R_ heta})的( heta)
[ heta^* = argmax_ hetasum_ au R( au)P( au| heta)
]
梯度上升来一发?
[igtriangledownar{R_ heta}=sum_{ au}R( au)igtriangledown P( au| heta)
]
因为奖励不是由( heta)决定的,所以要做的是对(P( au| heta))进行梯度计算。
这里要引入一个公式
[dfrac{log (f(x))}{dx} = dfrac{df(x)}{f(x)dx}
]
那么
[igtriangledownar{R_ heta}=sum_{ au}R( au)igtriangledown P( au| heta)=sum_ au R( au)P( au| heta)dfrac{igtriangledown P( au| heta)}{P( au| heta)}=sum_ au R( au)P( au| heta)igtriangledownlog P( au| heta)
]
[igtriangledownar{R_ heta}approxdfrac{1}{N}sum_{n=1}^NR( au^n)igtriangledownlog P( au^n| heta)
]
那么(P( au| heta))怎么计算?
[P( au| heta)=p(s_1)p(a_1|s_1, heta)p(r_1,s_2|s_1,a_1)p(a_2|s_2, heta)p(r_2,s_3|s_2, a_2)dots
]
[P( au| heta)=p(s_1)prod_{t=1}^Tp(a_t|s_t, heta)p(r_t, s_{t+1}|s_t,a_t)
]
所以由
[igtriangledownlog P( au| heta) = sum_{t=1}^Tigtriangledown log p(a_t|s_t, heta)
]
最后有
[igtriangledownar{R_ heta}approxdfrac{1}{N}sum_{n=1}^NR( au^n)sum_{t=1}^{T_n}igtriangledown log p(a_t|s_t, heta)
]
至于为什么最后要取log,因为取了log,本质上(dfrac{dp(a_t|s_t, heta)}{p(a_t|s_t, heta)}),这样就相当于有了一个归一化,整个期望的结果,不会由那些出现很频繁的但是奖励比较低的骚操作所主导(出现越频繁,分母越大)。
参考
- 台大李宏毅老师的DL presentation