赞
踩
Supervised learning
或者 Unsupervised learning
又或者 self-supervised learning
来进行训练模型。label-based
+ 梯度下降的训练方式。RL 倾向于一种全新的训练策略。在下面的描述中,会使用以下缩写:
environment
-> e
environment state
-> es
action
-> a
Reinforcement learning
-> RL
比如 alphaGo,在
0
0
0 时刻的 alphago 看到的 es
是一个空棋盘,所以他选择 a
是下载某个地方一颗棋子
这个时候,对手就是 e
,他会有所行动,也就是 es
发生改变:棋盘上多了一颗对方的白子
于是 alphago 根据当前的 es
再采取新的 a
:下在另一个位置黑子
但是下棋这个任务非常特殊,因为如果我们把 对弈胜利
的 reward=1,而 对弈失败
的 reward=-1 那么就会发现,只有在这个棋局的最后一个 a
之后才会产生 reward,其他步骤模型都没有得到任何的反馈,那么这个就非常不好,因为我们知道在我们熟知的一些监督任务中,每个 step 或者 epoch,模型都会根据当前的 loss 做梯度下降来更新参数。但是如果下棋只有最后一个步骤有 reward,那模型很难学到东西。这种困难的问题叫做 sparse reward
(稀疏奖励) 。这种问题在 RL 中是经常出现的。
label
e
)进行下棋,然后根据大量的训练来获得真正的下棋能力,面对不同的对手都可以随机应变。supervised learning + RL
也就是先通过监督学习获得一个能力还行但很死板的初代版本,然后让两个 alphago 互相采用 RL 的方式进行对弈(3000万盘)在这个游戏中, RL 负责操控最下面这个绿色的东西,他可以有三种操作 left, right, fire
他的任务是负责杀死这些 alien
杀掉这些 alien
可以获得 reward
最开始的时候的 es
是
s
1
s_1
s1 (es
也叫 observation),根据这个画面,agent 采取的动作
a
1
a_1
a1 是向右移动,因此这个步骤的 reward=0
然后在
s
2
s_2
s2 的时候,agent 选择 fire
并且成功射杀一个 alien,从而获得了 reward=5
的收益
经过了多个回合之后,最终 agent 采取了
a
T
a_T
aT 获得了 reward
为
r
T
r_T
rT 然后游戏就结束了。
这一局游戏称为一个 episode
,整个 episode
过程获得的 reward
的总和
r
t
o
t
a
l
r_{total}
rtotal 是我们希望 maximize 的。
从这个过程中我们可以总结出 RL 的难点在于:
RL 的模型分成两个主要的分支:基于 policy 的方法和 基于 value 的方法;但是当前表现效果最好的 A3C 是将 value 和 policy 结合起来
而 critic 的方式则是充当一个 批评者,通过不断纠正 agent 的行为来获得更好的结果
actor
函数(也可以表示成
π
\pi
π),这个函数可以根据 es
(observation)输出一个最有效的 a
帮助 agent 获得最大的收益;actor函数
在很多地方也叫做 policy
actor
就是这个函数es
),在这里就是当前时刻的游戏影像,我们可以先通过 CNN 来提取这个图像的特征,然后把特征向量放到一个分类网络中得到最终是 left, right, fire
的三分类问题。在这里这个分类网络就可以看做是这个 actor
函数,因为他的输出就是针对当前影像的 actionleft, right, fire
的概率分布是 0.7, 0.2, 0.1
那么就代表有 70% 的几率是左移。但是不同于分类任务的是,RL 在这里并不会针对采取 left
这个 action,而是按照 0.7 的概率进行这个行为。(而普通的分类任务中,假设分类 猫,狗
的概率分布是 0.7,0.3
那么这个 sample 的 predict_label=猫
,但是 RL 并不如此)。predicted_label
如果他和 groundtruth
的差距足够小,即 loss(predicted_label, groundtruth)
足够小,那么我们认为这个目标函数是好的observation
s
i
s_i
si,采取的 action
可以表示为
a
i
=
π
θ
(
s
i
)
a_i = \pi_{\theta}(s_i)
ai=πθ(si)reward
表示为
r
i
r_i
riepisode
的游戏之后,整个过程的 reward
的总和可以表示为
R
θ
=
∑
t
=
1
T
r
t
R_{\theta}=\sum_{t=1}^Tr_t
Rθ=t=1∑Trtleft, right, fire
三种行为的概率分别为 0.7,0.2,0.1
那么第一次的结果可能是 left
这个action
,但是第二次有可能是 right
因为虽然 right
的概率比 left
小,但是也是有概率发生的。这也就产生了一个问题,就是一次的
R
θ
R_{\theta}
Rθ 并不能完全衡量 RL 目标函数的好坏,我们应该用
R
θ
ˉ
\bar{R_{\theta}}
Rθˉ 也就是
R
θ
R_{\theta}
Rθ 的期望值来表示 RL 目标函数的好坏。loss
值,看做是
−
R
θ
ˉ
- \bar{R_{\theta}}
−Rθˉ 然后最小化 loss
就可以得到我们想要的解。episode
的过程看成一个 trajectory
τ
\tau
τ,其中
τ
=
{
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
.
.
.
s
T
,
a
T
,
r
T
}
\tau=\{s_1, a_1, r_1, s_2, a_2, r_2,...s_T, a_T, r_T\}
τ={s1,a1,r1,s2,a2,r2,...sT,aT,rT}R ( τ ) = ∑ n = 1 N ( r n ) R(\tau)=\sum_{n=1}^N(r_n) R(τ)=n=1∑N(rn)
actor
函数
π
θ
\pi_{\theta}
πθ,那么理论上会有很多个不同的
τ
\tau
τ,我们假设当前
τ
\tau
τ 出现的概率是
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ) 因为这个
τ
\tau
τ 的出现概率是跟这个目标函数的参数
θ
\theta
θ 相关episode
的 reward
的期望为:agent
在 actor
函数参数不变的情况下(使用同一个
π
θ
\pi_{\theta}
πθ)进行
N
N
N 次游戏,
N
N
N 次游戏的结果可以表示为
{
τ
1
,
τ
2
,
.
.
.
τ
N
}
\{\tau^1, \tau^2, ...\tau^N\}
{τ1,τ2,...τN} 这个过程相当于从概率分布为
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ) 的分布中采样
N
N
N 次。episode
的 reward
期望值,从而衡量当前的目标函数的好坏因为我们要最大化
R
θ
ˉ
\bar{R_{\theta}}
Rθˉ 因此,我们采用 gradient asent
的方法,当然也可以取负号,然后用 gradient descent
进行优化,都是一样的。
从这个式子看,
∇
R
θ
ˉ
\nabla \bar{R_{\theta}}
∇Rθˉ 代表的是整个 目标函数的优化方向,而根据最终的式子来看,这个公式非常直觉,因为如果把公式里面只保留最重要的部分,也就是:
∇
R
θ
ˉ
=
R
(
τ
n
)
∇
l
o
g
p
(
a
t
n
∣
s
t
n
,
θ
)
\nabla \bar{R_{\theta}}=R(\tau^n)\nabla logp(a_t^n|s_t^n,\theta)
∇Rθˉ=R(τn)∇logp(atn∣stn,θ)
当使用
π
θ
\pi_{\theta}
πθ 作为 actor
函数时,当面对
s
t
n
s_t^n
stn 这个 environment state
,此时如果
R
(
τ
)
>
0
R(\tau)>0
R(τ)>0 那我们希望调整参数
θ
\theta
θ 来让
p
(
a
t
n
∣
s
t
n
)
p(a_t^n|s^n_t)
p(atn∣stn) 的概率越大越好,当
R
(
τ
)
<
0
R(\tau)<0
R(τ)<0 则希望面对
s
t
n
s^n_t
stn 时,减小
a
t
n
a_t^n
atn 的概率。
可能理解起来稍微有些绕,好好想想,其实这个结论非常符合常识和直觉
但是这个式子仍然存在一个小问题,就是 R ( τ n ) R(\tau^n) R(τn) 有可能全都是正数,这可能造成一部分问题就是所有的行为 a i a_i ai 都是被鼓励发生的(更详细的解释可以参考李宏毅老师的视频,在一小时01分钟左右)
为了解决这个问题,人们让
R
(
τ
n
)
R(\tau^n)
R(τn) 减一个 baseline 的值,从而构造出
R
(
τ
n
)
R(\tau^n)
R(τn) 有正有负的情况
至于这个 b b b 是怎么算出来的,我们后面再说。
episode
的总的 reward
值。这种做法其实可以看做是 version 0 ,但这种做法存在很大的问题,下面的内容就是不同的 version 存在的问题以及如何通过下一个 version 进行修正。environment
-> e
environment state
-> es
action
-> a
Reinforcement learning
-> RL
actor
函数得到
a
1
a_1
a1 同时产生
r
1
r_1
r1(第一个 action
对应的 reward
),然后以此递推下去,直到这个 episode
结束,那么所有的 reward
的总和就是reward
增大贡献的
a
a
a 会被越来越重视。就像上图中 right
这个行为本身不产生 reward
,fire
产生 reward
所以如果按照 version 0
这个 agent 就会一直选择开火,而不移动,但我们都知道移动对于 fire
来说是很重要的。所以这种优化目标会让模型变得短视reward
相加得到
a
1
a_1
a1 的累加 reward
G
1
G_1
G1 来代替 version 0
当中的
r
1
r_1
r1,同样的,可以得到
G
2
,
G
3
,
.
.
.
,
G
N
G_2, G_3,...,G_N
G2,G3,...,GNreward
比较低的 action
version 1
仍然也存在问题:当整个 episode
步骤过于长的时候,将第
N
N
N 步的 reward
归功于
r
1
r_1
r1 未免太牵强了。因此 version 2
采取了 discount factor
version 1
的主要思想,但是在计算
G
G
G 的时候,对于前面的 action
的 reward
都乘一个衰减系数
γ
\gamma
γ,就是说:我承认前面步骤的影响,但是离我越远的 action
对我的影响应该越小插入一个小问题:
虽然现在的目标函数被定义的越来越完善,但是对于围棋这种只有最后才有reward
而中间没有reward
的操作,看起来还是束手无策啊。
- 但其实如果按照上面的目标函数去解决下围棋的这种情景,那么假设最后下棋赢了,那么就会认为所有的步骤都是
postive
的,有效的,而如果输了,那么所有的步骤都是negative
的- 虽然这看起来好像很离谱,但是初代的 alphago 就是这么训练的。
- 因为并不是一盘棋,是下几千万局,这个过程中有赢有输,每个
action
的reward
会调整很多次,所以虽然很难 train 但是还是可以 train 出来
version 3
是对 version 2
进一步优化,优化的方式是将每一项的
G
′
G^{'}
G′ 变成
G
′
−
b
G^{'}-b
G′−b 这个我们在上面提过。因为有些场景下,如果所有的
G
′
G^{'}
G′ 都是正值,那么就不太好,所以我们倾向于让他们减去一个共同的数据
b
b
b 来保证过程中的
G
′
G^{'}
G′ 有正有负。这种方法可以看成是一种 标准化
epoch
进行循环 (
E
i
,
.
.
.
,
E
T
E_i,...,E_T
Ei,...,ET),每个 epoch
中执行:
epoch
的 actor
函数(参数表示为
θ
i
−
1
\theta^{i-1}
θi−1)actor
得到
a
1
,
.
.
.
,
a
n
a_1, ..., a_n
a1,...,anaction
对应的 reward
A
1
,
.
.
.
,
A
N
A_1,..., A_N
A1,...,ANreward
得到损失函数(或者优化目标)epoch
之外先整理好,但是 RL
训练过程中数据的收集是在 epoch
内部完成的,那为什么收集一次数据只能用于一个 epoch
迭代,而不能一直用呢?epoch
的 actor
参数是
θ
1
\theta_1
θ1 然后根据这个 actor
产生的
τ
=
{
s
1
,
a
1
,
G
1
′
,
s
2
,
a
2
,
G
2
′
,
.
.
.
,
s
N
,
a
N
,
G
N
′
}
\tau=\{s_1, a_1, G^{'}_1, s_2, a_2, G^{'}_2, ..., s_N, a_N, G^{'}_N\}
τ={s1,a1,G1′,s2,a2,G2′,...,sN,aN,GN′} 将 actor
的参数更新成了
θ
2
\theta_2
θ2 那么这个时候根据
s
1
s_1
s1 actor
会产生
a
1
^
\hat{a_1}
a1^和
G
1
′
^
\hat{G^{'}_1}
G1′^ 所以需要把这些重新收集起来用于优化
θ
2
→
θ
3
\theta_2\rightarrow\theta_3
θ2→θ3。On Policy
的方法Off Policy
的方法alien
还有很多并且屏障(粉红色的三坨东西)还是满的,所以游戏不太可能在短期内结束,而击杀 alien
又可以获得 reward
,那么给定这个
s
s
s,
V
π
V^\pi
Vπ 就会认为:按照当前的情况来看,当游戏结束的时候得到的奖励的值可以比较大(
V
π
(
s
)
V^\pi(s)
Vπ(s)) 比较大,但是第二个图 alien
就很稀疏,并且屏障也都已经被 alien 给打没了,所以他的对应的
V
π
(
s
)
V^\pi(s)
Vπ(s) 就比较小Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。