专栏名称: 新机器视觉
最前沿的机器视觉与计算机视觉技术
目录
相关文章推荐
知乎日报  ·  节后胖三斤?我们实测 13 款燕麦片,扎针 ... ·  6 小时前  
知乎日报  ·  做一个在历史上留下痕迹的人有多难? ·  6 小时前  
知乎日报  ·  知乎直答接入满血版 ... ·  6 小时前  
Quora文选英语  ·  老外说𝒕𝒂𝒍𝒌 𝒕𝒐 𝒕𝒉𝒆 ... ·  2 天前  
51好读  ›  专栏  ›  新机器视觉

机器学习 | 强化学习如何让机器自主决策并优化行为

新机器视觉  · 公众号  ·  · 2024-11-08 09:25

主要观点总结

本文主要介绍了强化学习(Reinforcement Learning,简称RL)的基本概念、原理和应用。文章强调了RL在未知环境下的学习特点,通过环境激励总和(Reward)来最大化总回报(Return)。文章还详细解释了强化学习的三个基本步骤:找一个带有未知参数的函数、定义Loss函数、最佳化。

关键观点总结

关键观点1: 强化学习的定义和特点

强化学习是一种机器学习方法,涉及智能体(Agent)在与环境(Environment)的互动中学习。智能体通过执行动作(Action)来影响环境状态,并接收来自环境的奖励(Reward)来评估行动的好坏。

关键观点2: 强化学习的基本步骤

强化学习遵循三个基本步骤:1. 找一个带有未知参数的函数,即Actor网络;2. 定义Loss函数,即最大化总回报(Return)或总奖励(Reward);3. 进行优化,寻找最佳参数以最大化奖励。

关键观点3: 强化学习的应用实例

文章通过空间入侵者和AlphaGo等实例,详细解释了强化学习在实际问题中的应用。这些实例展示了强化学习在处理未知环境和不确定动作结果方面的优势。

关键观点4: 强化学习与机器学习其他方法的比较

文章提到强化学习与监督学习、自监督学习等的区别,强调了其在处理未知环境和不确定动作结果方面的挑战。此外,文章还提到强化学习与生成对抗网络(GAN)的相似之处和不同之处。


正文


来源:古月居


强化学习 ,又叫Reinforcement learning,简称 RL 。在现在的AI研究中,RL相信大家一定都会经常听到。并且在很多的一些项目中也用到了RL的技术。比如阿尔法狗等。


a brief


我们前面所学到的,实际上使用的都是监督学习的算法。不管怎么说,我们实际上都是给了它们一个label标签的。不管是CNN,或者是RNN,又或者是GAN,包括自监督学习等等。


但是RL所研究领域,就和这有所不同了,因为有的时候机器并不知道做哪一步是最好的,或者说我们不知道最佳输出应该是什么。举例来说,我们一个13-13的棋盘,在对手下了一个子后,你能够很确定的给出下一步应当走哪里最好吗?这个label应该怎么给呢?可能人类自己都不知道。你或许可以说可以参照什么棋谱来去学习观察来确定落在哪里最好。但是你又能确定落在这里一定是最好的吗、棋谱上所写的一定是最好的吗?我们并不知道。所以说,这样的label标注工作是很难的。


在你不知道正确答案是什么样的情况的问题下,往往RL或许就能派上很好的用场。


当然,机器也并不是一无所知的。我们虽然不知道正确答案是什么,但是我们还是知道,相对来说,哪里好或者哪里不好。机器会跟环境做互动,得到一个叫Reward的东西。也就是说,机器是可以通过和环境进行交互,并且知道什么样的结果是好的,什么样的结果是不好的,从而学习得到一个模型。


强化学习的基本思路


RL和我们之前所学习的机器学习的算法一样,同样是遵循三个步骤。


在我们的RL里面,会有一个Actor,会有一个Environment,那么这个Actor会和Environment进行互动。


具体来说,如下图,环境会给Actor一个Observation,这个就是会作为Actor的输入,然后这里的Actor,就是作为一个Function来去存在的。而产生的Action就是Actor的输出。也就是说,Actor作为一个函数,将从环境得到的Observation作为输入、并经过变换后产生Action作为输出。


而这个产生的Action呢,又会对环境产生影响。那么环境就会基于新的Observation给Actor,然后Actor呢再产生新的Action。


而在这样一个过程中,环境会不断地给Actor一些Reward来告诉Actor,你的这个Action好不好。


那我们就可以说,我们就是要找一个函数function,它以Observation作为输入,Action作为输出,以最大化Reward为目标。注意这里的Reward应当为从环境中得到的环境激励总和。


假如说上面的描述比较抽象,那我们就通过具体的例子来去描述。我们可以来举一个Space invader的例子,如下图。



在这里,我们左上角的分数,就是相当于Reward,然后我们的Action有向左、向右和开火三个选择。我们的目标是要通过开火把所有的外星人都干掉,同时,我们也会拥有护盾来抵御外星人的攻击。游戏结束的条件是所有的外星人都被干掉或者你的被外星人击中。当然了,也可能在有的版本里面,会给个补给包什么的然后击中也会有积分加成。


那么,我们如果用上面的模型那个来去描述这个游戏,它就是这个样子(如下图):



