强化学习经典入门教程
文章目录Introduction of Reinforcement Learning什么是强化学习强化学习的应用下棋聊天机器人Example: Playing Video GameIntroduction of Reinforcement LearningDeep Reinforcement Learning深度强化学习等价于强化学习加上深度学习。什么是强化学习如下图所示,有一个Agent,也就是
文章目录
Introduction of Reinforcement Learning
Deep Reinforcement Learning
深度强化学习等价于强化学习加上深度学习。
什么是强化学习
如下图所示,有一个Agent,也就是机器,然后它将自己观察到的场景作为输入,然后去执行某个行为去改变这种场景,比如他观察到一杯水,然后他做了一个行为,就是打翻水杯,然后会得到一个reward,也就是奖励,如果为正,说明它做得好,如果为负,就说明它那样做不对。强化学习是机器与环境做互动!!
Agent可以学到采取哪些行动可以最大化奖励!!
如下图,Agent去学习采取哪些行动可以看成一个函数。假设这个函数是Π,然后Agent将观察到的场景作为输入传到Π里,并且做出预测,下一步该做什么行动,然后会反馈一个reward,然后选取reward最大的函数。
强化学习的应用
下棋
下围棋可以用强化学习,棋盘就是agent观察到的,他下一步会做出下哪里的决定,然后每下一步会得到一个reward。
但是,下围棋的时候是关乎胜负的,胜负与下的每一步都有关系,也就是说大多数的时候reward都是0,只有win的时候reward是1,loss的时候reward是-1.
我们来对比一下监督学习和强化学习在下棋的时候的区别:监督学习就像有一个老师,要教机器一些基本知识,它才会下棋,而强化学习是根据经验下棋,机器从每次落子能否胜利中学会如何去下棋。Alpha Go是先用监督学习让机器具备一定的知识基础,然后再利用强化学习让机器自己去学,通常情况下是让两台机器互相下棋。
聊天机器人
如下图场景,我们训练一个聊天机器人,比如人类说你好吗,然后机器说拜拜,我就给他一个负的reward,反之是正的。
如果我们完全用人去和机器训练,那不累死了?所以我们让两个机器自己聊。
通过这种方式,我们能产生一些对话,使用一些预先定义的规则去评价一个对话的好坏。
对比一下监督学习的聊天机器人,你要告诉利用监督学习的机器人遇到不同的聊天场景应该怎么回答,而强化学习都是自己利用经验去学习。
然后强化学习还有如下的应用:
Example: Playing Video Game
我们来详细说一下利用强化学习打游戏的案例:
机器像人类玩家一样去打游戏,机器观察的就是整个游戏画面,然后靠它自己决定下一步该怎么做。
下面这个游戏,击杀了外星人可以获得奖励,然后整个action就只有三个,向左移,向右移,以及开火。游戏结束的标志是所有外星人被消灭或者是你的飞船被外星人击毁。
机器先观察画面,然后做出了一个action,向右移动,这个action的奖励是0,然后机器又观察画面,做出了开火的action,然后观察画面,发现有外星人被击落,然后获得reward。
从游戏开始到游戏结束被称为一个episode,那么机器就是要找到每一个episode中,谁的reward总和最大,然后总和最大的reward的episode所包含的各个action是比较好的!
强化学习具有以下特点,奖励延迟,在刚刚那个游戏中,只有开火可能获得奖励,但是开火之前的移动也十分重要。在下围棋的时候,可能牺牲当前的reward来获得更长久的reward。Agent的行为影响接下来的事情,它具有探索精神,没走过的路它都想走一遍,万一能得到好的结果呢?
Alpha Go是个大杂烩,以下方式都用上了。
基于策略的方式(Policy-based Approach)-Learning an Actor

我们要如何寻找一个actor?也就是一个根据场景做出行为的函数。第一步,当然是选择神经网络作为这个actor

