DQN,全称深度Q网络,是一种强化学习(RL)算法。
0x01 intro of RL
强化学习(Reinforcement learning,简称RL)是和监督学习,非监督学习并列的第三种机器学习方法。
举例说明:
机器在玩红色警戒3(不经意间暴露了年龄),从开始到发育到配合到进攻/防守,最后到输赢。
比如一开始,机器不知道红色警戒3里有啥操作,它可能会这里起个电、那里起个兵营、或者它愿意的话可以往家里扔一颗真空内爆弹…
但是当机器把自己家拆了之后,它不就输了嘛,输了之后就会收到负面反馈,告诉它这么做是不对的。因此,机器在收到若干次负面反馈之后,就会偏向于拆对手的家。
总的来说,强化学习可以建模如下:
即:
agent(执行个体)做出动作 -> 环境发生改变 -> agent得到一定的反馈(reward) -> agent做出动作 -> 环境发生改变 -> agent得到一定的反馈(reward)…
这么一个过程。
需要注意,有的时候agent在做完动作后并不一定得到反馈,例如我们并不能在开局第一步就判断谁胜谁负。
接下来是强化学习中一些比较重要的概念:
- 策略(policy): π \pi π
在不同的环境状态(state)下,agent做的动作是不确定的,而是呈现一个概率分布的形式。此即:
π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s) = P(A_t = a| S_t = s) π(a∣s)=P(At=a∣St=s)
在状态 s s s时菜取动作 a a a的概率分布。
对于了解博弈论的老鸽们来说,这玩意就是在每个状态时agent的混合策略… - 价值(value)
agent在某个时刻做某个动作 a a a的时候,会得到反馈 R t + 1 R_{t+1} Rt+1。因为每个时刻的 a a a是随机的,所以这个 R t R_t Rt相当于是一个随机过程…下面,我们认为有一个天眼程序可以告诉agent在当前形势下的胜率,并且把这个胜率作为奖励。显然,agent的选择会有持续影响(比如没有防范到对面工程师偷家,双手离开键盘.jpg)因此,这个价值函数可以表示为:
E ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s ) E(R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ...| S_t = s) E(Rt+1+γRt+2+γ2Rt+3+...∣St=s)
即,在环境状态 s s s下,我们能得到多少回报。
更像是当前状态下的期望价值。 - 奖励折扣因子 γ \gamma γ
见上式,其实就是个重复博弈效益函数里的衰减项。 - 环境的状态转化模型
在某个状态 s t a t e t = s state_t = s statet=s下,执行action,可以达到一个新的状态 s t a t e t + 1 state_{t+1} statet+1,但是它不是唯一的,环境的状态转化模型可以理解成是一个概率状态机,使用状态转移的概率来描述,即在前述状态和前述动作已知时转移到下一个状态的概率: P ( s t a t e t + 1 = s ′ ∣ s t a t e ≤ t = S , a c t i o n ≤ t = A ) P(state_t+1 = s' | state_{\leq t} = S, action_{\leq t} = A) P(statet+1=s′∣state≤t=S,action≤t=A) - 探索率 ϵ \epsilon ϵ
主要用来防止局部最优。例如:目前在 s 1 s_1 s1状态下有两个 a 1 a_1 a1, a 2 a_2 a2。我们通过计算出,发现执行 a 1 a_1 a1的动作比较好,但是为了防止陷入局部最优,我们会选择以 ϵ \epsilon ϵ的概率来执行 a 2 a_2 a2,以 1 − ϵ 1−\epsilon 1−ϵ 的概率来执行 a 1 a_1 a1。一般来说, ϵ \epsilon ϵ 随着训练次数的增加而逐渐减小。
0x02 马尔可夫决策过程(MDP)
上面的“环境的状态转移模型”其实十分难受,因为你到了最后一步还要把前面所有步都考虑着。这样虽然合理,但是人和机器都受不了。
因此我们将问题进行一定的简化,简化的方法就是假设状态转化的马尔科夫性,即
-
下一步的状态仅取决于这一步的状态和动作:
P ( S t + 1 = s ′ ∣ S t = s , A t = a ) P(S_{t+1} = s' | S_t = s, A_t = a) P(St+1=s′∣St=s,At=a)
上式记为 P s s ′ a P^a_{ss'} Pss′a。
-
同理,对agent的策略 π \pi π的马尔可夫性:
π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s) = P(A_t = a | S_t = s) π(a∣s)=P(At=a∣St=s) -
对价值函数 v v v:
v ( s ) = E ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s v(s) = E(R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ...| S_t = s v(s)=E(Rt+1+γRt+2+γ2Rt+3+...∣St=s
0x03 价值函数和Bellman方程
状态价值函数
上面那个价值函数是强化学习的核心。agent自动学习的一个量化标准就是它:
v π ( s ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s ) v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...|S_t=s) vπ(s)=Eπ(Rt+1+γRt+2+γ2Rt+3+...∣St=s)
我们记 G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+... Gt=Rt+1+γRt+2+γ2Rt+3+...
则它是MDP里从某个状态 S t S_t St开始采样直到最终状态时的所有奖励的衰减和。
则有:
v π ( s ) = E π ( G t ∣ S t = s ) v_{\pi}(s) = \mathbb E_{\pi}(G_t|S_t=s) vπ(s)=Eπ(Gt∣St=s)
上面式子里的 G t G_t Gt可以做一手迭代,则有:
v π ( s ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ∣ S t = s ) = E π ( R t + 1 + γ ( R t + 2 + γ R t + 3 + … ) ∣ S t = s ) = E π ( R t + 1 + γ G t + 1 ∣ S t = s ) = E π ( R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ) \begin{aligned} v_{\pi}(s) &=\mathbb{E}_{\pi}\left(R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots | S_{t}=s\right) \\ &=\mathbb{E}_{\pi}\left(R_{t+1}+\gamma\left(R_{t+2}+\gamma R_{t+3}+\ldots\right) | S_{t}=s\right) \\ &=\mathbb{E}_{\pi}\left(R_{t+1}+\gamma G_{t+1} | S_{t}=s\right) \\ &=\mathbb{E}_{\pi}\left(R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s\right) \end{aligned} vπ(s)=Eπ(Rt+1+γRt+2+γ2Rt+3+…∣St=s)=Eπ(Rt+1+γ(Rt+2+γRt+3+…)∣St=s)=Eπ(Rt+1+γGt+1∣St=s)=Eπ(Rt+1+γvπ(St+1)∣St=s)
因此我们可以知道,当前状态的价值与奖励 R t + 1 R_{t+1} Rt+1和下一个状态的价值有关。上述方程便是Bellman方程的基本形态。
(注意,上面式子里的 S t + 1 S_{t+1} St+1是一个随机变量,相当于是求了一个 S t + 1 S_{t+1} St+1的函数的期望)
动作价值函数
它代表着在当前state下,做某一个action的价值:
q π ( s , a ) = E π ( G t ∣ S t = s , A t = a ) = E π ( R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s , A t = a ) q_{\pi}(s,a) = \mathbb{E}_{\pi}(G_t|S_t=s, A_t=a) = \mathbb{E}_{\pi}(R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...|S_t=s,A_t=a) qπ(s,a)=Eπ(Gt∣St=s,At=a)=Eπ(Rt+1+γRt+2+γ2Rt+3+...∣St=s,At=a)
根据价值函数的表达式,我们可以推导出价值函数基于状态的递推关系,比如对于状态价值函数vπ(s),可以发现:
q π ( s , a ) = E π ( R t + 1 + γ q π ( S t + 1 , A t + 1 ) ∣ S t = s , A t = a ) q_{\pi}(s,a) = \mathbb{E}_{\pi}(R_{t+1} + \gamma q_{\pi}(S_{t+1},A_{t+1}) | S_t=s, A_t=a) qπ(s,a)=Eπ(Rt+1+γqπ(St+1,At+1)∣St=s,At=a)
这个东西仍然是满足递推关系的,即:
v π ( s ) = E π ( R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ) v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma v_{\pi}(S_{t+1}) | S_t=s) vπ(s)=Eπ(Rt+1+γvπ(St+1)∣St=s)
上面式子的意思是,一个状态的价值由这个状态的奖励以及后续的状态价值按一定比例衰减而成。
(注意,上面式子里的 S t + 1 S_{t+1} St+1是一个随机变量,相当于是求了一个 S t + 1 S_{t+1} St+1的函数的期望)
0x04 状态价值函数和动作价值函数的递推关系
动作价值函数和状态价值函数之间显然可以互相转化。
我们思考一下它们的意义:
-
动作价值函数是给定了当前的状态和动作之后的reward的期望值;
-
而状态价值函数是当前状态下的reward的期望值。
这意味着对所有动作价值函数关于动作概率取个期望就是状态价值函数,即:
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)q_{\pi}(s,a) vπ(s)=a∈A∑π(a∣s)qπ(s,a)
反过来,用Bellman方程,我们可以用状态价值函数表示动作状态函数:
q π ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) q_{\pi}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s') qπ(s,a)=Rsa+γs′∈S∑Pss′avπ(s′)
(指当前 s , a s, a s,a的状态给出来之后有一个即时reward R s a R_s^a Rsa,然后再算接下来的状态价值期望
下面,我们有一个直观描述:
总结一下:
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ) v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s')) vπ(s)=a∈A∑π(a∣s)(Rsa+γs′∈S∑Pss′avπ(s′))
q π ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) q_{\pi}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^a\sum\limits_{a' \in A} \pi(a'|s')q_{\pi}(s',a') qπ(s,a)=Rsa+γs′∈S∑Pss′aa′∈A∑π(a′∣s′)qπ(s′,a′)
0x05 最优价值函数
解决强化学习问题意味着要寻找一个最优的策略 π ∗ \pi^* π∗让个体在与环境交互过程中获得始终比其它策略都要多的收获。
一旦找到这个最优策略 π ∗ \pi^* π∗,那么我们就解决了这个强化学习问题。
一般来说,比较难去找到一个最优策略,但是可以通过比较若干不同策略的优劣来确定一个较好的策略,也就是局部最优解。
如何比较策略的优劣呢?一般是通过对应的价值函数来比较的,也就是说,寻找较优策略可以通过寻找较优的价值函数来完成。可以定义最优状态价值函数是所有策略下产生的众多状态价值函数中的最大者,即:
v π ∗ ( s ) = max π v π ( s ) v_{\pi^*}(s) = \max_{\pi}v_{\pi}(s) vπ∗(s)=πmaxvπ(s)
同理也可以定义最优动作价值函数是所有策略下产生的众多动作状态价值函数中的最大者:
q π ∗ ( s , a ) = max π q π ( s , a ) q_{\pi^*}(s,a) = \max_{\pi}q_{\pi}(s,a) qπ∗(s,a)=πmaxqπ(s,a)
对于最优的策略,基于动作价值函数我们可以定义为:
π ∗ ( a ∣ s ) = { 1 i f a = arg max a ∈ A q ∗ ( s , a ) 0 e l s e \pi_{*}(a|s)= \begin{cases} 1 & {if\;a=\arg\max_{a \in A}q_{*}(s,a)}\\ 0 & {else} \end{cases} π∗(a∣s)={ 10ifa=argmaxa∈Aq∗(s,a)else
只要我们找到了最大的状态价值函数或者动作价值函数,那么对应的策略 π ∗ \pi^* π∗就是我们强化学习问题的解。同时,利用状态价值函数和动作价值函数之间的关系,我们也可以得到:
v π ∗ ( s ) = max a q π ∗ ( s , a ) v_{\pi^*}(s) = \max_{a}q_{\pi^*}(s,a) vπ∗(s)=amaxqπ∗(s,a)
反过来,我们利用最优价值函数关系:
q ∗ ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) q_{*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{*}(s') q∗(s,a)=Rsa+γs′∈S∑Pss′av∗(s′)
则我们可以得到和上一节类似的式子:
v ∗ ( s ) = max a ( R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) ) v_{*}(s) = \max_a(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{*}(s')) v∗(s)=amax(Rsa+γs′∈S∑Pss′av∗(s′))
q ∗ ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a max a ′ q ∗ ( s ′ , a ′ ) q_{*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^a\max_{a'}q_{*}(s',a') q∗(s,a)=Rsa+γs′∈S∑Pss′aa′maxq∗(s′,a′)