工程师谈强化学习1 _什么是强化学习?

        人工智能,机器学习和深度神经网络。这些术语可以激发你对未来机器人的想象,届时机器人不但可以思考,还会不断进化。 在这篇文章中,我们要讲的是强化学

        人工智能,机器学习和深度神经网络。这些术语可以激发你对未来机器人的想象,届时机器人不但可以思考,还会不断进化。

        在这篇文章中,我们要讲的是强化学习,或者简称为RL。这是一种机器学习,有潜力解决一些真正难以控制的问题。你可能听说过人工智能公司Deep Mind创造了一个名为Alphago的程序。这是一个使用强化学习击败世界上最好的围棋选手的人工智能。然后他们最近创造了Alpha Star,这也将主导《星际争霸》的场景。

        所以很自然地,你可能会想,如果它能做到这一点,为什么我不能使用强化学习来控制我的机器人或冷却我的数据中心或让无人机稳定在高度动态的湍流中?

        好吧,我们来谈谈这个。现在,在我们开始之前,需要澄清一下:这并不是对强化学习的详尽介绍,我也没资格向大家解释这一切。

        相反,我想从一个受过传统训练的控制工程师的角度来介绍这个话题,我希望向你们展示,这实际上与控制理论有很多重叠的地方。

        在这个系列的最后,我认为你会胸有成竹的回答这样的问题:什么是强化学习?为什么我应该在解决我的控制问题时考虑它?我如何建立和解决强化学习问题,以及与传统控制方法相比,强化学习的一些优点和缺点是什么?

        好了,我们开始吧。

        让我们先从传统控制方法的角度来思考开发行走机器人的复杂性,我们可以使用摄像机来观察环境,然后提取图像特征,这些特征可以转换成信号,比如障碍物的位置。我们可以将这些观测结果与其他传感器结合起来,从而完成状态估计,然后与被控对象和环境的模型一起用于设计控制系统。而且,该系统很可能由多个相互影响的控制回路组成。例如,会有低级的电机控制器和用于管理腿部或机器人躯干轨迹的高级控制器,可能还有一个更高级的控制器来管理平衡或基准外的行为。所有要素都必须在一个不确定的环境中协同工作,才能产生这种复杂的行走动作,这真的很有挑战性。

        其实我们不需要这么复杂,而是把它压缩到一个单独的黑盒子里,它只需要接收观察数据,然后直接输出低级的运动指令。如果我们有无限的智慧,我们可以坐下来设计一个可以让机器人工作的函数,而不需要考虑整个过程中的所有内部步骤。

        但我们没有,这就需要机器学习了。广义上,机器学习可以分为三大类:无监督学习、监督学习和强化学习。

        无监督学习用于发现未分类或标记的数据集中的模式或隐藏的结构。例如,想象你收集了十万只动物的信息,比如,一堆身体特征和社会倾向数据。然后,你可以使用无监督学习对动物进行分组或将它们归类到相似的特征中。有些分类显而易见,比如将动物分为哺乳动物和鸟类,有些则需要按照不太显著的模式进行归类,比如找到你之前不知道的身体特征和社会行为之间的相关性。

        另一方面,监督学习稍有不同,我们训练计算机根据给定的输入选择标签,例如。假设我们的动物特征数据集的某一列是物种。然后我们可以把物种当作标签,其余的数据作为数学模型的输入。然后,我们可以使用监督学习来训练模型,根据动物特征准确标注,通过逐个输入这些数据,让模型猜测物种,然后根据猜测是否正确,系统地调整模型。如果我们有足够的训练数据以得到可靠的模型,我们就可以输入新的特征,来自一个未被标记过地动物,而训练好地模型,就会为它选择最有可能地物种标签。

        监督学习可能是大多数人都熟悉的一种机器学习方法,因为它允许计算机识别猫的图片或照片中你的朋友。从根本上说,给一张图片贴上标签与标注动物特征数据集,是完全相同的问题。我们可以把一堆训练图像放入模型中,然后根据猜测是否正确来调整模型,直到它是准确的。

        不同的是,输入的图像数据只是用于表示像素强度的数字流。

        因此很难理解其与猫的关系。这正是深度学习所擅长的。通过将模型表示为一个深度神经网络,我们可以高效地输入上千个数字,然后在训练期间对其进行调整,使其能够识别一系列像素强度数组中的特征,最终选择正确的标签。

        强化学习是完全不同的概念,与其他两个使用静态数据集的学习框架不同,RL与动态环境交互,目标不是对数据进行分类或标记,而是找到能够产生最优结果的最佳动作序列。从这个意义上说,最优意味着获得最多的奖励。这是通过一个叫做智能体的软件来实现的,探索环境,与环境进行交互,并从环境中学习。智能体采取动作,会影响环境,改变其状态,然后环境会对该行动进行奖励,利用这一信息,智能体可以调整未来要采取的动作,并从这个过程中学习。尽管你可能不是软件,但你学习的方式,本质上与软件智能体使用的强化学习框架学习的方式相同。

        假设你是一个智能体,你周围的世界就是你可以与之互动、观察其状态并收集奖励的环境。通过采取好的行动,你会得到环境的奖励。比如上大学(动作),你找到了一份工作(状态),这份工作报酬很高(奖励)。或者你在过马路之前看了两边(动作),你到了另一边(状态),在这个过程中你没有被车撞到(奖励)。或者,如果你做了不好的事情,你得到的奖励很低,或者是负奖励,比如你在考试前熬夜(动作),你很累(状态),你得到了很差的分数(奖励)。

        在智能体内部,有一个大脑,它接收状态观测量,即输入,并将它们映射到动作中,即输出。在RL术语中,这种映射被称为策略。如果给定一组观测量,策略便会确定要采取的动作。就像监督学习一样,我们可以将策略表示为深度神经网络,这将在后面看到,允许我们的智能体同时输入数千种状态,并且仍然能够给出有意义的动作。这就是“深度强化学习”一词的由来。

        例如,在一个行走机器人中,观测量可能是每个关节的状态,以及来自摄像头传感器的数千个像素点。该策略将接收所有这些观测量,并输出执行器指令,如果机器人保持直立并继续行走,环境将产生一个奖励,告诉机器人执行执行器指令的具体效果如何。当然,可能没有正确映射策略以采取最佳操作,或者环境可能在缓慢变化,因此映射不再是最佳的。这就是强化学习算法发挥作用的地方。他们根据所采取的行动、对环境的观察和收集到的奖励金额来改变策略

        这样,整个智能体的目标是在与环境交互时使用强化学习算法来修改其策略,以便最终,在给定任何状态的情况下,它总是会采取最有利的行动,从长远来看,这将产生最大的回报。例:如果你为考试感到疲倦,你的成绩就会很差。如果你从中吸取了教训,你调整了你的策略,这样你就不会在下次考试前熬夜了。

        强化学习的核心是优化问题,但有一些非常有趣的概念将强化学习与其他优化技术区分开来。

        首先是价值观念。奖励是处于特定状态的即时收益,而价值则是智能体能够从该状态以及未来获得的总奖励。评估状态的价值,而不是评估奖励,会帮助行为主体选择在一段时间内获得最多奖励的行为,而不是短期利益。假设我们的智能体处于这种情况,并试图在三步之内收集最多的奖励。

        如果智能体直接着眼于每个行动的奖励,那么它便会从第1步向左走以获得更高的奖励,然后向右一步再向左一步,最终获得额外的奖励。然而,如果智能体能够预估状态的价值,那么它就会发现向右走比向左走的价值更高,并最终获得8个奖励。

        当然,通常情况下,对未来高回报的承诺仍然不意味着行动是最好的。这其中至少有两个原因。

        第一,就像金融市场一样,现在口袋里的钱可能比一年后口袋里的钱多一些要好。

        第二,你对未来奖励的预测变得不那么可靠,因此当你到达高奖励时,它可能已经不存在了。

        在这两种情况下,在评估价值时目光短浅一点会更有优势,而在RL中,我们可以对奖励进行折扣来控制这种情况,时间越远,折扣越大。

        强化学习的另一个关键方面是在与环境交互时权衡探索和利用,在收集已知最多奖励和探索尚未涉足的环境之间权衡例如,假设智能体只知道与它相邻的两个奖励。如果它采取了利用环境的贪婪方法,它只会追求它所知道的最高奖励,所以它会向左去收集加1。然而,如果我们偶尔让智能体探索状态空间,即使冒着收集更少奖励的风险,它可以填补价值函数中更多的未知部分,有可能发现之前所不知道的更高的奖励,这也是我们人类正常学习过程的一部分。

        一个简单的例子是决定你想去哪家餐厅吃饭。你会选择一家你喜欢的餐厅,从而利用你的知识,还是冒险去一家你从未去过的餐厅,增加你的知识?现在,尝试一家新餐厅,给了你找到一个最喜欢的新地方的机会,但它也增加了你吃到一顿你不喜欢的饭的几率。我们很难在探索和开发之间找到完美的平衡。

        然而,至少RL算法提供了一种简单的方法来设置这种平衡。好吧,我们开始觉得RL的目标和控制工程师设计控制系统时的目标完全不同。但这是几乎完全相同的问题。我们试图弄清楚如何设计控制器或策略,将观察到的被控对象或环境的状态映射到最好的执行器(动作)。当我们设计控制器时,我们基本上是在做一次性策略更新,我们设计最优控制器的方法之一是最小化代价函数,就像用LQR做的那样,代价是奖励的相反数,因此,通过最大化奖励,我们解决的问题与代价最小化是一样的。

        不同的是,在强化学习中,计算机会尝试在一段时间内学习最佳行为,而不是让设计师明确地解决它。这就像自适应控制器中的调整机制,在每个采样时间点调整参数。通过这种方式,我们基本上可以设计控制器或策略,而不需要了解系统本身,也不需要解决任何传统的控制问题。我们只是让计算机自己学习正确的参数,你可以把这个过程想象成有趣地反复试错地过程。

        现在,即使学习算法为我们做了大部分的工作,我们也不能在完全不了解的情况下进入这个过程。在开始之前,我们必须知道几件事。

        第一个是我们需要了解我们试图控制的系统并决定用传统的控制技术还是强化学习来解决这个问题更好。如果我们选择后者,那么我们需要设置策略,使它有足够的参数并且结构合适,以便它能够成功地进行调整。

        第二,如果我们希望控制多维系统,但只给它一个参数,这对我们没有任何好处。我们还需要知道成功的结果是什么,并奖励控制器的良好表现。这就需要创造一个奖励函数,以便学习算法能够理解什么时候结果会变得更好,并最终确定你想要的结果。

        第三,我们需要应用一种有效的算法,来观察奖励和系统状态,并知道如何调整参数,以便过程在任何合理的时间内收敛。在这里,我们还将设置探索和利用的参数以及未来奖励的折扣。

        在接下来的几篇文章中,我们将更详细的介绍强化学习的工作流,我们将介绍策略结构和神经网络,并讨论如何构建适当的奖励函数来影响你的最终结果。我们会简要了解一些有趣的学习算法。所以如果你不想错过,请订阅该专栏文章。

PS:该系列文章根据以下链接中的视频内容进行整理:https://www.youtube.com/watch?v=DgfEBX0wo30&list=PLn8PRpmsu08pwojdnzCSoKRx1h6pSDtbI&index=32