神经网络的输入是机器观察到的场景转化的向量或者矩阵,输出是每一个行为的概率。像这种彩图我们一般用CNN,然后取代了最早的查表方式,以前的actor是table,然后遇到某张图片就去table里找对应的行为,用在下棋里还可能穷举,如果在自动驾驶领域,这图片是无法用表存完的。可能你之前没有给神经网络看过某张图,但是它还是能得出比较靠谱的结果,所以他具有generalization的特性。
下面的这图看起来不就是一个巨大的network吗?然后环境和reward是无法改变的,就相当于下棋的时候机器无法控制对手的操作,机器也无法改变奖励制度,唯一能改变的就是自己的参数,去适应环境,来使奖励最大化。
第二步我们要找衡量这个function好坏的函数。
回顾一下之前的神经网络定义的loss,因为有目标值,所以他是监督学习,然后loss用的交叉熵。
那么这个Actor的损失函数该怎么定义呢?给定一个actor,记为Π,然后下表θ代表该神经网络的参数,然后input的s就是机器所看到的场景,然后让机器实际去玩一下这个游戏,然后我们要求总的Total reward最大,我们就要将所有的r加起来。但由于即使是使用相同的actor,每一次的总的奖励也可能不同,于是我们就求总的奖励的期望即可。
┏是场景,行动,奖励所组成的向量,如下图所示,比如说玩游戏,一个┏就代表了机器看到了第一个画面,做了某个行为,然后得到什么奖励,然后看到第二个画面,做了某个行为,然后得到什么奖励,以此类推,循环往复,直到游戏结束。然后每一个┏都有可能被经历。当你选择了某一个actor,也就是选择了某一个神经网络,那么会使某一些┏容易出现,某一些不容易出现。那么Rθ的期望就等于每一次游戏过程┏的奖励R与该过程┏出现的几率的乘积之和。那么穷举所有的┏显然不可能,那么我们就玩N场游戏,相当于N个训练数据。

经过上面的演算,我找到了衡量一个actor好坏的式子,那么下一步,我要将这个式子的结果求最大。
求最大你会想到梯度上升的求法,这里的梯度上升是策略梯度的一部分。
那么对Rθ期望求微分具体应该怎么做呢?如下图,R(┏)肯定不可微,但是没关系,它的表达式里没有θ,所以我只需对P(┏|θ)求导数,然后我们要对其做一下变换,巧用log!!然后画红框的两部分之前推导过可以化为1/N,然后整个表达式就可以化为一个近似的表达式。使用Πθ这个神经网络去玩N次游戏,可以得到N个┏

下面我们来看看P(┏|θ)打开是什么,画黄线的部分与你的actor无关,取决于外部环境,也就是游戏,然后红线部分与你的actor有关。
利用上述打开的结论,然后我们利用对数的性质化简,如下图所示:然后我们对θ求导!忽视与θ无关的项。然后得出来一个等式。
然后我们将Rθ得期望求导之后得算式写出来,如下图:其中,log里面的那个p所代表的意思就是当前第n回玩游戏时,t时刻机器所看到的画面的情况下做出a行为的概率,R(┏n)是指第n回完游戏时的总的奖励,然后利用上述得到的结果进行梯度上升。注意:如果我将R(┏n)换成rtn,也就是将第n回玩游戏的总的奖励换成第n回玩游戏时t时刻的奖励,那么会发生什么后果??如果在刚刚那个射击游戏里,只有开火能得到奖励,那么就会导致机器只会开火。
如果在某一次玩游戏时,机器在看到某个场景时,采取了一个行动,然后总的奖励是正的,那么机器就会自己去增加看到这个场景下做出该行动的概率。
那么这里有一个问题,我们看下图,ideal case的第一张图,a和c的会使总的奖励变多,那么机器会倾向于执行a和c的操作,所以a和c的执行几率就变大了,相对的b的几率就减少了。然后我们再看看sampling那一行,b和c可能使我的总的奖励一直是正的,那么机器根本就不知道a的情况,万一a的操作更好呢??机器只会去学更positive的,b和c的几率也会越来越大,a只会越来越小。这时,我们需要引入一个baseline,如下图的b,我们将总的奖励减去一个b值,也就是某一步的奖励一定要达到某一个标准我才能说它好,否则就是不好。
下面我们来看看更新model的过程,先是给了一个actor,然后给actor一个┏,然后算出奖励总和,然后用梯度上升,更新θ,然后再将另一个┏传给actor,循环往复执行。
那么到底如何理解log这一项呢,我们暂且把强化学习看成一个分类问题,如下图所示,向左,向右,开火就是三个类别,然后下图给了一个目标值的向量(1,0,0),然后做交叉熵,然后将minimize去掉负号变成求maximize,现在我只有left的目标值是1,所以maximize变成logy1,然后它等于logP(“left”|s),然后我们利用梯度上升找最大。
我们暂时先不看R的总和,然后我们会发现这就是一个分类问题,将s场景传入,然后预测是向左向右还是开火。
现在我们加上R(┏),每一个训练数据被这一项赋予了权重。比如说第一回玩游戏的R(┏)=2,那么就相当于传入s,然后预测action为向左执行了两次。
基于价值的方式(Value-based Approach)Learning a Critic

