一、预备知识

1、什么是强化学习?

定义:强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。

强化学习的特点:

  • 没有监督数据、只有奖励信号。
  • 奖励信号不一定是实时的,而很可能是延后的,有时甚至延后很多。
  • 时间(序列)是一个重要因素。
  • 当前的行为影响后续接收到的数据。

2、马尔可夫决策过程

马尔可夫性

定义:马尔科夫性又称马氏性,指的是过程或者系统在时刻t0所处的状态为已知的条件下,过程在时刻t>t0所处状态的条件分布与过程在时刻t0之前所处的状态无关。

通俗理解:今天的结果与昨天有关与前天无关。

举例:一天内,晚餐的食量由午餐的时间和摄入直接决定,而由早餐的时间和摄入间接决定。

公式表达形式:
P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S 1 , S 2 , … , S t ] P\left[S_{t+1} \mid S_{t}\right]=P\left[S_{t+1} \mid S_{1}, S_{2}, \ldots, S_{t}\right] P[St+1St]=P[St+1S1,S2,,St]

二、基本概念

1、概率论相关概念

随机变量

概念:一个变量,变量的值取决于随机事件的结果

一般使用大写字母来表示随机变量,如:X

一般使用小写字母来表示随机变量的观测值,如:x

概率密度函数

意味着随机变量在某个确定的取值点附近的可能性

连续的概率分布,如:高斯分布

高斯分布的概率密度函数为:
f ( x ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^2}{2 \sigma^2}\right) f(x)=2π σ1exp(2σ2(xμ)2)
其中的 σ \sigma σ为标准差, μ \mu μ为均值。

高斯分布的概率密度函数曲线为:

在这里插入图片描述
图中的对称轴为 σ \sigma σ,横轴为随机变量的取值,纵轴为概率密度。

离散的概率分布,如 X ϵ \epsilon ϵ {1,3,7}

概率密度函数表示为:

p ( 1 ) = 0.2 , p ( 3 ) = 0.5 , p ( 7 ) = 0.3 p(1)=0.2,p(3)=0.5,p(7)=0.3 p(1)=0.2,p(3)=0.5,p(7)=0.3

概率密度函数图:

在这里插入图片描述

随机变量的相关性质

假设随机变量X的定义域为 χ \chi χ

对于连续型随机变量:
∫ χ p ( x ) d x = 1 \int_\chi p(x) d x=1 χp(x)dx=1
对于离散型随机变量:
∑ x ∈ X p ( x ) = 1 \sum_{x \in \mathcal{X}} p(x)=1 xXp(x)=1

期望

假设随机变量X的定义域为 χ \chi χ

对于连续型分布,若积分收敛,则随机变量期望的表达式为:
E ( X ) = ∫ − ∞ ∞ x f ( x ) d x E(X)=\int_{-\infty}^{\infty} x f(x) d x E(X)=xf(x)dx
对于离散型分布,随机变量的期望表达式为:
E ( X ) = ∑ k = 1 ∞ x k p k E(X)=\sum_{k=1}^{\infty} x_k p_k E(X)=k=1xkpk

随机抽样

随机抽样也叫概率抽样,有如下几个特点:

  • 抽样时按一定的概率以随机原则抽取样本
  • 每个单位被抽中的概率是已知的的,或者是可以计算出来
  • 当用样本对总体目标量进行估计时,要考虑到每个样本单位被抽中的概率,即估计量不仅与样本单位的观测值有关,也与其入样概率有关
#使用numpy库的choice函数进行随机抽样
from numpy.random import choice
samples = choice(['R','G','B'],size = 100,p=[0.2,0.5,0.3])
print('R的个数:',list(samples).count('R'))
print('G的个数:',list(samples).count('G'))
print('B的个数:',list(samples).count('B'))
print(samples)

2、强化学习相关术语

state and action

比如在下图超级玛丽游戏中:

在这里插入图片描述

当前的状态state可以认为是上图的这个画面

在这里插入图片描述

对于马里奥而言,在这个状态下可以可以做向左,向右,向上的三个动作,马里奥做的动作就叫作action。

