策略梯度
强化学习有3个组成部分:演员,环境,奖励
一轮游戏可以叫做一个回合(episode)或者试验(trial)
游戏最终的总奖励(total reward)
一个完整的轨迹可以写成:T={s1,a1,s2,a2,...,st,at}
该轨迹的概率:
pθ(τ)=p(s1)pθ(a1∣s1)p(s2∣s1,a1)pθ(a2∣s2)...=p(s1)t=1∏Tpθ(at∣st)p(st+1∣st,at)
在一场游戏中我们希望总的reward最大,而由于R是一个变量,因此我们希望它的期望越大越好。因此先求R的期望:
Rθ=τ∑R(τ)pθ(τ)=Eτ∼pθ(τ)[R(τ)]
为了让reward期望最大,要做梯度上升。因此要对reward的期望求导:
▽Rθ=τ∑R(τ)▽pθ(τ)=τ∑R(τ)pθ(τ)pθ(τ)▽pθ(τ)=τ∑R(τ)pθ(τ)▽logpθ(τ)=Eτ∼pθ[R(τ)▽logpθ(τ)]≈N1n=1∑NR(τn)▽logpθ(τn)=N1n=1∑NR(τn)▽∑(logp(s1)+t=1∑T(logpθ(at∣st)+logp(st+1∣st,at)))=N1n=1∑Nt=1∑TR(τn)▽logpθ(at∣st)
如果用上述的导数进行梯度上升。可以注意到,如果reward是正的,那么该state下采取这个action的概率上升。如果reward是负的,则对应action的概率下降。
技巧
添加基线
在许多场景下所有的reward都是正的。本来理论上这种情况是不应该影响结果的,因为reward=0的情况的概率逐渐下降,reward越高概率增长越快。
但实际上,我们用采样的方式对期望做估计,这样没有被采样的情况的概率下降,其他情况概率都上升。但是没有被采样的情况中也可能有reward > 0 的情况。因此这种方式不合理。应该有一部分的概率降低,一部分升高。
采用一个基线b。可以让b=E[R(τ)]
因此:
▽Rθ=N1n=1∑Nt=1∑T(R(τn)−b)▽logpθ(at∣st)
分配合适的分数
之前的方式是:只要这个回合的reward是正的,这个回合中的每一个采取的action的概率都会均等的上升。但是有一些action可能并没有给这个回合带来好的作用,只是被其他的action带来的reward给抵消掉了。它带来的总的回报只和后面的action带来的回报有关,与之前已经采取的aciton的reward无关。
如果采样的次数足够多,每一个state-action对 可以被分配到合适的分数,但是在大部分的情况下,采样次数都是不足的。因此需要找到合适的方式分配分数。应该给一个回合中的state-action对分配不同的reward。
因此用折扣的方式计算回报,越近的回报越和当前的action有关,而且当前的action来带的总回报只能在它后面体现:
Rt(τn)=t′=t∑Tnγt−t′rt′n
也就是:
▽Rθ=N1n=1∑Nt=1∑T(t′=t∑Tnγt−t′rt′n−b)▽logpθ(at∣st)
REINFORCE:蒙特卡罗策略
REINFORCE 是一个采用蒙特卡罗策略的方法,它是基于策略梯度的经典算法,直接学习策略而不学习价值函数。蒙特卡罗策略的方法会等到一个回合结束才更新,而时序差分的方法会一步一更新,更新频率高。
REINFORCE的方法,首先让蒙特卡罗走完一个回合,这样就能计算每一步骤的总收益(带折扣的)。再利用贝尔曼公式,对θ 求导,得到更新公式(包含G),对θ 进行更新。
它的损失的计算采用类似这种形式:t∑Gt×softmax(At,π(At∣St))
参数更新的具体过程,没有细看,如果李宏毅的课程中提及,后期会补充