Lecture 10:Introduction to Deep Reinforcement Learning(RL)What is RL ?(3 steps in ML)Step 1:Function with UnknownAtari游戏为例——Space invader围棋为例Step 2:Define “Loss”Step 3:OptimizationPolicy Gradient如何操控一个actor的输出如何得到? Version 0:immediate reward如何得到? Version 1:cumulated reward如何得到? Version 2:discounted cumulated reward如何得到? Version 3:discounted cumulated reward with normalizationPolicy Gradient是怎么操作的?On-policy v.s. Off-policyExporationActor-Critic什么是Critic ?Critic是如何被训练出来的?Monte-Carlo(MC) based approachTemporal-difference (TD) approachMC v.s. TDCritic 如何应用在action的训练当中?version 3.5version 4:Advantage Actor-CriticActor-Critic的小tipother notices*outlook: Deep Q Network(DQN)Reward ShapingReward Shaping 实例:在Vsidoom游戏的情景下Reward shaping - CuriosityNo Reward: Learning from DemonstrationMotivationImitation Learning实例Inverse Reinforcement LearningOutlook

Lecture 10:Introduction to Deep Reinforcement Learning(RL)

Lectured by HUNG-YI LEE (李宏毅) Recorded by Yusheng Zhao(yszhao0717@gmail.com


之前的Lecture基本都是基于Supervised Learning,supervised learning通常基于labelled的数据,但是有些场景,譬如下围棋玩游戏,对于下一步的决策如何是未知的(假设machine是尝试无师自通,不看棋谱)。当我们收集有label的资料很困难的时候,我们可能就需要考虑RL。RL的方法下,机器会和环境做互动,会得到奖励,一般称之为reward…(actor就是agent,可能有不同表述)

What is RL ?(3 steps in ML)

通常的介绍RL课程会从马尔可夫决策过程 (Markov Decision Process,MDP)引入。这里稍有不同,从ML类比引入。

实际上,RL和ML是一样的框架(three steps)。

image-20220522192505424

Step 1:Function with Unknown

RL里面会有一个Actor以及一个Environment,两者会产生互动。environment会给actor一个observation(作为actor的输入);之后,actor会有一个输出称之为action,action会影响Environment,从而给出新observation…

image-20220522175740019

Actor就是我们要找的“function”:Action = f(Observation),输入就是环境给的observation,输出就是这个actor要采取的action。在互动的过程,这个environment会不断给这个actor一些reward——让actor知道其所输出的action的好坏。

这个function(即actor)的目标就是去maximize从environment所获得的reward的总和。

Atari游戏为例——Space invader

image-20220522180853195

· Actor:玩家; · Observation:游戏状况(Aliens & shields) · Action:左移、右移、开火 · Reward:Score(只有杀掉外星人才会得到分数) · 终止条件(Termination):aliens被杀光或者你的飞船被击杀

将上述游戏抽象为Actor-Environment交互关系,如下图,当action为移动时,reward为0;当action开火击杀alien,则score+5(reward增加)。每采取一个action,都会让environment更新一个observation给actor作为输入。

image-20220522181327161 image-20220522181349288

我们要求这个actor要不断朝向“获得最多分数”的方向行进。(reward maximization)

围棋为例

Actor就是“AlphaGo”,Environment就是“人类对手”,observation就是“棋盘的局势”。action就是“程序下一步落子何处”(19×19),实际上输出也是棋盘。

image-20220522182315750 image-20220522182337145

和Atari游戏不同的是,在下围棋的整个过程中,只有游戏结束Actor才能拿到reward,actor无法得到实时的reward的反馈。

这个未知数的function(Function with Unknown)就是Actor,Actor目前通常称之为Policy Network。在RL不用神经网络技术之前,通常这时候的actor比较简单,可能就是一个look-up table。在上述实例的Atari游戏中,

image-20220522192936202

输入就是整个游戏场景(图像),通过整个复杂的NN(Actor),给action做一个分数量化(如上图所示)。这个network事实上和分类任务的NN是一样的。如何设计网络的架构取决于我们自己。对于输入是一张图片的environment,我们可能会想到用CNN做这个网络;甚至,如果我们需要一个长序列的游戏画面(若干帧),那么就可以用RNN或者transformer。

• Input of neural network: the observation of machine represented as a vector or a matrix • Output neural network : each action corresponds to a neuron in output layer

network的架构有我们自行设计,对于以上这种任务,我们只要输入是画面,输出是类似于类别的action就行。actor会采用哪一个action取决于action中各类别的分数,常见的做法是把这个分数当作一个几率(如上图就是0.7,0.2,0.1)然后直接sample到选择某个action。多数RL都是用sample的方法(当然你可以确定性的选择分数最大的那个),sample方法的好处在于即便在相同的任务场景(输入)下,其输出的选择action也可能略有不同。随机性可以让模型更鲁棒。联想玩石头剪子布的小叮当,雾:-)

