【转载】 深度强化学习走入「死胡同」,继续死磕电子游戏还是另辟蹊径?
作者:互联网
原文地址:
https://zhuanlan.zhihu.com/p/102318263
===============================================
2019 年,深度强化学习可以算得上 AI 研究的 Top 关键词之一。
无论是 DeepMind 星际2 AI 「AlphaStar」血虐人类玩家,还是 OpenAI 最终因太过强大而被认为可能有风险所以不公开发布的语言模型 GPT-2,无疑都在过去一年中最轰动的 AI 大事件之列,也吸引了 AI 社区的越来越多的研究者投身深度强化学习研究之列。
然而,也有很多反对的声音认为深度强化学习现在的一系列成果,其实更像是一种虚假的「繁荣」。
本文作者朱仲光便是其中的一位。他指出,深度强化学习会给研究者们尤其是各位不明真相的大众带来「离通用人工智能越来越近」的错觉,而更为严重的是,深度强化学习会耗费掉研究者们本可以用来研究其他更重要的问题和更有前景的方向的时间和精力。
他的具体观点,我们下面来看:
一、2019 年都过去了,并没有离现实世界更进一步
随着 2019 年的结束,我想回顾一下人工智能所取得的进展。在这一年,AI 社区尤其将深度强化学习大肆宣扬为下一个朝着通用人工智能(AGI)前进的革命性的一步。
通用人工智能,顾名思义,就是指能够像人类一样以一种通用的方式学习万事万物的计算机算法。
近年来,研究者们针对深度强化学习开展了大量研究工作,现在也逐渐取得了一定进展。
围绕深度强化学习的想法和期望是,理论上,我们能轻而易举地训练一个能做任何事情的智能体,比如开车、叠衣服、玩电子游戏、打扫房间、玩魔方等等,并且所有智能体的学习过程都不需要人工干涉。其中一些实验已经取得一些成功,你可以教一个深度强化学习的智能体玩一些电子游戏和棋类游戏,但是一旦涉及现实世界,进入生产系统,这些实验都会以失败告终。
据我所知,2019 年都过去了,仍然没有出现任何能够使用深度强化学习技术的生产系统。
二、到底解决哪些问题,才有意义?
深度强化学习系统有许多问题,我并不打算详细讨论这些问题的细节,因为有很多博客文章已经讨论过这些问题。感兴趣的读者可参考下文:
-
《Deep Reinforcement Learning Doesn't Work Yet》,
如果这些问题中有一部分得到改善或解决,例如找到更抽象的方式来表征神经网络内部的信息,我也不会太惊讶,但如果不能解决我所认为的核心问题,即有关手动设置奖励的问题,那所谓的「改善」或「解决」也就意义不大了。
在深度强化学习中,我认为大部分时间都花在了设计奖励函数来让智能体完成想让它做的事情。用更传统的机器学习术语来说,奖励函数就是目标函数,指的是算法利用奖励函数来了解系统是否朝着正确的方向运行,模型得到的奖励越多,它就「越好」。
比如教一支机械臂叠衣服,假如说你有一堆裤子,那么你如何编写奖励函数来让机械臂正确地叠这些裤子呢?当向另外一个人解释这一点时,听起来很简单,只是「把裤子叠成整齐的一堆」,但是计算机并不知道这些规则的含义。
对于每一个实验,你设计的奖励必须要让计算机在完全不知道自己实际正在做什么的情况下,可以自己衡量自己的运行过程。因此,你设计的奖励程序可以在机械臂碰到裤子时就开始给它奖励,之后再针对是否正确抓住了裤子以及移动了裤子,来给它更多奖励得分。
那如何基于机械臂在实际折叠裤子中的表现给予奖励?叠三次可以得分吗?没有将裤子叠皱又得多少分?
最终,你花了太多时间试图去引导智能体遵循正确的路径,以至于它基本上处在完全的监督之下。
理论上,你的确可以让一个人监督着整个训练过程,这个人可以为系统采取的每一个动作指定一个分数,但这种方式是不能泛化的。
这些深度强化学习系统需要基于数万到数百万次的迭代来试验动作的每一个变化,以找出实现最终目标的正确序列,个人很难监控计算机采取的所有步骤。研究者也正在积极探索,试图将这个范围缩小至有限次数的学习,但对我来说,这只是试图改进一些从根本上而言没有意义的东西。
在你试图训练机器人折叠裤子的过程中,你可能需要不断调整奖励函数,因为它可能会意外地撕破裤子、弄掉一些零部件、不把裤子翻出来就直接折叠,或者以看起来毫无意义的奇怪方式折叠裤子。这样的话,奖励的设计变成了一个试验性的过程,即通过反复的尝试和试错来确定什么是有效的奖励。有无数的报告记录了深度强化学习模型做出的各种意想不到的动作。
强化学习通常被划分为除监督机器学习和无监督机器学习以外的第三类,但在我看来,它其实就是监督学习。
当前的强化学习实现步骤是这样的:你开始训练模型,然后你看着它失败然后「死掉」,接着你花费大量的时间一次又一次调整奖励函数,直到你「有可能」得到一个理想的结果,但仅仅是「有可能」。
这个过程中有哪一步你没有给系统提供训练数据?事实上你把整个过程复杂化了,你仅仅是把答案以间接的方式提供给智能体,而这恰恰让一切变得更加困难。
如果计算机要从周围的环境中学习,那必须在一个 100% 无监督的环境里进行。
三、当公关大于实质进步,会带来哪些危害?
那么,为什么关于深度强化学习的炒作如此之多?
如果你站在一个抽象的角度来看待深度强化学习,你就会知道它被描述为一个随着时间的推移从其环境中学习的智能体。
这似乎是绝对正确的,而且确实「很像」是真的,所有生物都是从出生开始学习如何从其环境中生存和行动。
我们之所以知道这一点,是因为我们做了许多实验,经验告诉我们,如果我们改变和限制新生有机体的环境,它们会学到不同的东西,行为也会有所不同。
深度强化学习与诸如监督分类的传统机器学习方法有很大的不同,传统的机器学习是一个静态模型,它获取原始数据和答案并最终建立一个模型用于生产。在传统的深度强化学习框架中,系统犯错的部分就是信号的来源。这些人工智能体必须直接从它们自身和环境中学习,而不是从我们提供给它们的某种人工奖励函数中学习。
当 DeepMind 推出一个单一的不进行任何人为干涉就可以学会玩 Atari 电子游戏的深度强化学习智能体时,人们认为这种智能体可以泛化到其他领域的各种问题,甚至是通用人工智能。
但我们所了解到的是,有机体和人类所做的大多数事情,都无法建模成通过让智能体持续优化从而尽可能获得更多奖励的电子游戏。不要被「深度强化学习不需要人为干涉就能够在游戏中获胜」的新闻所愚弄!设计奖励这一操作仍然存在,并且在 40 年前,当电子游戏制造商雇佣整支队伍来制作这些游戏时,就已存在这种操作。
很多人都误认为深度强化学习是实现通用人工智能的下一个创举,甚至谷歌也「过分热情」地花了 5 亿多美元收购 DeepMind,希望把人工智能提升到一个新的水平。与此同时,AI 社区似乎也把深度强化学习当成了圣杯,因为它是在某种程度上与我们所处的世界最接近的机器学习形式,尽管实际上还相差甚远。
我们最终实现的不过是一些「小把戏」,这些智能体也不过是可以玩各种各样的电子游戏、棋类游戏的小 AI 玩具。
从更传统的机器学习方法向深度学习转变的主要好处是,不再需要手动的工程设计。理论上,你可以给模型提供一堆数据,运行优化算法,它不需要你手动编写特征提取代码也能进行学习。因此,深度学习已经被应用到部分强化学习中,主要体现在智能体以像素的形式接收感知数据的部分,但是仍然需要研究者花大部分时间来手动设计程序。
这在我看来,深度学习并没有发挥什么作用!我甚至没有具体讨论其他深度强化学习问题,比如如果你需要稍微调整一下目标,那么你就要准备好重新训练整个系统,以及环境中的细微变化通常也会导致整个系统彻底失败,等等。通往通用人工智能的路还很长……
现在DeepMind 和 OpenAI 这样顶尖的机器学习研究机构,仍然在深度强化学习研究上投入主要的时间和资源。他们不断地用发布公关新闻轰炸互联网,展示他们正在取得的巨大进步:深度强化学习系统可以下围棋,玩 StarCraft、Dota 2,玩魔方等等。
我很困惑,为什么他们继续花那么多时间来开发有明确的定义规则和得分的系统、能在游戏中获胜的深度强化学习系统?
我相信现在每个人都明白,如果有足够多的时间、金钱和计算机来机械地训练每一个可能的动作,深度强化学习系统几乎可以在任何游戏中获胜。我认为他们大部分的策略仅仅是用一些「小把戏」来不断制造公关效应,以展示最新的深度强化学习系统如何在下一个最佳游戏中大获全胜,这样他们就可以继续从那些不太「懂行」的人那里获得投资,比如微软最近给 OpenAI 的 投了10 亿美元,谷歌则继续作为 DeepMind 的「存钱罐」给其投入资金。
DeepMind 最近,也就是在被谷歌收购 5 年后的一个成功案例是,他们训练了一个深度强化学习的智能体来下围棋、国际象棋、将棋和玩 Atari 游戏。是的,更多的电子游戏!!!
我的本意并不是抨击他们,我真的很高兴他们仍然在为实现通用人工智能贡献力量。但问题是,他们制造了很多错误的认知,并最终导致大量的人力物力浪费在「死胡同」上。
首先,他们发布的所有公关言论,比如「我们的文本生成模型(GPT-2)太危险了,不能发布」,使得普通大众认为我们离通用人工智能更近了,然而 AI 行业中的每个人都明白并没有更近。
其次也是更重要的是,他们错误地引导着人工智能研究者们花更多的时间在深度强化学习上。许多研究人员和黑客从这些研究深度学习的公司那里看到了一波又一波为深度强化学习「叫好」的 PR 新闻,当他们原本可以将精力集中在更大、更根本的问题上时,他们却花费了无数的时间去破解那些相同的问题。
四、要实现通用人工智能,真正要做的是什么?
如果人工智能和通用人工智能要向前发展,我认为是时候停止让深度强化学习系统玩电子游戏,转而集中精力解决更棘手的问题了。
所幸 DeepMind 和 OpenAI 的确有花时间解决其他问题,但正如我所说,深度强化学习似乎仍然是他们的主要关注点。
目前的深度强化学习系统似乎可以很好地契合已经有基础训练的系统。迁移学习中的智能体已经对其环境和自身有了基本的了解。我们不妨观察一个人类婴儿的学习历程:从出生开始,她(他)首先开始学习观察形状和颜色,移动手指,触摸物体,控制自己的身体,辨别声音,学习有关重力、物理、坠落、蠕动、弹跳的知识,学习物体恒常性等。每一个人或有机体都会在不同程度上经历这些学习过程。
通常在婴儿掌握了大量的知识之后,即当她(他)可以走路、抓握物体、自己上厕所、进行基本的交流等等之后,接下来就是更为正式的训练,比如家长会送孩子去学校,孩子在学校中会经历一个结构性更强的学习过程:学校通过家庭作业、评分以及测验训练孩子从课程中学习知识。
当前的深度强化学习系统似乎原本可以很好地适用于这种形式化的训练,在这种训练中,当智能体对环境有了基本的了解之后,系统可以清晰地、最大程度自动化地给所期待达成的目标指定分数。比方说如果孩子不能背诵 ABC 这三个字母,记为不及格,但如果他们能背诵整个字母表则记为及格。
当前深度强化学习技术正在本末倒置,我们正试图训练计算机从零开始完成一些复杂的任务,这种训练有时可能会有效,但由于这些模型是针对特定的任务而不是泛化能力而训练的,它们对自己的环境没有泛化的了解,最终导致系统过于脆弱,效果也不是很好。
只要奖励函数的问题没有被解决,再多新的学习算法,如BP 算法、DQN、PPO、DDPG、TRPO 都无法真正解决深度强化学习的问题。
我确信我们会有一些进步,也许会在 Starcraft 中赢得更多的分数,但是如果没有一个根本性的架构转变,来实现智能体在无监督的情况下从环境中进行学习,那么这些所谓的进步对于我们实现通用人工智能这一伟大梦想,也就没有太多的意义。
我自己的假设是,针对学习体的奖励函数实际上是由维持稳态和将「意外」最小化的动力所驱动的。
稳态是生物维持生存所需的稳定条件的过程。任何有机体都要生存,都必须保持其身体与外界环境分离。生物饥饿的时候要进食,疲倦的时候要睡觉,口渴的时候要喝水,受伤的时候要休息,被猎杀的时候要逃离,炎热的时候要让自己凉快一点等等。有机体在环境中行动时,这些与生俱来的原始信号指导着它们该做什么和该关注什么。如果它们不能胜任这些事情,则会导致有机体内失去平衡,最终导致过早死亡。
当生物在四处游荡时,它会建构自己的感知运动交互作用模型以及与周围世界交互作用的环境,该模型开始把各种事件汇聚到一起:天黑的时候应该比较冷;当我打嗝,我应该听到打嗝的声音;当我向左移动,我应该看到视野在 X 轴上变化;当一只动物走在我前面,它应该继续向前移动;当我的手指在杯子上扫过,我应该感受到光滑的表面;当我通过声带发出声音,我应该能在我的耳朵里听到相应的声音等等。
如果有什么意外的事情发生,有什么东西偏离了它的模型,那么该模型会重新调整它的预期,直到得到它所预期的结果,这也可能会导致更多的移动。如果最终不能得到预期的结果,那么真正的「意外」就会出现,这些神经元就被标记为「需要更新模型」,在这种情况下,重新学习和重新优化可能会实时发生,也可能是在机体处于睡眠状态时发生。
优化过程会在智能体的内部环境模型和实际环境之间进行,并持续优化以使意外最小化。神经科学和哲学已经在很长一段时间里对这些思想展开过讨论,比如 Andy Clark 提出的预测处理的思想以及 Karl Friston 提出的自由能量原理(Free Energy Principle)。
据我所知,这些思想还没有成功地应用于机器学习环境中。我认为这其中有很多技术问题:如何在计算机中模拟稳态状态,如何存储模型的内部表征,智能体的感官和环境之间的低分辨率以及低保真环境等等。
我并非意在采用一个煽动性的标题来写这篇文章,但我也无法以一种更恰当的方式来向人们说明「当前的深度强化学习架构从根本上而言就是错的」这一问题。
我们不需要更多可以玩多种电子游戏的深度强化学习模型,我们需要实现的模型是这样的:它可以在完全无监督的环境中学习智能体和环境之间的泛化表征。这种新的架构可以被称为「深度强化学习 3.0」、「积极推理」、「预测处理」或其他完全不同的东西,但是请不要再在这个「死胡同」上浪费时间了。
深度强化学习的研究已经取得了一些很有成效且有趣的成果,但是时候继续前进了。谁能找到方法来构建一个可以在无监督情况下从环境中学习的泛化的人工智能系统,谁就会对 AI 领域做出巨大的贡献并推动这个领域继续向前发展。
==================================================
标签:智能,另辟蹊径,人工智能,学习,奖励,电子游戏,深度,强化,死胡同 来源: https://www.cnblogs.com/devilmaycry812839668/p/14615865.html