赞
踩
定义:强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。
强化学习的特点:
定义:马尔科夫性又称马氏性,指的是过程或者系统在时刻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+1∣St]=P[St+1∣S1,S2,…,St]
概念:一个变量,变量的值取决于随机事件的结果
一般使用大写字母来表示随机变量,如: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
x∈X∑p(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=1∑∞xkpk
随机抽样也叫概率抽样,有如下几个特点:
#使用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)
比如在下图超级玛丽游戏中:
当前的状态state可以认为是上图的这个画面
对于马里奥而言,在这个状态下可以可以做向左,向右,向上的三个动作,马里奥做的动作就叫作action。
在本例中马里奥被称为agent,在一个动作里,动作是由谁达成的,谁就是agent。
在上例中对于马里奥而言,可以有三种动作,向上,向左和向右。policy的作用即根据观测到的状态然后做出决策来控制agent运动。
比如说给定一个状态,将当前状态输入到policy函数
π
\pi
π中,会输出向左的概率是0.2,向右的概率是0.1,向上的概率是0.7
π
(
left
∣
s
)
=
0.2
,
π
(
right
∣
s
)
=
0.1
π
(
up
∣
s
)
=
0.7
π( left ∣s)=0.2,π( right ∣s)=0.1π( up ∣s)=0.7
π( 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最好是概率密度函数,动作最好是随机抽样得到的
要有随机性。
agent做出一个动作,游戏就会给出一个奖励。奖励通常有自己定义,但奖励定义的好坏非常影响强化学习的结果。
在超级玛丽的游戏例子中,可以给出如下奖励定义方法:
强化学习的目标就是获得的奖励总和尽量要高
从旧状态→新状态叫作状态转移(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(s′∣s,a)=P(S′=s′∣S=s,A=a) 条件概率密度函数
含义:如果观测到当前的状态s以及动作a,p函数输出状态变成 s ′ s^{\prime} s′ 的概率
举例说明状态转移的随机性:在上图的例子中,马里奥会向上跳这个动作是确定的。但敌人可能向左走,也可能向右走,向左走的概率是0.8,向右走的概率是0.2,这个概率对于玩家而言是不清楚的,只要程序自己知道,所以对于下一个状态而言,只能确定马里奥是向上跳的,但不清楚敌人如 何移动,所以状态的转移是随机的(因为状态的意思可以理解为下一幅定格图片)。
agent和环境的交互,在超级玛丽的例子中,agent是马里奥,环境是游戏程序。
agent在看到状态$ S_{t} 之后,会做出相应的动作 之后,会做出相应的动作 之后,会做出相应的动作a_{t}$,动作可以是向左走,向右走,或者是向上跳;agent做出动作之后,环境会更新
状态,把状态变成 s t + 1 s_{t+1} st+1,同时环境还会给agent一个奖励 r t r_{t} rt。
随机性共有两个来源:
第一个随机性是来源于agent的动作,因为动作是根据policy函数输出的概率随机抽样得到的,用policy函数来控制agent。
在获得每种动作的概率后,因为agent可以做其中任意一种动作,可能向左,向右,或者向上,但这些动作的概率有大有小。
π
(
"left"
∣
S
)
=
0.2
,
π
(
"right"
∣
s
)
=
0.1
π
(
"up"
∣
S
)
=
0.7
π( "left" ∣S)=0.2,π( "right" ∣s)=0.1π( "up" ∣S)=0.7
π( "left" ∣S)=0.2,π( "right" ∣s)=0.1π( "up" ∣S)=0.7
第二个随机性来源于状态转移,假设agent做出了向上跳的动作
在做出向上的动作后,环境用状态转移函数P算出概率,然后用概率来随机抽样得到下一个状态
S
′
S^{\prime}
S′,因此每种状态都有可能,是随机的。
在上文的超级玛丽游戏中,如何让AI自动打赢游戏,通过强化学习学出policy函数 π \pi π ,AI用policy函数来控制agent运动。
AI控制的执行流程为:
持续上述流程可以得到一个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}
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)
return的随机性来源
- 动作具有随机性 P [ A = a ∣ S = s ] = π ( a ∣ s ) \mathbb{P}[A=a \mid S=s]=\pi(a \mid s) P[A=a∣S=s]=π(a∣s)
- 新状态具有随机性 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′=s′∣S=s,A=a]=p(s′∣s,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是一个随机变量。
由于$ 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[Ut∣St=st,At=at]
该期望的求法:
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的好坏程度。
如何把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就应该向上跳等等。
$ 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.)
Vπ(st)=EA[Qπ(st,A)]=∑aπ(a∣st)⋅Qπ(st,a). (Actions are discrete.) Vπ(st)=EA[Qπ(st,A)]=∫π(a∣st)⋅Qπ(st,a)da. (Actions are continuous.)
Vπ(st)=EA[Qπ(st,A)]=∑aπ(a∣st)⋅Qπ(st,a). (Actions are discrete.) Vπ(st)=EA[Qπ(st,A)]=∫π(a∣st)⋅Qπ(st,a)da. (Actions are continuous.)
如果
π
\pi
π是固定的,那么状态s越好,那么状态价值函数的值越大。
如果 π \pi π越好,那么状态价值函数的平均值就越大。
第一种控制方式:
学习得到policy函数 π ( a ∣ s ) \pi(a|s) π(a∣s),即策略学习,如果有了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)函数,得到两者之一即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。