在本例中马里奥被称为agent,在一个动作里,动作是由谁达成的,谁就是agent。

policy π \pi π

在上例中对于马里奥而言,可以有三种动作,向上,向左和向右。policy的作用即根据观测到的状态然后做出决策来控制agent运动。

  • policy函数 π \pi π在数学上的定义为: ( s , a ) ↦ [ 0 , 1 ] : π ( a ∣ s ) = P ( A = a ∣ S = s ) (s, a) \mapsto[0,1]: \pi(a \mid s)=\mathbb{P}(A=a \mid S=s) (s,a)[0,1]:π(as)=P(A=aS=s)
  • 含义:给定状态s,做出动作a的概率密度

比如说给定一个状态,将当前状态输入到policy函数 π \pi π中,会输出向左的概率是0.2,向右的概率是0.1,向上的概率是0.7
π (  left  ∣ s ) = 0.2 , π (  right  ∣ s ) = 0.1 π (  up  ∣ s ) = 0.7 \begin{array}{l} \pi(\text { left } \mid s)=0.2, \\ \pi(\text { right } \mid s)=0.1 \\ \pi(\text { up } \mid s)=0.7 \end{array} π( left s)=0.2,π( right s)=0.1π( up s)=0.7
如果令policy函数自动操作,则policy函数会进行随机抽样,以0.2的概率向左走,0.1的概率向右走,0.7的概率向上跳,三种情况

在抽样中都有可能发生,但是向上的可能性最大。强化学习也就是学习policy函数,只要有policy函数,就可以操作马里奥打赢游戏。

在本例中,agent动作是随机的,根据policy函数输出的概率来做动作。policy最好是概率密度函数,动作最好是随机抽样得到的

要有随机性。

reward

agent做出一个动作,游戏就会给出一个奖励。奖励通常有自己定义,但奖励定义的好坏非常影响强化学习的结果。

在超级玛丽的游戏例子中,可以给出如下奖励定义方法:

  • 向上跳吃到金币,奖励定义为: R = R + 1 R=R+1 R=R+1
  • 游戏通关,奖励定义为: R = R + 10000 R=R+10000 R=R+10000
  • 碰到了敌人,游戏结束,奖励定义为: R = R − 10000 R=R-10000 R=R10000
  • 什么都没有发生,奖励定义为: R = 0 R=0 R=0

强化学习的目标就是获得的奖励总和尽量要高

state transition

从旧状态→新状态叫作状态转移(state transition)

  • 状态转移可以是确定的,也可以是随机的,但通常状态转移是随机。

  • 状态转移的随机性是从环境中获得的,在本例中,环境就是游戏的程序,游戏的程序决定游戏的下一个状态是什么

可以把状态转移用P函数来表示: p ( s ′ ∣ s , a ) = P ( S ′ = s ′ ∣ S = s , A = a ) p\left(s^{\prime} \mid s, a\right)=\mathbb{P}\left(S^{\prime}=s^{\prime} \mid S=s, A=a\right) p(ss,a)=P(S=sS=s,A=a) 条件概率密度函数

含义:如果观测到当前的状态s以及动作a,p函数输出状态变成 s ′ s^{\prime} s 的概率

在这里插入图片描述

举例说明状态转移的随机性:在上图的例子中,马里奥会向上跳这个动作是确定的。但敌人可能向左走,也可能向右走,向左走的概率是0.8,向右走的概率是0.2,这个概率对于玩家而言是不清楚的,只要程序自己知道,所以对于下一个状态而言,只能确定马里奥是向上跳的,但不清楚敌人如 何移动,所以状态的转移是随机的(因为状态的意思可以理解为下一幅定格图片)。

agent environment interaction

agent和环境的交互,在超级玛丽的例子中,agent是马里奥,环境是游戏程序。

agent在看到状态$ S_{t} 之后,会做出相应的动作 之后,会做出相应的动作 之后,会做出相应的动作a_{t}$,动作可以是向左走,向右走,或者是向上跳;agent做出动作之后,环境会更新

状态,把状态变成 s t + 1 s_{t+1} st+1,同时环境还会给agent一个奖励 r t r_{t} rt

3、强化学习中的随机性

