文章目录
写在前头
- 如果一个函数表示为 f ( x ) f(x) f(x) 那么证明当前的函数 f f f 只与 x x x 这个量有关
- 同样的,下面涉及到的 π ( s , a ) \pi(s, a) π(s,a) 代表 π \pi π 函数只与 s , a s, a s,a 这两个量有关
随机变量(Random Variable)
- 是一个未知的量,他的值取决于一个 随机事件 的结果
- 在这个例子中,
抛硬币
这个 随机事件 有两个结果,即: X = 0 , X = 1 X=0, X=1 X=0,X=1 - 随机变量
X
X
X 之所以是
变量
因为抛硬币之前,并不知道 X X X 的具体值是多少 - 对随机变量 X X X 的两种不同取值分别可以计算其 概率,记作 P ( X = 0 ) , P ( X = 1 ) \mathbb{P}(X=0), \mathbb{P}(X=1) P(X=0),P(X=1)
- 如果一个随机事件的所有可能情况是有限的(离散的),当我们把 X X X 所有情况的发生概率都被列举出来,就组成了随机事件 X X X 的概率分布。比如当前例子中 X X X 只能为 0 / 1 0 / 1 0/1 因此 X X X 的概率分布如果画出来的话就是一个均匀分布
- 在这个例子中,
可视化随机变量及其概率分布
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 随机采样,按照概率分布 p(x=0)=0.5, p(x=1)=0.5 进行采样 1000 次
x = np.random.choice(['positive', 'negative'], size=(1000,), p=[0.5, 0.5])
sns.histplot(x)
plt.show()
随机变量及其观测值
- 我们用大写字母 X X X 表示一个 随机变量
- 针对每一次对 随机变量 的观测值,我们用
x
x
x 表示
- 假设扔了四次骰子,那么会有四次不同的结果,这四次结果分别用 x 0 , . . . x 3 x_0,...x_3 x0,...x3 表示,他们可能为 1 1 1 或者 0 0 0
- x x x 只是一个数,没有任何随机性
概率密度函数(Probability Density Function, PDF)
- PDF 的物理意义:它反映了某个随机变量 X X X 在一个特定的取值点 ( 0 / 1 0 / 1 0/1) 处的可能性
- 我们在第一部分的可视化中可视化了
抛硬币
这个随机事件的所有取值的 概率分布,即,我们列出了在所有取值的情况下随机变量 X X X 的概率情况。 - 如果不像
抛硬币
活动,假设当前的随机事件是一个连续型的,即,随机事件对应的随机变量 X X X 的取值有无穷多种。这时候我们不能用离散的概率分布来观察每种取值的情况,我们选择采用一个概率密度函数 p ( x ) p(x) p(x) 来表示任一取值点的概率。
- 例如本图中的红点,表示在
X
=
0.8
X=0.8
X=0.8 这一点对应的概率值
P
(
X
=
0.8
)
\mathbb{P}(X=0.8)
P(X=0.8)
- 本图针对的是离散的 X X X 的概率密度函数,可以看到 p ( 1 ) = 0.2 , p ( 3 ) = 0.5 p(1)=0.2, p(3)=0.5 p(1)=0.2,p(3)=0.5
- 例如本图中的红点,表示在
X
=
0.8
X=0.8
X=0.8 这一点对应的概率值
P
(
X
=
0.8
)
\mathbb{P}(X=0.8)
P(X=0.8)
- 概率密度函数 有如下性质:
- 当 p ( x ) p(x) p(x) 是连续的,那么我们对其在整个 X X X 的值域 X \mathcal{X} X 中进行积分,最终的结果是 1 1 1
- 而在 p ( x ) p(x) p(x) 是离散的情况下,对应的我们在值域 X \mathcal{X} X 上进行求和运算,最终也可以得到 1 1 1
期望 (Expectation)
- 还是区分离散和连续两种情况
- 既然随机变量 X X X 有很多种可能性,而且每一种可能性都属于 X \mathcal{X} X,那么我们将所有的取值 x i x_i xi 乘以它对应的概率值 p ( x i ) p(x_i) p(xi) 并且求和就可以得到我们对当前随机事件 X X X 的一个整体的衡量,也就是上图公式中表示的那样。
- 举个更具体的例子,现在你在赌骰子,每个面的概率 p ( x i ) , i ∈ [ 1 , . . . , 6 ] p(x_i), i\in[1,...,6] p(xi),i∈[1,...,6] 都是 1 6 \frac{1}{6} 61,那么当你投出骰子的那一刻,期望的点数是多少?计算方式就是: E = ∑ i n = 6 i ∗ p ( x i ) = 1 6 ∗ 1 + 1 6 ∗ 2 + 1 6 ∗ 3 + 1 6 ∗ 4 + 1 6 ∗ 5 + 1 6 ∗ 6 \mathbb{E}=\sum_{i}^{n=6}i * p(x_i)=\frac{1}{6}*1+\frac{1}{6}*2+\frac{1}{6}*3+\frac{1}{6}*4+\frac{1}{6}*5+\frac{1}{6}*6 E=i∑n=6i∗p(xi)=61∗1+61∗2+61∗3+61∗4+61∗5+61∗6
随机抽样(Random Sampling)
-
箱子里有 10 个球,2红,5绿,3蓝
-
从箱子里随机拿一个出来,这个过程就是 随机抽样
-
通常我们更加常用的描述方式是:针对某一个概率分布进行随机抽样,即,我们把上面的场景如下描述:
- 箱子里有多少个球未知,但是拿到红球的概率是 0.2, 绿球概率 0.5,蓝球概率 0.3
- 从这个箱子中随机拿出一个球
-
从数学角度来看,因为我是从箱子里进行随机抽样,所以理论上我可以抽无限多次,那么哪怕只有 10 个球,因为我是无限多次随机采样,所以本质上最终还是取决于不同颜色球的概率,而不是某种颜色球的具体数量。因此按照分布随机采样才是正确的理解方式。
强化学习的术语
场景
- 假设我们下面所有的描述都是针对
超级玛丽
这个游戏- 这个游戏是基于 python 的库
gym
构建的,gym
封装了很多不同的游戏,可以通过调用方法
的方式来获得游戏在某一时刻的state
环境状态(State)
-
不同时刻游戏环境呈现出的状态就是
state
,比如目前这一个时刻,环境中存在的金币数量、马里奥的位置、蘑菇的位置,这些都是构成state
的一个部分 -
在代码实现的过程中,
state
往往被表示为一个数组# pip install gym # pip install gym_super_mario_bros import gym from gym import envs # print all the game name env_specs = envs.registry.keys() print(env_specs) # if using macos, it is supposed to specify the render_mode, otherwise the window would not be triggered env = gym.make('SuperMarioBros-v0', render_mode='human', apply_api_compatibility=True) env.reset() for _ in range(1000): env.render() state, reward, is_done, info, _ = env.step(env.action_space.sample()) # 采取随机行动 print(f"states: {state}") print(f"states shape: {state.shape}") break env.close()
states: [[[104 136 252] [104 136 252] [104 136 252] ... [104 136 252] [104 136 252] [104 136 252]] [[104 136 252] [104 136 252] [104 136 252] ... [104 136 252] [104 136 252] [104 136 252]] [[104 136 252] [104 136 252] [104 136 252] ... [104 136 252] [104 136 252] [104 136 252]] ... [[240 208 176] [228 92 16] [228 92 16] ... [228 92 16] [228 92 16] [ 0 0 0]] [[240 208 176] [228 92 16] [228 92 16] ... [228 92 16] [ 0 0 0] [ 0 0 0]] [[228 92 16] [ 0 0 0] [ 0 0 0] ... [ 0 0 0] [ 0 0 0] [228 92 16]]] states shape: (240, 256, 3)
-
当然
gym
中不同的游戏的state
表示都不同,有些游戏的state
非常简单 -
在后文中,我们统一使用 s s s 来表示
state
行为(Action)
-
action
表示我们的agent
(本文中的agent
就是马里奥)在面对一个环境当前state
的时候采取的行动,在当前的例子中,action
有256
种不同的值,代表马里奥可以采取256
种不同的操作print(f"action space: {env.action_space.n}")
action space: 256
-
我们对当前情况进行简化,我们假设马里奥没有
256
个action
,我们就认为面对一个state
马里奥只有 3 3 3 种状态up, left, right
,因此我们可以表示action
为: A c t i o n a ∈ { l e f t , r i g h t , u p } Action~a\in \{left, right, up\} Action a∈{left,right,up}
- 在这个例子中,
action
是一组离散的取值,根据上面的知识我们很容易将action
看做是一个随机变量 A A A,这个随机变量的取值情况只有 3 3 3 种 - 当我们关注一些其他的任务,比如
开车
游戏,方向盘转动的角度是连续的
,因此在那种情况下 A A A 的取值是连续的
策略(Policy)
- 通常我们用一个函数
π
(
s
,
a
)
→
[
0
,
1
]
\pi(s, a) \rightarrow [0,1]
π(s,a)→[0,1] 来表示
policy
- 显然,我们认为
π
\pi
π 是关于
state
和action
的函数 - 当给定一个
state
时,agent
按照何种策略来选取action
呢?这个过程就是 π \pi π 函数来决定的
- 比如当前这个画面,画面中的信息就是环境的
state
,agent
根据 π \pi π 来决定采取up, left, right
行为
- 比如当前这个画面,画面中的信息就是环境的
- 一种
Reinforcement Learning
(PPO算法)学习的目标就是:学习一个好的 π \pi π 函数,这样当我们面对环境所处的state
就可以采取正确的action
来使得整个游戏过程的 收益最大化 ( 我们在后面会定义什么是收益
,以及如何使其最大化,目前这里先做个了解),最终赢得游戏。
- 如果进行形式化,我们将
π
\pi
π 函数定义为一个
概率密度函数
,给定一个 s s s, π \pi π 函数返回所有 a c t i o n action action 可能发生的概率 - 虽然在这个例子中,
π
(
u
p
∣
s
)
\pi(up | s)
π(up∣s) 的概率最大(0.7),但是在实际的操作中,我们仅仅会按照这个
π
\pi
π 概率密度函数 进行随机抽样,而不会将当前
s
s
s 下的
action
定死为up
,也就是说,虽然向上的行为概率最大,但依然有left, right
的可能性!!!这个对于 π \pi π 函数的训练非常重要 - 因为如果我们因为
π
\pi
π 给出了
up
的概率最大而将当前时刻的 a a a 定死为up
那么就完全没有随机性了,那智能体
就会变成弱智体
,就会产生问题。因为我们进行的是博弈训练,如果你面对某种局势的时候一定会采取相同的处理,那么对手就有可能赢你。 - 通过
π
\pi
π 进行随机抽样引入了
Reinforcement Learning
过程中的 第一部分随机性
奖励(Reward)
- 奖励通常是强化学习中非常重要的部分,奖励的定义方式决定了最终的优化目标,而优化目标决定了训练效果。
reward
通常是我们自己针对一个特定的任务来进行制定的。但是在gym
库中的每个游戏,采取特定动作的reward
已经被定义好了。
- 比如当前游戏中,在第
i
i
i 时刻:
- 马里奥吃金币,那么这个
time step
的reward
就会增加 1 1 1 - 马里奥赢得游戏,
reward
增加10000
- 马里奥输了游戏,
reward
减少10000
- 当前时间步马里奥什么也没做,
reward
增加 0 0 0
- 马里奥吃金币,那么这个
- 之所以让
win
和lose
游戏的reward
远大于吃金币
,是因为我们最终的优化目标是 一局游戏(episode) 中的reward
最大化,而不是单个步骤,放大win
和lose
的值是防止马里奥只吃金币
而不想着怎么赢得游戏。
- 比如当前游戏中,在第
i
i
i 时刻:
状态转移(state transition)
- 在时刻
i
i
i 环境的状态是
s
i
s_i
si 这时候,根据
π
\pi
π 函数,马里奥选择
up
,此时环境的 s i → s i + 1 s_i \rightarrow s_{i+1} si→si+1 这个过程就是状态转移
状态转移
可以是固定的
,也可以是随机的
,大多数情况下是随机的
,并且状态转移
的随机性来源于环境,这是由游戏程序决定的,对agent
是不可见的。 这是Reinforcement Learning
中第二部分随机性的来源。- 具体的例子:当面对
s
i
s_i
si,马里奥采取了
up
行为(如图),这时候环境中的蘑菇
可以向左(0.8)也可以向右(0.2),但这仍然不是确定的,而是从这个概率分布中进行抽样得出结果。如果玩过游戏你就知道,这些环境中的物体的移动并不固定,哪怕你针对相同的state
采取的是相同的action
, 环境也不会完全按照某种特定的方式移动。这就保证了环境可以源源不断地产生随机性来保证agent
训练过程中能够遇到足够多的情况。 - 总结一下就是:
state transition
引入了随机性,而且这是游戏中定义的随机操作,对agent
来说是无法预知的 状态转移
同样是一个概率密度函数
p ( s ′ , s , a ) p(s^{'}, s, a) p(s′,s,a),我们称它为状态转移函数
,形式化表达为: p ( s ′ ∣ s , a ) = P ( S ′ = s ′ ∣ S = s , A = a ) p(s^{'}|s, a)=\mathbb{P}(S^{'}=s^{'} | S=s, A=a) p(s′∣s,a)=P(S′=s′∣S=s,A=a)- 也就是,基于环境状态
state
s s s 的条件下,并采取了action
a a a,的情况下,下一刻的环境状态state'
将会是 s ′ s^{'} s′ 的概率
环境与 agent 的交互过程
- 环境处于 s t s_t st
agent
根据环境状态,按照当前的 π ( s , a ) \pi(s,a) π(s,a)策略函数
随机抽样一个action
a t a_t at- 根据
a
t
a_t
at 环境会给出当前时刻
agent
获得的reward
值 r t r_t rt,同时环境按照 p ( s ′ , s , a ) p(s^{'}, s, a) p(s′,s,a)状态转移函数
进行随机采样,得到新的环境状态 s t + 1 s_{t+1} st+1
强化学习中的随机性来源
- 在上面的内容中已经强调过了,随机性来源于两个过程:
-
agent
根据 π ( s , a ) \pi(s, a) π(s,a)策略函数
得到当前 s s s 下所有 a a a 的概率分布,然后从这个分布中进行随机采样
得到最终的action
,这个过程中的随机采样
引入了agent
行为的随机性
-
环境
根据 p ( s ′ , s , a ) p(s', s, a) p(s′,s,a)状态转移函数
得到当前 s s s 和 a a a 确定了之后下个state
所有情况的概率分布,然后从这个分布中随机采样
获得s'
,这个过程中的随机采样
引入了环境
变化的随机性
-
如何用 agent
玩游戏
- 我们的目的就是用深度学习构建一个网络,这个网络学习的目的就是一个
π
(
s
,
a
)
\pi(s, a)
π(s,a) 函数,
agent
在所有 s i s_i si 的行为 a i a_i ai 都有这个 π \pi π 函数随机抽样得到 - 环境根据
a
i
a_i
ai 给出
reward
r i r_i ri 并且根据环境内部提前定义好的
p ( s ′ , s , a ) p(s', s, a) p(s′,s,a)状态转移函数
生成 s i + 1 s_{i+1} si+1 - 这样一直循环下去直到游戏结束。
- 这个过程中会形成一个
轨迹
(trajectory),轨迹中包含的是 s 1 , a 1 , r 1 , . . . , s T , a T , r T s_1, a_1, r_1,..., s_T, a_T, r_T s1,a1,r1,...,sT,aT,rT,这个轨迹记录了我们后面训练模型所需要的所有信息
奖励(Rewards) & 收益(Returns)
-
t
t
t 时刻的
return
记作 U t U_t Ut,代表的是从 t t t 时刻到未来所有的reward
的总和
U t = R t + R t + 1 + R t + 2 + . . . U_t=R_t+R_{t+1}+R_{t+2}+... Ut=Rt+Rt+1+Rt+2+...
折扣回报(Discounted Return)
-
但是我们并不能把 R t + 1 R_{t+1} Rt+1 和 R t R_t Rt 看做同等重要的存在,因此当前时刻的
reward
R t R_t Rt 应该是比未来的reward
更有价值,也就是未来的reward
应该打一个折扣 -
用 γ \gamma γ 作为衰减(折扣)系数,未来时刻的
reward
R t + 1 , . . . R_{t+1},... Rt+1,... 都要打折扣,因此我们得到discounted return
也就是: U t = R t + γ R t + 1 + γ 2 R t + 2 + . . . U_t=R_t+\gamma R_{t+1}+\gamma^2R_{t+2}+... Ut=Rt+γRt+1+γ2Rt+2+... -
未来的某个时刻的
reward
离当前时刻 R t R_{t} Rt 越远,那么其reward
对当前时刻的return
影响就越小 -
γ \gamma γ 在实际操作中,是一个超参数,是我们人为设定的
-
如果当前游戏已经结束,那么所有的
reward
应该表示为小写字母,代表对一个随机变量
的观测值,但是目前我们尚且不知道未来的reward
,因此在公式里我们采用的还是大写字母 R t , R t + n , . . . R_t, R_{t+n},... Rt,Rt+n,...表示某一时刻的reward
以及 U t U_t Ut 表示某一时刻的return
- 回顾上面的知识,我们再次强调
强化学习
中两个随机性的来源:Action
是从一个 π ( s , a ) \pi(s,a) π(s,a) 中随机采样出来的,因此引入了随机性: P ( A = a ∣ S = s ) = π ( a ∣ s ) \mathbb{P}(A=a|S=s)=\pi(a|s) P(A=a∣S=s)=π(a∣s)- 环境的
state
是从 p ( s ′ , s , a ) p(s',s,a) p(s′,s,a) 中随机采样的,因此引入了随机性: P ( S ′ = s ′ ∣ S = s , A = a ) = p ( s ′ ∣ s , a ) \mathbb{P}(S'=s'|S=s,A=a)=p(s'|s,a) P(S′=s′∣S=s,A=a)=p(s′∣s,a)
- 所以针对任意时刻
i
i
i,其
reward
R i R_i Ri, 是取决于 S i , A i S_i, A_i Si,Ai 的。直观理解就是:马里奥在时刻 i i i 获得的reward
是与当前时刻的环境状态 S i S_i Si 以及马里奥采取的行动 A i A_i Ai 有关的。 - 所以再考虑
U
i
U_i
Ui 和
R
i
R_i
Ri 的关系,由于
U
i
U_i
Ui 不仅和当前的
R
i
R_i
Ri 有关,还与以后所有的时刻的
reward
( R i + 1 , R i + 2 , . . . , R i + n R_{i+1}, R_{i+2},...,R_{i+n} Ri+1,Ri+2,...,Ri+n) 相关,因此, U i U_i Ui 与随机变量
A i , A i + 1 , A i + 2 , . . . A_{i}, A_{i+1},A_{i+2},... Ai,Ai+1,Ai+2,... 以及随机变量
S i , S i + 1 , S i + 2 , . . . S_{i},S_{i+1},S_{i+2},... Si,Si+1,Si+2,... 都有关
价值函数(Value Functions)
- 这部分很绕很复杂,如果看不懂建议多看几遍,千万不要糊弄过去
动作价值函数(Action-Value Function)
-
通常用 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 来表示
动作价值函数
,它与agent
采取的action
以及环境的状态state
,以及策略函数 π \pi π 有关 -
动作价值函数
是从 U t U_t Ut 得到的 -
因为 U t U_t Ut 可以表示从当前时刻 t t t 到未来的
reward
总和,因此,虽然我们目前并不知道这个 U t U_t Ut 的具体值(因为 R t , R t + 1 R_t, R_{t+1} Rt,Rt+1 这些还都是随机变量,并不是具体的观测值),但是如果我们能对 U t U_t Ut 求一个期望,不就能够估算出 U t U_t Ut 了么,而这种方式也可以帮我们间接评估当前的action
是否会导致未来较好的结果。 -
所以
动作价值函数
的定义就是 U t U_t Ut 在给定 a t , s t a_t, s_t at,st 下的期望
: Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_{\pi}(s_t, a_t)=\mathbb{E}[U_t|S_t=s_t,A_t=a_t] Qπ(st,at)=E[Ut∣St=st,At=at] -
之所以是给定 a t , s t a_t, s_t at,st 是因为: 在当前 t t t 时刻,只有 a t , s t a_t, s_t at,st 是可以具体观测出来的值,而其他未来时刻的 A A A 和 S S S 尚且还是
随机变量
。对于这些随机变量
,会在我们求期望 E \mathbb{E} E 的过程中变成一个确定的值(这个过程我们称为:在求期望的过程中通过积分或求和把未来的 A A A 和 S S S 的不确定性给消掉了)- 比如扔硬币,扔到
正面
给你5
元,反面
给1
元,而正反面的概率都是 0.5 0.5 0.5,如果此时问你抛出硬币之后的收益是多少 - 如果不采用
期望
的思想,你不知道未来这个硬币扔出去是多少钱,因为扔硬币这个动作是随机的 - 但如果采用
期望
的思想,你就知道 E = 0.5 ∗ 5 + 0.5 ∗ 1 = 3 \mathbb{E}=0.5*5+0.5*1=3 E=0.5∗5+0.5∗1=3 元,这个 3 3 3 得出的同时消除了不确定性,因为你就可以认为你扔出去硬币的时候你可以拿到 3 3 3 元钱,此时你认为 3 3 3 就是你扔硬币的收益 - 结合这个了例子和上述的
未来时刻不确定的 S 和 A
如果通过 E \mathbb{E} E 的方式将 t t t 时刻之后的 S S S 和 A A A 的不确定性处理掉,我们就可以只关注 a t , s t a_t, s_t at,st 所造成的影响
- 比如扔硬币,扔到
-
同时可以看到 Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_{\pi}(s_t, a_t)=\mathbb{E}[U_t|S_t=s_t,A_t=a_t] Qπ(st,at)=E[Ut∣St=st,At=at] 中有一个 π \pi π 这说明
动作价值函数
除了 a t , s t a_t, s_t at,st 之外还与当前的策略函数
有关。这个也是可以解释的:- 因为 a t a_t at 是从 π \pi π 中随机抽样出来的
- 而当前的
策略
下的 a t a_t at 可能是一个能够使 U t U_t Ut 很大( U t = 100 U_t=100 Ut=100)的action
,但如果更换为另一个 π \pi π,那么 a t a_t at 可能导致 U t = 23 U_t=23 Ut=23,所以策略
同样与 U t U_t Ut 结果息息相关。
-
再花点时间把上面的思路整体捋一下:
- U t U_t Ut 和当前时刻 t t t 以及未来的所有时刻的 a , s a, s a,s 都有关
- 而我们实际上只能通过观察来获得当前时刻
t
t
t 的
a
t
,
s
t
a_t, s_t
at,st,那么我们如何将
t
t
t 以后时刻(未来时刻)的
a
,
s
a, s
a,s 的不确定性消除掉呢?就是采用
期望
E \mathbb{E} E 这个工具,所以我们是对 t t t 以后的所有 a , s a, s a,s 算期望
而不包括 a t , s t a_t, s_t at,st 所以再公式中是 E ( U t ∣ a t , s t ) \mathbb{E}(U_t|a_t, s_t) E(Ut∣at,st) -
E
(
U
t
∣
a
t
,
s
t
)
\mathbb{E}(U_t|a_t, s_t)
E(Ut∣at,st) 最终会得到一个数值,这个数值表示的是:在当前
t
t
t 时刻,环境状态为
s
t
s_t
st 的情况下,采取动作
a
t
a_t
at 在当前
策略
下对agent
来说是不是一个好的action
, 这个action
如果能够导致 E \mathbb{E} E 的值越大,就反映出在当前状态下采取action
a t a_t at 越英明! - 但也需要注意,
E
\mathbb{E}
E 的值还取决于当前
agent
采用的策略
π \pi π
最优动作价值函数(Optimal action-value function)
最优动作价值函数
Q ∗ ( s t , a t ) Q^{*}(s_t, a_t) Q∗(st,at) 是由动作价值函数
Q π ( s t , a t ) Q_{\pi}(s_t, a_t) Qπ(st,at) 衍生而来。- 上一部分说了,当给定 s t , a t s_t, a_t st,at 如果采取不同的 π \pi π,得到的 E \mathbb{E} E 也会不同,那么很自然的我们就想到,要对 π \pi π 进行选择,选哪个能让 E \mathbb{E} E 最大的策略函数 π o p t i m a l \pi_{optimal} πoptimal,即: Q ∗ ( s t , a t ) = max π Q π ( s t , a t ) Q^{*}(s_t, a_t) = \max_{\pi}Q_{\pi}(s_t, a_t) Q∗(st,at)=πmaxQπ(st,at)
- 此时,由于取了最优的 π \pi π,所以 Q ∗ Q^{*} Q∗ 也就与 π \pi π 无关了
-
Q
∗
(
s
t
,
a
t
)
Q^{*}(s_t, a_t)
Q∗(st,at) 能够说明:在时刻
t
t
t,当前
s
t
s_t
st 的环境状态下,采取
a
t
a_t
at 这个动作有多好(不受
策略
影响,因为策略
已经是最优的)
状态价值函数(State-value Funciton)
- 上面的知识中提到,对于 Q π ( s t , a t ) Q_{\pi}(s_t, a_t) Qπ(st,at),当前时刻是 t t t,对于此后的时刻的 A A A 和 S S S 我们统统用 E \mathbb{E} E 来消掉,从而只关注当前 t t t 时刻的 a t , s t a_t, s_t at,st,因为只有 a t , s t a_t, s_t at,st 是当前时刻真实能够观测出的值。
- 但是在这里,我们更进一步,我们不再通过从
π
\pi
π 中随机抽样出
a
t
a_t
at 而是通过
期望
消掉所有的 a t a_t at 的随机性(比如在 s t s_t st 能够采取的动作有 5 5 5 个,那就通过期望
算出这 5 5 5 种动作的期望取值,这就是 E A [ Q π ( s t , A ) ] \mathbb{E}_{A}[Q_{\pi}(s_t, A)] EA[Qπ(st,A)]) 这样结果 V π ( s t ) V_{\pi}(s_t) Vπ(st) 仅与 π , s t \pi, s_t π,st 有关 - 这样做的目的是,我们消除了
t
t
t 时刻在
π
\pi
π
策略
下 A A A 的随机性,只看state
,反映了在当前时刻 t t t 游戏的形势如何。换句话说:形势对我们有利、有害、还是双方赢面差不多。 V π ( s t ) V_{\pi}(s_t) Vπ(st) 越大代表在 t t t 时刻,采取策略
π \pi π 越具有优势 - 当然这是
离散
的action
的情况,在连续
的action
情况下,我们采用积分来实现上述步骤。
价值函数总结(Summary)
- 动作价值函数:
Q
π
(
s
t
,
a
t
)
Q_{\pi}(s_t, a_t)
Qπ(st,at) 反映了在
策略
π \pi π 下,面对环境状态
s t s_t st,采取action
a t a_t at 是否明智 - 最优动作价值函数:
Q
∗
(
s
t
,
a
t
)
Q^{*}(s_t, a_t)
Q∗(st,at) 反映了在面对
环境状态
s t s_t st,采取action
a t a_t at 是否明智(消除了策略 π \pi π的影响) - 状态价值函数:
V
π
(
s
t
)
V_{\pi}(s_t)
Vπ(st) 反映了在当前
策略
π \pi π下,面对环境 s t s_t st,我们是否处于劣势 / 优势 - 当然如果我们面对 状态价值函数 再对
S
S
S 求期望,得到
E
S
[
V
π
(
S
)
]
\mathbb{E}_{S}[V_{\pi}(S)]
ES[Vπ(S)] 就与
S
S
S 都无关了,单纯反映
π
\pi
π 这个
策略
的好坏了