笔记整理自李宏毅老师的公开课
在之前的笔记关于Policy Gradient和PPO方法中,需要学习的是某个策略 π \pi π。给定出一个策略网络 π \pi π,然后令计算机通过不断地训练策略网络,来实现智能。训练的过程中,更新迭代的也是策略网络的参数。
而Q-Learning中,不是直接训练策略网络 π \pi π,而是给学习一个Crtic,该Critic用于评估Agent做出的每个选择的评估值。
Q-Learning的核心在于一个Q-Function: Q π ( s t , a ) Q^{\pi}(s_t,a ) Qπ(st,a)。该函数的意义是,在状态 s t s_t st下,如果选择了行动 a a a,该函数会得到的返回值,其中 π \pi π表示某种策略或者说是Actor。注意, s t s_t st状态下选择行动 a a a,是由 Q Q Q函数决定的,此时如果让策略 π \pi π来选择行动,则不一定是行动 a a a。在选择 a a a之后,此时再令 π \pi π自己玩下去,知道游戏终结,返回结果作为 Q Q Q的值。
再给出一个评估函数 V π ( s ) V^{\pi}(s) Vπ(s),该函数作用是评定某个Actor π \pi π在状态 s s s下的分数,分数越高说明对 π \pi π越有利。评估的方式一般有两个:
实际中,TD方式比较常用。
Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)网络有两种输入和输出方式:
使用Q-Learning做RL的基本步骤:
π \pi π与环境互动。
通过MC或者TD的方式,学习出 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)。
找到一个更好的 π ′ \pi^{'} π′,并令 π = π ′ \pi=\pi{'} π=π′。之后继续步骤1
补充,更新 π ′ \pi^{'} π′的公式:
π ′ = a r g m a x a Q π ( s , a ) \pi^{'}=\mathop{arg\ max}_a Q^{\pi}(s,a) π′=arg maxaQπ(s,a)
有两点需要注意:
ϵ − G r e e d y \epsilon-Greedy ϵ−Greedy策略:
a c t i o n = { a r g m a x a Q π ( s , a ) , 1 − ϵ r a n d o m a c t i o n , ϵ action=\begin{cases} \mathop{arg\ max}_a Q^{\pi}(s,a), & 1-\epsilon\\ random\ action, & \epsilon \\ \end{cases} action={arg maxaQπ(s,a),random action,1−ϵϵ
其中 ϵ ∈ ( 0 , 1 ) \epsilon \in(0,1) ϵ∈(0,1),是一个概率。
Boltzmann Exploration策略:
P ( a ∣ s ) = exp ( Q ( s , a ) ) ∑ a exp ( Q ( s , a ) ) P(a|s)=\frac{\exp{(Q(s,a))}}{\sum_a\exp {(Q(s,a))}} P(a∣s)=∑aexp(Q(s,a))exp(Q(s,a))
选择策略时,是借助概率进行的。
每次都把数据存储到一固定buffer中,训练的时候,从buffer中随机选取一个批次进行训练。如果buffer满了,则用新的数据更替就的数据。
实际的游戏中,一般Q-Value都是被高估了。Double DQN就是为了尽量减少这种情况。DDQN的方法是有两个函数 Q Q Q与 Q ′ Q^{'} Q′:
Q ( s t , a t ) = r t + Q ′ ( s t + 1 , a r g m a x a Q ( s t + 1 , a ) ) Q(s_t,a_t)=r_t+Q^{'}\left(s_{t+1},\mathop{arg\ max}_aQ(s_t+1,a)\right) Q(st,at)=rt+Q′(st+1,arg maxaQ(st+1,a))
实际操作中,会有两个Q-Network,一个是选择行动的 Q Q Q网络,另一个是Target Network Q ′ Q^{'} Q′。其中 Q Q Q是需要更新参数的网络。
在每一次与环境开始互动的时候,对神经网络添加噪声。之后用这个神经网络与环境互动,并更新参数,一直反复进行。