随机性共有两个来源:

第一个随机性是来源于agent的动作,因为动作是根据policy函数输出的概率随机抽样得到的,用policy函数来控制agent。

在这里插入图片描述
在获得每种动作的概率后,因为agent可以做其中任意一种动作,可能向左,向右,或者向上,但这些动作的概率有大有小。
π (  "left"  ∣ S ) = 0.2 , π (  "right"  ∣ s ) = 0.1 π (  "up"  ∣ S ) = 0.7 \begin{array}{l} \pi(\text { "left" } \mid S)=0.2, \\ \pi(\text { "right" } \mid s)=0.1 \\ \pi(\text { "up" } \mid S)=0.7 \end{array} π( "left" S)=0.2,π( "right" s)=0.1π( "up" S)=0.7

第二个随机性来源于状态转移,假设agent做出了向上跳的动作

在这里插入图片描述
在做出向上的动作后,环境用状态转移函数P算出概率,然后用概率来随机抽样得到下一个状态 S ′ S^{\prime} S,因此每种状态都有可能,是随机的。

4、AI自动打赢游戏

在上文的超级玛丽游戏中,如何让AI自动打赢游戏,通过强化学习学出policy函数 π \pi π ,AI用policy函数来控制agent运动。

AI控制的执行流程为:

  1. 在得到当前的状态S后,运用policy函数计算出不同动作发生的概率,再通过随机抽样得到动作 a 1 a_{1} a1
  2. 在agent做出响应动作之后,然后环境会生成下一个状态 s 2 s_{2} s2,并且给agent一个reward奖励。
  3. AI会会根据新的状态 s 1 s_{1} s1作为输入,计算下一个动作
  4. …………

持续上述流程可以得到一个trajectory轨迹: s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , ⋯   , s T , a T , r T s_{1}, a_{1}, r_{1}, s_{2}, a_{2}, r_{2}, \cdots, s_{T}, a_{T}, r_{T} s1,a1,r1,s2,a2,r2,,sT,aT,rT,即每一步的状态、动作、奖励{state,action,reward}

5、Return

Defination:Return(aka cumulative future reward) 未来累计奖励

即:$ U_{t}=R_{t}+R_{t+1}+R_{t+2}+R_{t+3}+\cdots$,假定所有奖励权重相等的情况

但未来奖励和现在的奖励的重要性程度不同

  • 未来奖励比现在奖励的价值更低
  • 未来奖励 R t + 1 R_{t+1} Rt+1应该比现在奖励 R t R_{t} Rt权重低

Defination:Discounted return(aka cumulative discounted future reward)

  • γ \gamma γ :折扣率,介于0-1之间,如果未来和现在权重相等, γ \gamma γ等于1,要是未来奖励不重要, γ \gamma γ比较小
  • U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + ⋯ U_{t}=R_{t}+\gamma R_{t+1}+\gamma^{2} R_{t+2}+\gamma^{3} R_{t+3}+\cdots Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+
  • 折扣率是一个超参数需要自己调,折扣率的大小对强化学习的结果有一定影响。

return的随机性来源

  1. 动作具有随机性 P [ A = a ∣ S = s ] = π ( a ∣ s ) \mathbb{P}[A=a \mid S=s]=\pi(a \mid s) P[A=aS=s]=π(as)
  2. 新状态具有随机性 P [ S ′ = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) \mathbb{P}\left[S^{\prime}=s^{\prime} \mid S=s, A=a\right]=p\left(s^{\prime} \mid s, a\right) P[S=sS=s,A=a]=p(ss,a)

对于任意的未来时刻 i i i,奖励reward R i R_{i} Ri取决于动作 A i A_{i} Ai和状态 S i S_{i} Si

对于给定的 t t t时刻而言,回报 U t U_{t} Ut,取决于未来所有的状态和动作。

 Return  U t  depends on actions  A t , A t + 1 , A t + 2 , ⋯  and states  S t , S t + 1 , S t + 2 , ⋯ \text { Return } U_{t} \text { depends on actions } A_{t}, A_{t+1}, A_{t+2}, \cdots \text { and states } S_{t}, S_{t+1}, S_{t+2}, \cdots  Return Ut depends on actions At,At+1,At+2, and states St,St+1,St+2,