这些unknown的东西就是Policy Network中的参数,也是我们需要train出来的东西。

Step 2:Define “Loss”

actor和environment交互的场景:初始的游戏画面作为observation 让actor产生一个输出action ,从environment获得reward ,这致使environment产生新的observation ,其让actor产生输出,从environment中获得…获得…周而复始该过程,直到机器采取某个action(达成某种游戏结束的条件),game over。

image-20220522194900218 image-20220522195035642

从游戏开始到结束整一个过程就称之为episode,一个episode会得到一个total reward,在一些文献中,这个total reward也称之为return。ok,我们决定了这个优化目标——maximize the total reward(or minimize the minus total reward)

Step 3:Optimization

Actor-Env交互流程如下

image-20220522200447929

我们把序列称之为Trajectory。Reward(作为一个function)其输出同时取决于action和observation,即;这个问题的优化目标可以写为

整个optimization的问题可以描述为找一个network(或者train出一组参数)放在actor位置,可以让 的值越大越好。

如果环境是已知的,reward就是已知的;反之,reward也属于black-box function,或许也需要被train出来。

关键在于,RL和一般的ML有一些不同(这也造成了RL做optimization的困难)

RL的难点就是如何解决这个optimization的问题,如何设计自动化方法来maximize这个

类比GAN(异曲同工之妙,有相似,也有不一样的地方),Actor就像是Generator,Env和Reward就是Discriminator,优化目标就是调整Generator的参数让Discriminator越大越好。不一样的地方在于,GAN里面Discriminator也是一个NN(我们可以GD来train),而Env和Reward是黑盒子而不是network,不能用梯度下降方法来train它。

,优化目标就是让越小越好。

在之前的Deep Learning中Random_Seed的随机性体现在training当中,每次train的时候init的参数会不一样,而在RL中所谓Actor在testing当中就已经有随机性了。(我们拿train好的actor去测试环境,即便相同的输入通常会用不同的输出)

Policy Gradient

拿来解RL做optimization的一个常用的演算法

如何操控一个actor的输出

目标:当给定一个特定的observation 时就输出或不输出一个给定的action

可行的一种方法:做一个supervised learning,将收集的作为label(ground truth),设计loss函数计算之间的交叉熵,当作一般的监督学习处理(如下图)

image-20220522213547426

给定期望采取,给定期望不要采取——对交叉熵尽量小,对交叉熵尽量大。设计loss函数

image-20220522215302078

藉由监督学习的做法来操纵actor的输出。期望actor不采取意味着期望actor采取除此之外的其他action(不一定是什么都不做)。在某一个环境下,我们也可以让某个actor既期望做某个action,又不期望做另外一个action(或许会出现矛盾的情形?)。

以上部分,比较重要的部分就是收集资料/标签。从最简单做和不做(binary problem)处理,事实上对数据标签更多的是范围模糊化,即,给期望量化出一个分值。处理方式的改变对损失函数的设计也稍有不同。(如下图)

image-20220522220046512 image-20220522220057423

后面的处理是一样的,train出这个。而难点在于如何定红框中的;以及我们该如何产生这样的pair呢?

上右图中通常是我们制作数据集的一种方式,,整个流程和监督学习相差无二,以下陈述如何确定Action的分数(权值),不同的RL方法通常就是在上面做文章,完全可以以问题为导向,大胆假设,对进行合理的定义。

如何得到? Version 0:immediate reward

