- Deep Reinforcement Learning(深度强化学习)
三十五、Deep Reinforcement Learning(深度强化学习)
AI = RL + DL ?? 1、介绍 ??在 Reinforcement Learning里面会有一个Agent和一个Environment,这个Agent会有Observation(也叫State)去看这个Environment的种种变化,Agent会做一些事情,它做的事情就叫做Action,会影响环境,因为它对环境造成一些影像所以它会得到Reward,这个Reward就告诉它说这个影响是好的还是不好的。 ??比如机器看到一杯水,做出打翻水的动作,environment说别这样做; ??再比如,机器看到一滩水,把它打扫干净,反馈说谢谢。 ??机器的目标就是它要去学习采取action,可以让reward可以被maximize。 ?? ??以AlphaGo为例子,一开始machine的observation是棋盘(可以用一个19x19的matrix来表示它),接下来take action,落下一颗棋子到棋盘上,environment(在这里是你的对手)因为你落子的位置受到影响而作出反应。 ??机器看到另一个observation以后它就要决定它的action,再落子在另外一个位置… ??下围棋是一个比较困难的reinforcement learning task,因为在多数的时候你得到的reward都是0,因为你落子下去通常什么也没发生,只有在你赢了或者输了才会得到reward。只有在少数情况下才能得到reward,这是一个困难的问题。 ?? 2、与supervised learning比较training的方法 ??以下围棋为例: ??(1)Supervised: ??告诉机器看到下图左的盘式你就落子在5-5位置,看到下图右的盘式就落子在3-3位置。 ??Supervised Learning不足的地方是:当我们会reinforment learning的时候往往是连人都不知道正确答案是什么。所以这个task不太容易做Supervised Learning。机器可以看着棋谱学,但是棋谱上面的应对不见得是最optimal的,所以用Supervised Learning学出来的Agent不一定是真正最厉害的Agent。Supervised Learning就是从老师那里学,老师告诉它说看到什么样的盘式下到什么位置。 ?? ??(2)Reinforcement: ??让机器找某个人跟它下围棋,下完以后如果赢了它就得到positive reward,输了就得到negative reward。没有人告诉它下的过程中哪些步骤是好的,哪些步骤是不好的,它要自己想办法去知道,在Reinforcement Learning里面你是从过去的经验去学习的。 ??在做Reinforcement Learning下围棋这个task里面,机器需要大量的training的example。AlphaGo的解法就是learn两个machine让它们自己互下。 ?? ??Reinforcement Learning也可以被用在chat-bot上面。chat-bot就是learn一个seq2seq的model,input是一句话,output是机器的回答。如果用 ??(1)Supervised: ??告诉machine,如果有人跟你说“hello”,你就要讲“hi”;如果有人跟你说“bye bye”,你就要讲“goodbye”。 ??(2)Reinforcement: ??让machine胡乱去跟人讲话,如果人生气了,machine就会知道它的某句话可能讲的不太好,但是没有人告诉它说哪句话讲得不好,要自己想办法去发掘这件事情。 ??怎么做? ??learn两个Agnet,让它们互讲,对话完还是要有人告诉它们说它们讲得好还是不好。 ??问题是无法判断这个对话到底是好还是不好,这是一个尚待克服的问题。 ??文献中的方法说(不一定是最好的):人去写一些规则,这个规则会去检查对话记录,如果讲的好就给它positive reward,讲的不好就给它negative reward。 2、Applications ??更多applications: ??(1)Interactive retrieval(交互式检索); ?? ??Reinforcement Learning现在最常见的application就是打电玩: ??machine像人一样去打电玩,machine看到的就是pixel,看到这个画面它要采取什么action,是它自己决定的。 ?? ??举例来说,让machine玩space invader:(1)首先machine会看到一个observation,这个observation就是荧幕画面里的pixel,开始的observation就叫它
s
1
s_1
s1?,machine看到这个画面以后它要决定它take哪个action(只有三个:往右,往左,fire),每次machine take一个action以后它会得到一个reward(就是左上角的分数),假设这次的action是往右移,那么不会得到任何的reward,reward
r
1
r_1
r1?=0。 ??(2)machine take完这个action以后它的action会影响环境,所以machine看到的observation就会不一样了,现在machine看到的observation叫做
s
2
s_2
s2?,这个时候machine决定take射击这个action。假设它成功杀了一个外星人,它就会得到一个reward
r
1
r_1
r1?=5。 ??(3)杀了一个外星人之后observation就变了,这个process就一直进行下去,直到某一天在第T个回合的时候得到的reward
r
T
r_T
rT?以后,进入了一个state,这个state是一个terminal state,它会让这个游戏结束。 ??这个游戏额开始到结束叫做一个episode(插曲)。对machine来说做的事情就是不断去玩这个游戏,学习怎么在这个episode里面maximize它可以得到的reward。 ?? ?? 3、Reinforcement Learning的难点 ??(1)Reward delay ??比如在space invader这个游戏里面,只有开火才能得到reward。但是这样得到的结果就是machine疯狂开火,对它来说往左移往右移没有任何reward,它不想这样做,实际上,往左移往右移这些moving对开火能不能得到reward这件事情是有很关键的影响的。往左移往右移本身不会让你得到reward,但是可以在未来帮助你得到reward。machine需要有远见。 ??(2)Agent所采取的行为会影响它之后所看到的东西 ??Agent需要学会去探索这件世界。比如说,如果在这个space invader里面你的Agent只会往左移往右移,从来不开火,那它永远不知道开火可以得到reward。 ?? ?? Outline: ??reinforcement learning的方法分成两大块:(1)Policy-based ;(2)Value-based。 ??Policy-based 方法里面会learn一个负责做事的actor;Value-based方法里面会learn一个不做事的critic。但是我们要把actor和critic加起来叫做Actor-Critic方法。 ??model-based方法预测未来会发生什么事。 ??AlphaGo用到的方法: ?? (一)Policy-based Approach(learn a actor) ??所谓的actor就是一个function,这个actor通常写成
π
\pi
π,这个function的input就是machine看到的observation,output就是machine要采取的action。我们要透过reward帮助我们找出这个function。 ??Action =
π
\pi
π(Observation) ?? ??找这个function有三个步骤: ??如果你的actor是一个neural network,就是在做Deep Reinforcemnt Learning。 ??machine有几个可以采取的action,output就有几个dimension。假设现在在玩space invader这个游戏,我们可以采取的action就是左移,右移和开火。output layer就只需要三个neuron。这个neural network怎么决定要采取哪一个action呢? ??通常的做法是你把image丢到network里面去,它可以告诉你每一个output dimension所对应的分数。 ??在做policy gradient时通常会假设你的actor是stochastic(随机的)。 ??那用neural network当作actor有什么好处?传统的做法是直接存一个table,这个table告诉我说看到这个observation我就采取这个action,看到另外一个observation我就采取另外的action。但是这种方法没办法做到玩电玩。 ??neural network的好处是它可以举一反三,有些画面就算machine从来没有看过,它也有可能可以得到一个合理的结果。 ?? ??我们要决定一个function的好坏也就是我们要决定一个actor的好坏。在supervised learning里面我们决定function好坏的方式如下: ??给我们一个neural network,它的参数假设已知为
θ
\theta
θ: ??我们需要找一个参数去minimize这个total loss。 ?? ??在Reinforcement Learning里面一个actor好坏的定义是非常类似的: ??我们需要去maximize整个游戏玩完以后得到的total reward。但是就算拿同一个actor玩这个游戏,每次玩完以后
R
θ
R_\theta
Rθ? 都会是不一样的。由于这个游戏有随机性,我们希望不是maximize某一次玩游戏的时候得到的
R
θ
R_\theta
Rθ?,我们希望去maximize的其实是
R
θ
R_\theta
Rθ?的期望值。我们希望这个期望值越大越好,这个期望值就衡量了某一个actor的好坏。 ?? ??这个期望值实际上要怎么计算出来呢? ??假设一场游戏就是一个trajectory(轨迹)
τ
\tau
τ,它是一个sequence,里面包含了:
τ
=
{
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
.
.
.
,
s
T
,
a
T
,
r
T
}
\tau = \begin{Bmatrix} s_1,a_1,r_1,s_2,a_2,r_2,...,s_T,a_T,r_T \end{Bmatrix}
τ={s1?,a1?,r1?,s2?,a2?,r2?,...,sT?,aT?,rT??} ; ??
R
(
τ
)
R(\tau)
R(τ)代表说在这款游戏里面最后得到的total reward:
R
(
τ
)
=
∑
t
=
1
T
r
τ
R(\tau) = \sum_{t = 1}^{T} r_\tau
R(τ)=∑t=1T?rτ? ; ??当我们用某一个actor去玩这个游戏的时候,每一个
τ
\tau
τ都会有一个出现的几率,
τ
\tau
τ代表某一个可能的从游戏开始到结束的过程。每一个游戏出现的过程可以用一个几率来描述它: ??那么
R
θ
R_\theta
Rθ?的期望值就写成: ??实际上要穷举所有的
τ
\tau
τ是不可能的,所以让actor去玩这个游戏玩N场,得到
{
τ
1
,
τ
2
,
.
.
.
,
τ
N
}
\begin{Bmatrix} \tau^1,\tau^2,...,\tau^N \end{Bmatrix}
{τ1,τ2,...,τN?},玩N场这个游戏就好比你从
P
(
τ
∣
θ
)
P(\tau | \theta)
P(τ∣θ)去sample出N个
τ
\tau
τ。 ??所以期望值可以改写成: ?? ??知道怎么衡量actor,接下来就看怎么选一个最好的actor:Gradient Ascent: ??实际运算过程: ?? ??在某一次玩游戏时,看到observation时采取某一个action而最后整个游戏得到了好的结果,我们就要调整我们的参数让在这个observation采取这个action的几率变大。反之,变小。 ?? ??如果
R
(
τ
n
)
R(\tau^n)
R(τn)永远是正的会发生什么事? ??在理想的状况下,这件事情不会构成问题,会做normalization: ??但是在实际情况中,某一个state可以采取a,b,c三个action,但是,有可能只sample到b和c的action,a不会被sample到,就会变成问题。所以我们希望
R
(
τ
n
)
R(\tau^n)
R(τn)有正有负。 ??避免
R
(
τ
n
)
R(\tau^n)
R(τn)都是正的做法:让
R
(
τ
n
)
R(\tau^n)
R(τn)减掉一个bias,这个bias要自己设计,如果
R
(
τ
n
)
R(\tau^n)
R(τn)都是正的,减掉正的bias;如果今天的trajectory是特别好的,好过baseline,才把action的几率增加;小于baseline把action的几率减少,这样就不会造成某个action没被sample以致它的几率变小: ?? ??实际做的时候到底是怎么做的? ??先有一个actor,它的参数是
θ
\theta
θ,它一开始random initialize,拿这个初始的
θ
\theta
θ去玩N次游戏,收集到N个trajectory: ??有了这些data以后就拿这些data去update你的参数
θ
\theta
θ : ??有了新的actor后再去玩N次游戏,得到不太一样的结果,再收集起来去调你的model,这样循环。 ?? ??考虑另外一个case:假设现在要做的是一个分类的问题,我们现在的actor当作是一个classifier,这个classifier做的事情是被给一个画面
s
s
s,它分类说我们现在要采取哪个action,如果可以采取三个action,就是说是一个3类别的分类问题。在train classifier时要给你的network一个target: ??通过以上过程解释这个式子: ??先把
R
(
τ
n
)
R(\tau^n)
R(τn)拿掉,当作等于1,那么 ??的意思是我们的training data里面现在有一个
(
s
1
1
,
a
1
1
)
(s_1^1,a^1_1)
(s11?,a11?),我们假设
a
1
1
a_1^1
a11? = left,我们要做的事情就是我们把
s
1
1
s^1_1
s11?丢到network里面得到的三个action的几率跟[1,0,0]越接近越好: ??所以这就变成了一个分类的问题,实际上我们在update上面蓝框的式子的时候我们真正在做的事情是我们希望有一笔training data,它的input是
s
1
1
s_1^1
s11?,target就是
a
1
1
a^1_1
a11?,和原来的network一样。 ??但是有一个不一样的地方是我们前面有了reward,我们会把每一个example前面都乘上
R
(
τ
n
)
R(\tau^n)
R(τn)。 ??
(二)Value-based Approach(Learning a Critic) ??Critic就是我们learn一个neural network,它不做事。也可以从Critic里面得到一个actor,这个actor就是Q-learning。 ??Critic就是learn一个function,这个function可以告诉你说我们现在看到某一个observation时这个observation有多好。 ??比如说今天看到下图左边的observation,把它丢到Critic里面去,它可能会output一个很大的正值,看到下图右边的observation可能会得到相对比较小的值。 ??总之,actor和critic可以合在一起train,好处就是比较强。
?? ?? ??
本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。
|