agent的目标就是让Return U t U_{t} Ut尽量大,越大越好,除此之外,假如知道了 U t U_{t} Ut我们可以清楚这局游戏是快赢了还是快输了。但 U t U_{t} Ut是一个随机变量。

6、Value-function

Action-value function

由于$ U_{t}=R_{t}+R_{t+1}+R_{t+2}+R_{t+3}+\cdots 是一个随机变量,在 是一个随机变量,在 是一个随机变量,在t 时刻不知道 时刻不知道 时刻不知道U_{t}$是什么,那该如何评估当前的形势?

可以对 U t U_{t} Ut求期望,把其中的随机性都用积分积掉,得到的就是一个实数。打个比方:在抛硬币之前不知道会得到什么结果,但清楚在结果中正反面各有一半的概率,如果正面记作1,反面记作0,得到的期望就是0.5,相同的道理,对随机变量 U t U_{t} Ut求期望,就可以得到一个数,记作是 Q π Q_{\pi} Qπ:
Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_{\pi}\left(s_{t}, a_{t}\right)=\mathbb{E}\left[U_{t} \mid S_{t}=s_{t}, A_{t}=a_{t}\right] Qπ(st,at)=E[UtSt=st,At=at]
该期望的求法:

  • U t U_{t} Ut当成未来所有的动作A和未来所有的状态S的函数,未来的动作A和状态S都具有随机性。
  • 动作A的概率密度函数是policy函数 π \pi π P [ A = a ∣ S = s ] = π ( a ∣ s ) \mathbb{P}[A=a \mid S=s]=\pi(a \mid s) P[A=aS=s]=π(as)
  • 状态S的概率密度函数是动作转移函数P, P [ S ′ = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) \mathbb{P}\left[S^{\prime}=s^{\prime} \mid S=s, A=a\right]=p\left(s^{\prime} \mid s, a\right) P[S=sS=s,A=a]=p(ss,a)
  • 期望就是对未来的动作A和状态S进行求解的,把这些随机变量都用积分给积分掉,除了 S t S_{t} St A t A_{t} At其它的随机变量都被积分积掉了。
  • 求期望得到的函数被称为Action-value function,动作价值函数。

Q π ( s t , a t ) Q_{\pi}(s_{t},a_{t}) Qπ(st,at)和当前 s t s_{t} st a t a_{t} at有关,因为后面的随机变量都被积分给积掉了. s t s_{t} st a t a_{t} at被当成数值来对待,而不是当成随机变量

Q π ( s t , a t ) Q_{\pi}(s_{t},a_{t}) Qπ(st,at)还与policy函数 π \pi π有关,因为积分时会用到policy函数,不同的policy函数积分得到的值也不一样

函数 Q π ( s t , a t ) Q_{\pi}(s_{t},a_{t}) Qπ(st,at)的直观意义为:如果用policy函数 π \pi π,那么在 s t s_{t} st这个状态下,做动作 a t a_{t} at是好还是坏,一直policy函数 π \pi π Q π Q_{\pi} Qπ就会给当前状态下所有的policy函数打分,然后可以得到哪个动作好与哪个动作不好,反应当前状态 s t s_{t} st下做动作 a t a_{t} at的好坏程度。

Optimal action-value function

如何把Action-value function函数中的 π \pi π去掉?

可以对 Q π Q_{\pi} Qπ关于 π \pi π求最大化,意思是对于无数种policy函数 π \pi π,但我们应该使用最好的那一种policy函数,最好的policy 函数就是让 Q π Q_{\pi} Qπ取得最大化的 π \pi π,把得到的函数 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)称为optimal action-value function,最优动作价值函数, Q ∗ Q^{*} Q和policy函数 π \pi π无关,因为 π \pi π已经被max函数给消除掉。
Q ⋆ ( s t , a t ) = max ⁡ π Q π ( s t , a t ) Q^{\star}\left(s_{t}, a_{t}\right)=\max _{\pi} Q_{\pi}\left(s_{t}, a_{t}\right) Q(st,at)=πmaxQπ(st,at)
Q ∗ Q^{*} Q的直观意义:可以用来对动作a做出评价,如果当前的状态是 s t s_{t} st,那么 Q ∗ Q^{*} Q函数告知我们动作 a t a_{t} at好不好。比如下围棋时状态是当时的棋盘, Q ∗ Q^{*} Q函数告诉我们如果把棋子放到某个位置的胜算有多大,如果把棋子放到另外一个位置的胜算有多大。