这个version 0是一个短视近利的actor(Short-sighted Version),完全没有长远规划。

如何得到? Version 1:cumulated reward
如何得到? Version 2:discounted cumulated reward

形如是一个step,或者说是一笔资料。一个episode是由许多个observation和action共同组成的。

如何得到? Version 3:discounted cumulated reward with normalization

好和坏、Reward是相对的,我们需要对分数设计做一个标准化。

有些游戏中只能拿到大于等于0的分数,这会导致误判一些action是好的,这就需要标准化reward。以下介绍几种方法:

Policy Gradient是怎么操作的?

步骤描述如下:

和一般的deep learning不同的是,DL中训练资料或测试资料相对于迭代过程通常是静态的;而Policy Gradient的过程表明在RL中收集资料在迭代过程中完成;迭代多少次,就要收集资料多少次。事实上在RL中,每个循环(loop)中梯度下降是只能更新一次(如下图所示);更新完一次参数,又得下去重新收集一次数据。

image-20220523162350387

每次更新一次模型参数。都需要重新收集整个训练数据。的决策(actions)不一定对有用。

原因在于每次数据都是actor(某个状态时,每个状态都是一个actor )和环境交互得来的,不同状态的actor的数据对很可能是完全相反的(譬如说对于同一个action的评价…),总而言之,one‘s drug could be one’s poison,同一个action对于不同的actor而言,它的评价是不一样的.(这里老师举了“棋魂”的例子,orz我没康过)

所以说在RL做梯度下降非常费时间。

On-policy v.s. Off-policy

Exporation

tips:尽量让模型去收集更为丰富的训练资料

如上所述,actor在采取action的时候是具有一定随机性的,这个随机性非常重要,随机性不够可能会train不起来——以space invader为例,如果没有足够随机性选择action(开火),那么可能整个训练过程就是在左右移动或不动,从头到尾都没有actor将action考虑在内。只有随机性足够,一个actor选择去吃螃蟹,才会有之后的评估,从而使得收集资料更加丰富。

image-20220523171651238

为了让actor随机性大一些,在training的时候我们可以刻意的加大一些随机性,例如说actor的输出是一个distribution,可以通过加大distribution的entropy或在actor的参数上加noise来增大其选择action的随机性,让其训练时比较容易sample到几率比较低的action。

exploration就是RL中比较常见的一个trick,让actor去尝试尽量不同的action,否则很有可能会train不出好的结果。

Actor-Critic

以上讲述的RL都是去learn一个actor,而这部分就是讲述RL如何去learn一个critic

什么是Critic ?

所谓critic:给定一个参数组,评估这个actor看到某个observation (采取对应的action )后它能得到多少的reward

critic实例介绍 Value Function :当参数组为的actor看到observation 后,接下来它得到的discounted cumulated reward(见上version 3):

通常得玩完整场游戏才会知道,Value Function要做的事情就是在中间过程预测这个

image-20220524135926172

函数的输入为 ,上标 表明其观察的对象为参数组为的actor,是函数,输出一个标量(scalar)。

输出结果的解释:当画面中alien数量较多,value function对得分期望较大,而alien数量较少时(游戏的末尾段),此时对reward的期望较小。除此之外,注意到value function的结果时跟观察的对象(actor)有关系的,再以该游戏为例,如果actor比较菜(alien多的时候actor很容易被杀死),此时可能结果比较低。

Critic是如何被训练出来的?

两种常见的训练方法:第一种是马尔可夫蒙特卡洛方法(MC);另一种是时序差分算法(TD)。前者比较符合直觉

Monte-Carlo(MC) based approach

Actor和环境做互动,会得到游戏的一些记录。 当actor看到(sample到)observation 时,接下来的discounted cumulated reward就期望是。如下图所示,在MC机制下,当函数给出输入为时,其输出应该要和越接近越好。

image-20220524160540122

MC方法非常符合直觉,我们通过了解actor决策并得到reward(玩完整场游戏)从而获取一笔训练资料,直接拿这些训练资料来train我们的critic

Temporal-difference (TD) approach

不用玩完整场游戏就可以得到训练Value Function的资料

TD机制下,我们要获得