它的observation就是游戏主机中一张一张的游戏图像画面,而它的Action有三个,分别为向左、向右和开火。当开火打中外星人的时候,环境将会给Actor简历,假如说给的reward是5,然后向右和向左我们都给0分。那么我们总的任务,就是要训练出Actor使得它能够在一整个游戏中所获得的reward是最大的。


然后我们再来举一个AlphaGo的例子:在AlphaGo下围棋的时候,它的环境就是它的人类对手,而它的输入就是棋盘上黑子和白子的相对位置,然后它的输出呢,就是下一个将要落子的位置,每一种可能性都会对应棋盘上的一个位置,这很容易理解。


选定落子位置后,落子,那么接下来将这个落子后的棋盘反馈给环境,再由环境产生新的Observation(这一个过程即人类对手又下了一步棋),把它用作Actor的输入,进而产生新的Action,如此循环反复下去。


那么就目前而言,我们可以认为,对于下棋这件事情,在绝大多数情况下,reward都是0,只有当你赢了的时候,才会得到reward,我们假设为1分;倘若你输了,那么reward就是-1分。


那Actor所学习的目标就是要去最大化它的reward,也就是要它赢。当然了,我们会在后面说到,我们可以通过一些其他的方式,例如spare reward的方式,来去进一步细化和优化每一步落子的方式。直接用这种方式硬train,肯定还是过于粗糙了的。



如上图所示,就是我们说的Alpha Go的下棋的例子,在绝大多数情况下,reward都是0,只有当你赢了的时候,才会得到reward,我们假设为1分;倘若你输了,那么reward就是-1分。


那希望通过这样一种架构,能够帮助大家搞清楚一整个RL的流程是怎么样。


我们前面在学习机器学习的时候就已经进行了探讨,说,机器学习一共需要经历三个步骤,即找一个带有位置参数的函数、定义Loss函数、最佳化。


那么RL也同样遵循这三个步骤。



一、找一个含有未知参数的函数


我们前面说到过,我们要找的这个含有未知参数的函数,实际上就是Actor。那Actor又是什么呢?它实际上就是一个Network,我们现在通常叫它为Policy的Network。在过去Network还没有被用到Actor的时候,它可能就只是一个Look-Up-Table,就相当于Key-Value一样,即看到什么样的结果就产生什么样的输出。


那我们今天已经知道我们的function就是一个复杂的network。


在我们上面所举的例子中,输入就是我们的pixels(像素),然后输出就是每一个行为的分数。


我们可以看到, 它实际上和Classification有着非常类似的地方。


举例来说,在我们刚刚的那个例子中,我的输入就是我的pixels,我的输出就是向左、向右或者开火的选择,它们的分数就表示着一个可能性。


在这里的Network应该是怎样的呢?那就需要你自己来去设计了。比如说当你输入的是一张图片的时候,那你就会想要用CNN来去处理。当然,当你需要看的是整场游戏到目前为止所发生的所有事情,那么你所需要的可能就是RNN。当然,你也可以用Transformer等。


那最终机器决定采用哪一个Action,取决于最后得到的概率;注意,这些最后的分数只表示其做这些动作的概率。具体机器要去做哪一个Action,实际上是需要机器按照这个概率去sample的。也就是说,这些分数它只代表一个概率,对于每一个样本它所采取的行为是什么,它具有一定的随机性;这里的分数只是能够代表其发生的可能性。这样做的好处,就是说今天你即便是相同的游戏画面,也可能有不同的动作,那么这样的随机性可能对于某些游戏而言是重要的。比如石头剪刀布。


我们思路回到这一个大步骤上,也就是说,我们第一步就是要找一个带有未知参数的Function,那么这个Function实际上就是带有未知参数的Network,就是我们要学出来的东西。也就是我们的Actor。


二、定义Loss


那么假如我们现在有这样的情景了(如下图):



我们一开始有了一个画面,假如我们叫它 s 1 ,然后经过Actor之后,它得到了行为 a 1 (我们假设该动作是右移),然后由于没有杀死任何一个外星人,所以得到了一个reward = 0;然后右移之后形成了新的observation,我们假设叫它 s 2 ,然后这个 s 2 又作为Action的输入,假设经过Actor之后,得到行为 a 2 (我们假设该动作是开火),我们假设它杀死了一个外星人,然后得到一个reward = 5;紧接着得到新的observation s 3 ,然后机器再采取新的行为...像这样机器(Actor)和环境反复互动下去,直到终止条件为止。这就是一个episode。


那么在这样一些过程中,机器可能会采取很多的行为,而每一种行为都会有其对应的reward,那么我们的任务就是要让将所有的reward集合起来,从而让整个游戏的Total reward(或者叫return) 最大。那么这里的 R 就是我们要最大化的东西。当然,如果你想要和之前的Loss的习惯一致,即想让其最小化、求其最小值的话,我们只需要在 R 的前面加个负号就可以了。


具体来说,有关于评判一个Actor好坏的判断标准:


实际上和最大似然估计很相似。假设我们可以穷举所有的 ,那我们 R θ 的期望就可以表示为 。而假设我们sample出来了n个 ,那么我们sample出来的这n个应当是和 成正比关系的,也因此, R θ =



注意,我们后面所学的(比如MC、TD等,比如如何来确定一个 ),是在评价一个Action的好坏,而不是在评价一个Actor的好坏。


三、Optimization(优化)


我们再用下面的图示来表示一下:








请到「今天看啥」查看全文