如果有了 Q ∗ Q^{*} Q函数,那么agent就可以根据 Q ∗ Q^{*} Q对动作的评价来做出决策,给每个动作打分,如果 Q ∗ Q^{*} Q认为向上走分数高,那么agent就应该向上跳等等

State-value function

$ V_{\pi}\left(s_{t}\right)=\mathbb{E}{A}\left[Q{\pi}\left(s_{t}, A\right)\right]$,式中的A为随机变量,对A求期望把A消掉,与A无关

只与 π \pi π和状态s有关,意义是可以反应当前的局势好与不好,假如根据policy函数 π \pi π来下围棋,让 V π V_{\pi} Vπ得到当前棋盘, V π V_{\pi} Vπ会反馈当前的胜算有多大,快赢了,快输了,还是不分高下。
V π ( s t ) = E A [ Q π ( s t , A ) ] = ∑ a π ( a ∣ s t ) ⋅ Q π ( s t , a ) .  (Actions are discrete.)  V π ( s t ) = E A [ Q π ( s t , A ) ] = ∫ π ( a ∣ s t ) ⋅ Q π ( s t , a ) d a .  (Actions are continuous.)  \begin{array}{l} V_{\pi}\left(s_{t}\right)=\mathbb{E}_{A}\left[Q_{\pi}\left(s_{t}, A\right)\right]=\sum_{a} \pi\left(a \mid s_{t}\right) \cdot Q_{\pi}\left(s_{t}, a\right) . \quad \text { (Actions are discrete.) } \\ V_{\pi}\left(s_{t}\right)=\mathbb{E}_{A}\left[Q_{\pi}\left(s_{t}, A\right)\right]=\int \pi\left(a \mid s_{t}\right) \cdot Q_{\pi}\left(s_{t}, a\right) d a . \text { (Actions are continuous.) } \end{array} Vπ(st)=EA[Qπ(st,A)]=aπ(ast)Qπ(st,a). (Actions are discrete.) Vπ(st)=EA[Qπ(st,A)]=π(ast)Qπ(st,a)da. (Actions are continuous.) 
如果 π \pi π是固定的,那么状态s越好,那么状态价值函数的值越大。

如果 π \pi π越好,那么状态价值函数的平均值就越大。

7、AI控制agent

第一种控制方式:

学习得到policy函数 π ( a ∣ s ) \pi(a|s) π(as),即策略学习,如果有了policy函数 π \pi π,那么根据当前状态,就可以得到 π \pi π函数的输出值,即为每一种动作的概率,然后根据概率做随机抽样得到当前的动作。

第二种控制方式:

学习Optimal action-value function(最优动作价值函数) Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at),即价值学习,在得到 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)后,agent就可以根据 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)函数来做相应的动作, Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)得出,如果处在状态s,那么做出动作a是好还是坏。每观测到一个状态 s t s_{t} st就作为 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)函数一个输入,让 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)对每一个动作都做一个评价,这样就可以得到向左,向上,向右每一个状态的Q值,哪一个Q值大就选哪个,因为Q值是对未来奖励总和的期望,Q值大的未来将会获得更大的奖励。
 choose the action that maximizes the value:  a t = argmax ⁡ a Q ⋆ ( s t , a ) .  \text { choose the action that maximizes the value: } a_{t}=\operatorname{argmax}_{a} Q^{\star}\left(s_{t}, a\right) \text {. }  choose the action that maximizes the value: at=argmaxaQ(st,a)

强化学习的目的就是学习得到 π \pi π函数或者是 Q ∗ ( s t , a t ) Q^{*}(s_{t},a_{t}) Q(st,at)函数,得到两者之一即可。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