这样一个序列。解释:actor看到,执行,获得reward记作

只需要看到这样一个序列(部分),我们就能拿来更新的参数了(train价值函数)。这个方法的好处在于:与MC方法相对比,后者需要做完整场游戏方能获得一笔训练资料;事实上,一些现实任务中(游戏)可能持续时间比较长(甚至可能永不结束),在这个情景下,我们更倾向于使用TD的方法。

以下详细说明TD方法如何在部分序列情况下训练函数(更新参数)

将看到之后的reward记作以此类推显然可以得到的关系:

当我们获得公式(6)这样一串序列,train的时候使其尽量满足公式(7),如下所示

换言之,已知一笔资料,同时知道,我们train的目标就是使得越接近越好。这就是TD方法,用来train出价值函数的未知参数

MC v.s. TD

举个例子:某个actor和环境互动了八个episode,游戏比较简单,通常只持续1到2个回合

image-20220524190406777

这里假设无视action,然后设置(不做discount),,而或者——前一个答案是按MC方法的得到的,后者则是TD方法算出来的。MC方法给出的前提假设就是两者有联系,而在TD中两者无关联。

Critic 如何应用在action的训练当中?

version 3.5

上文已经给出了如何得到评估的version 3.

image-20220524191506591

在critic中,把state 打入中输出,我们把当作,得

image-20220524194046341

根据左边的训练资料可以learn出一个critic,然后这个critic产生出一个state,输入到价值函数中,然后利用输出值(分数)进行标准化。针对数据对,我们有

来定义对训练数据中对决策的评估。

image-20220524194723640

当看到时,不一定会执行这个action,actor的输出实际上是一个的distribution(action的概率空间上,每个action都会有几率,不断sample空间里的action)因此,对于同一个会有不同的(cumulative reward without discount),把这些可能的结果平均起来就是

所谓,即在前提下执行后一路玩下去最后得到一个reward就是

image-20220524201828742

如果,说明,这时候说明上图中的是要比上上图中random sample到的所有(action)都要好(比平均水准好);反之,若,则说明,即这时候在游戏中属于低于平均水平的下策。以上简单直觉的解释了为什么要按公式(8)来计算

这里的version 3.5是拿一个sample出来的action下的reward减去按distribution去random sample出来action下的平均的reward。以下陈述version 4,与用sample减去平均的不同,其用平均的减去平均的。

version 4:Advantage Actor-Critic

如下图所示,上部分内容上文解释了,以下解释下部分内容:

image-20220524202614393

当看到,执行完后就跑到下一个场景,然后在这个场景下,去构成一个action的distribution,类似的,把cumulative reward平均起来得到期望的reward为,那么从出发总的期望的reward为

因此,针对数据对,我们有

这个过程很像是对照实验,以减号为界分成两项,前一项时看到去采取后再去sample一些action的reward总和,后一项则是看到没有采取这个action就直接去sample一些action的期望reward,两者之差作为来评估action 的好坏。显然地,越大说明这个action 越好。(这方法很符合直觉啊。。owo)

Actor-Critic的小tip

tricks for homework ^ o ^:让actor和critic共用一部分网络/参数

Actor是一个network,输出为游戏的画面,输出每一个action的分数(类似分类器);critic也是一个network,输出是一个数值(scalar),代表接下来得到的cumulative reward。如下图,这两个network有着同样的输入,它们应该有部分的参数是可以共用的。俩网络都需要理解输入的游戏画面,所以其共用前面几个layer(前部的network)

image-20220524215235021

other notices

在RL中sample的好不好(非常重要)关系到最后能不能train好,通常sample的越丰富越好。 critic中的就相当于一般生(average grades),超过它这个action就是好,低于它就是捞。

关于actor的distribution: actor这个网络的输出类似于一个分类器(每个action对应一个值),那对这个结果做一个normalization,每个action就对应一个几率,critic计算的actor就按照这个几率的distribution来sample一些action

*outlook: Deep Q Network(DQN)

蛮犀利的一种做法:直接用critic来决定采取哪个action。感兴趣自行了解。DQN有非常多的变形,其中比较知名的是rainbow

【学习DQN,此处待拔草owo】