一个Critic无法决定Action,给定一个actor,记为Π,critic可以评估这个actor的好坏。
我们定义一个状态价值函数,记为VΠ,然后传一个画面s给这个函数,意思就是当使用Π作为actor时,看到画面s直到游戏结束所获得的奖励期望是多少,也就是从看到s一直到游戏结束这段期间总的奖励。如下图,先是看到一张外星人很多的图,然后V就很大,因为画面里还有很多外星人可以击杀,然后第二张图里外星人很少,那么从机器看到这张图一直到游戏结束时,V就很小。
如下图漫画,看到同一张图,如果actor越好,那么得到的V就越大。
如何去评估V(S)
第一种比较直观的方式就是蒙特卡洛方法,让critic去观察Π玩游戏,当看到画面sa时,计算出到游戏结束时的奖励之和Ga,然后与VΠ所预测出的VΠ(sa)作比较,如果越接近当然就越好。
第二种是Temporal-difference方式,我们之前说过,VΠ(S)是指当看到这个画面时,一直到游戏结束所估计得总的奖励,那么在游戏流程中,(s,a,r)是一个小的完整流程,也就是观察->行动->奖励,这是一个小的周期,那么我在t时间点观察到的画面所得到的V与在t+1时刻观察到的画面所得到的V之间就差rt奖励。(仔细看一下V的定义,再结合下面的图很容易理解),那么我只需看这两个V只差是否和rt接近,越接近越好。


Q-Learning
我们使用状态行动价值函数能决定actor,因为该函数是将画面与行动都考虑在内了,也称Q-Learning。当使用一个actor,记为Π,然后计算在看到某画面并作出某行动之后的所有奖励的期望。如下图所示,这里的输入就有两个了,s和a,当a可以穷尽时,比如玩游戏就三种情况,向左,向右,开火,那么就变成下图所示的分类问题。
下图是Q-Learning的流程,先初始化一个Π与环境交互,然后通过TD或者MC去学习一个Q函数,然后通过学习的这个Q函数找到比刚刚更好的Π,循环往复。
那么给定一个QΠ(s,a),去找一个新的更好的Π应该怎么做呢?何为更好?如下图所示,更好的定义就是对于所有的画面s,V在新的Π下的值大于旧的Π下的值,那么这个新的Π就更好!!那么如何找新Π呢,我们只需在旧Π下,找到某个action使Q最大,那么新Π必须要满足看到当前s时,所作的反应与使Q最大的action一致即可。新Π不是额外的参数,它取决于Q。当然,这不适用于a无穷或者a连续的时候。

更多推荐
所有评论(0)