DQN算法及 Actor-Critic 算法
DQN
Q-learning
状态价值函数 State Value Function
状态价值函数的贝尔曼方程
记策略 π 的状态值函数为 Vπ(st) ,它表示在状态 st 下带来的累积奖励 Gt 的期望,具体公式为:
如何衡量状态价值函数?
有两种做法:
- 基于蒙特卡洛的方法Monte-Carlo(MC):critic 观察 π 进行游戏的整个过程, 直到该游戏回合结束再计算累积收益(通过比较期望收益和实际收益G,来训练critic)。有时一个游戏回合可能会很长,这个等到游戏回合结束再计算收益的方法训练起来会很慢,因此引入另外一种方法 Temporal-difference(TD)
- 时序差分的方法Temporal-difference (TD):时序分差算法计算的是两个状态之间的收益差(通过比较期望差异与实际差异r之间的差别来训练critic)。
MC vs. TD
- MC:方差大。因为MC的方法收集的是每个完整的回合,而对于某个状态的累计收益G也是集合了很多步。
- TD:方差小,但是可能不准确。在TD的方法中,用前一步的状态价值与下一步的状态价值之差r来更新,所以单步更新大大减小了方差,但是同样因为r的随机性(因为在同一个状态下采取同一个动作,计算出来的reward也不一定相同),但是这个随机性比MC方法中多步的r合计的随机性要小。
其实,目前来看,使用TD的方法是比较常见的,MC方法现在比较少用。
举个例子说明蒙特卡洛方法和时序差分方法的区别:
状态-动作价值函数 State-action Value Function
对于给定的actor π, 在状态s采取行动a预计能够得到的累计收益
state value function 与 state-action value function
- state value function 的 input 是一个 state,它是根据 state 去计算出,看到这个state 以后的 expected accumulated reward 是多少。
- state-action value function 的 input 是一个 state 跟 action 的 pair,它的意思是说,在某一个 state 采取某一个action,假设我们都使用 actor π,得到的 accumulated reward 的期望值有多大。
注意:actor π 在 state s 时采取的动作不一定是action a,但是Q-function是规定只有在state s 下才强制采取action a,接下来就进入自动模式, 让actor π 继续玩下去, 得到的expected reward 才是 Qπ(s,a)。
Q-function 有两种写法:
- input 是 state 跟action,output 就是一个 scalar; (连续动作)
- input 是一个 state s,output 就是好几个 value。(离散动作)
这里要知道两点:
-
什么叫做better?
不管在哪个state,用π’跟环境做交互得到的expected reward一定大于π。
证明:
-
怎么找这个π’?
π’是根据Q-function推出来的。上式的右边要求arg max ,如果这里的动作是离散的,可以一个个带进去看谁的Q大就行,但是如果动作是连续的,这里求解arg max就会有问题。
Q-learning:
- 使用一个初始的actor π 与环境进行互动
- 学习该actor对应的 Q function
- 一定存在另外一个表现更好的actor π ′ , 用这个更好的actor来替代原来的actor
- 重复上述步骤
目标网络 Target Network
下式是我们熟悉的TD方法:
所以最简单的想法就是固定一个网络,这里固定的是上式右边的网络,在训练的过程中我们只更新左边的网络参数,而不更新右边的target网络的参数,这样就变成了一个回归问题。我们希望魔性的输出与目标值越接近越好,通常就会采取最小化二者的MSE(mean square error)
在实现的时候,你会把左边的 Q-network update 好几次以后,再去用 update 过的 Q-network 替换这个 target network 。但它们两个不要一起动,它们两个一起动的话,结果会很容易坏掉。一开始这两个 network 是一样的,然后在 train 的时候,你会把右边的 Q-network fix 住。你在做 gradient decent 的时候,只调左边这个 network 的参数,那你可能update 100 次以后才把这个参数复制到右边的 network 去&#