Reward Shaping

When reward is sparse

目前为止,我们理解的RL就是把actor(agent)拿去和环境互动,然后得到一堆reward,对reward做一些处理(version 1~4)得到这边的分数(见公式9),用来教actor该做些什么(actions)。但是,在一些实际的情景中,多数的时候reward都是0,只有非常低的几率得到非0的正向的reward,这种现象称之为Sparse Reward。此时,在以上所设计的评估体制下,training data的大部分几乎每个action的评估都是差不多的(不知道是好是坏),这种情况下很难去train好我们的actor。(e.g. 教机械臂拧螺丝,以上述思路设计reward,大概率根本train不出来,小概率是巧合)

image-20220525210631842

Sparse Reward的现象和对弈很像,整个过程中几乎不会得到正向或是反向的reward,只有整场游戏结束才会知道reward(win or lose)。但下围棋至少局终末一定会得到一个有用的reward。

面对Sparse Reward的问题,通常我们会设计额外的reward来引导actor(agent)学习——即在真正要去optimize的reward之外去定义一些额外的reward来帮助agent学习,这种方法称之为Reward Shaping

Reward Shaping 实例:在Vsidoom游戏的情景下

Visdoom:FPS游戏,被当作某AI比赛的场景(Visual Doom AI Competition @ CIG 2016),rk1的文章https://openreview.net/forum?id=Hk3mPK5gg¬eId=Hk3mPK5gg

这篇文章用了reward shaping的概念。

image-20220525212356358

以上这些parameters并不直接增益游戏分数,属于是人类教它如何积极的卷,摆烂就扣分。🤣

*Reward Shaping无疑是需要人类对环境的理解来做额外的这些rewards(实际就是domain knowledge)具体问题具体分析。

Reward shaping - Curiosity

curiosity based reward shaping. 来自https://arxiv.org/abs/1705.05363

这种方法假设给machine加上“好奇心”,当actor看到new but meaningful thing时就得到积极的reward

No Reward: Learning from Demonstration

如果reward都没有,该怎么去做RL

Motivation

Imitation Learning

在没有reward的情况下,训练actor/agent来和环境做互动——Imitation Learning

image-20220526093319384

在IL里面,假设actor仍然会和环境做互动,不过没有reward。但是我们可以建立“expert的示范”,例如说我们可以找很多人类,让人类也跟环境做互动,把这些记录下来就叫做expert 示范,将其记作 。actor就可以根据 来进行学习。

我们有,其中每个 都是expert的trajectory,譬如说:针对自动驾驶有人类司机的驾驶记录、train机械臂前人类拉着机械臂手动规划路径

实例

IL非常像supervised learning,以自动驾驶为例: 有人类驾驶员记录作为expert示范:就是实时道路场景,就是人类司机面向场景采取的行为。

image-20220526101539150

最简单直接的想法:让machine去模仿人类的行为,machine给出的action为越接近人类行为越好,这种做法称之为Behavior Cloning

这种只让machine去完全模仿人类的行为的做法会有几个问题:

为了解决第二个问题,提出了Inverse Reinforcement Learning

Inverse Reinforcement Learning

正如字面意思,和一般RL任务背驰,IRL根据expert示范和环境来反推出reward应该长什么样子。换言之,让machine自己来定义reward,reward function可以被学出来。然后再用这个learn出来的reward来做一般的RL任务。

image-20220526103015668

我们可以通过reward function来learn到optimal actor。简单的reward function不一定会learn出简单的actor

Details:

IRL技术通常会应用在训练机械臂。人类手把手教machine如何做对应任务,然后通过IRL技术train机械臂来学会任务。

这类方法一般被称之为基于demonstration的RL方法( Learning from Demonstration)。

Outlook

与IRL不同,不手把手教而是给机器一个画面,让machine做出画面上的行为。——Reinforcement learning with Imagined Goals (RIG)

可阅读的参考文献如下

image-20220526111638781

train过程很有意思,让machine自己创造一些目标(self-generated goal),然后达到目标…

题外话:IRL并不一定需要完全模仿人类的行为,也可以在模仿行为之外增加一些额外的reward,或许会让machine在任务上做的比人类更加出色。