作者 | 杨晓凡

编辑 | 贾伟
深度学习社区中对于大型神经网络的泛化性能已经有过很多讨论。尽管大型神经网络比更小的网络泛化得更好,但是原因并不是因为前者具有更多的权重参数,而是正如最近的一项研究工作所显示的,是因而更大的网络可以让优化算法在允许的一小部分解空间内找到好的解或者“彩票”。
这些解可以被剪枝来形成具有良好归纳偏置的子网络,它们具有理想的泛化性能。
最近,神经科学界对深度学习提出了评论,指出动物天生具有高度结构化的大脑连接,而这些连接过于复杂,无法在基因组中显示指定,而是必须通过“基因组瓶颈”压缩成信息编码到指定了一套大脑连接规则的基因组中。
先天的处理过程和行为由进化编码到基因组中,正如动物大脑中许多神经回路都是预先连接好并且从出生起就准备好了需要的操作一样。这些先天能力让动物能够较轻易地拥有泛化能力,以及快速适应不同环境。
实际上,在神经进化领域中,有一个关于进化遗传瓶颈的相关研究领域,叫做间接编码。类似于彩票解的剪枝,间接编码方法不仅可以表达大型神经架构,同时还能最小化无模型参数的数量。
研究者认为,这项间接编码的工作所奠定的基础,有助于更好地理解神经网络的归纳偏置,并为解决领域外的泛化问题提供新的视角。
目前大多数训练神经网络的方法,无论是采用梯度下降策略还是进化策略,都是为给定神经网络的每个单独权重参数求值,这些方法就称作直接编码。
而另一方面,间接编码则他提供了一种完全不同的方法,它们针对指定如何生成(更大得多的)神经网络的一小组规则或操作(称作基因型)进行优化。一般而言,表型包括神经架构及其权重,然而现在的间接编码方法通常仅生成使用一小组基因型参数的预定义架构的权重。
在深度强化学习流行之前,神经进化文献中的间接编码方法对于最终会用到深度强化学习解决方案的问题类型而言,是一种有前景的方法。早期的研究表明,对于基于视觉的强化问题,大型神经网络可以被编码成更小得多的基因型解决方案,它们能够玩像素级的Atari游戏(2012年仍被认为具有挑战性)或直接基于像素输入玩赛车游戏,这都表明了间接编码的潜在能力。
甚至在深度学习和卷积网络在2012年开始受到重视之前,间接编码就已经能够让神经网络控制器玩具有结构性规则的棋盘游戏,如跳棋和围棋。
通过对具有少量参数的大型模型的权值进行编码,可以大大减少解的搜索空间,但随之付出的代价是将的解限制在由直接编码方法提供的所有可能解的一个小的子空间内。
这一限制自然而然地将一个决定智能体擅长什么以及取决于直接编码方法选择的归纳偏置合并到智能体中。例如,HyperNEAT 在机器人步态控制方面取得了成功,这表明CPPNs4 能够有效地表征适于移动的模块化和对称性。但是,是否有更适合基于视觉的强化学习任务的间接编码方法呢?
【动图1】
【动图2】
在这项工作中,研究者发现自注意力可以被视为一种间接编码的形式,这使得他们能够构建高参数效率的智能体。他们研究了这些智能体在基于视觉的强化学习任务中的性能和泛化特性。
Transformer 模型成功地应用于自然语言处理和视觉等领域,让自注意力流行起来。自注意力提供了一个简单而强大的方法:仅使用 O(d) 个参数值就能参数化一个大小为 O(n^2)的大型权重矩阵,其中n表示可视输入的大小,d表示某些转换空间的维数,并且 n>>d。
此外,这种参数化强制使用归纳偏倚,从而让智能体只关注其可视输入的一小部分,因此,自然会使智能体更具解释性。
作者们会在下文中逐渐展示出,神经进化是训练自我注意力智能体的理想方法,因为这样做不仅可以减少基于梯度的方法带来的高复杂性,而且还可以在模型中集成一些能提高自我注意力的效果但却不可微的模块。最终得到的模型只需要传统方法的千分之一的参数数量就可以在有挑战性的视觉任务中得到更好的表现,而且在经过修改的环境中也有明显更好的泛化性。
【动图3】
这项研究的总目标是向大家介绍自我注意力,让大家知道神经进化的整个工具箱里还有这么一件非常强力的工具。作者们希望他们的结果可以鼓励更多研究人员参与到神经进化、自我注意力的研究中来,以及让大家重新意识到非直接编码的妙处。
1

自我注意力其实是一种非直接编码

非直接编码是这样一种方法,它用一组“基因型参数”来表示神经网络的权重(“表现型”)。基因型参数可以通过它的编码算法控制更大的解空间。比如HyperNEAT就可以通过一种基于坐标的CPPN-NEAT网络对很大的神经网络进行编码,而Compressed Network Search可以使用离散余弦变换把一个很大的权值矩阵中的权重压缩到一组很小的DCT等效系数中,就像JPEG格式的图片压缩一样。
不过,毕竟有压缩,非直接编码方法能产生的权重组合只是整个权重空间中的很小的一部分。这种解空间的限制带来的结果就是,非直接编码不可避免地让表现型带有了一定的归纳偏倚。这种偏倚天然地决定了产生的网络能适合执行哪些任务,也就是理论上来说它适合执行的任务只会是不带有偏倚的网络的一部分。
更近期的一些研究中提出了新的方法增加非直接编码适合的任务范围。ES-HyperNEAT 提出,可以让非直接编码算法本身的一部分向任务环境适应;Hypernetworks 提出可以让表现型直接由输入决定。沿着这条“让输入信息成为权重生成过程的一部分”的路线,许多研究都表明,只要权重可以向当前面对的任务适应,它的表现型就可以有很强的表达能力;而这是老式的静态非直接编码方式无法做到的。
【动图4】
类似地,自我注意力也在注意力权重矩阵上增加了额外的结构,让它能够随着输入变化而变化。实验表明,这种额外增加的、和输入相关的结构可以帮助智能体学习不直接相关的项目之间的关系,从而提高它在相关的任务中的表现。
作者们通过实验发现,通过这种注意力矩阵得到的特征对于执行下游任务的决策器+控制器尤其有帮助,即便限制控制器的大小,让它只含有2500个参数,只要借助自我注意力产生的信息,它仍然可以应对有挑战性的基于视觉的任务。
2

设计一个基于自我注意力的新智能体

作者们从“非注意盲视”(inattentive blindness)的概念里获得启发,设计了基于自我注意力的新型智能体。这个概念来自于人类,当人类大脑花费精力处理任务的时候,它会把大部分注意力都花在只和当前任务相关的元素上,暂时对其他的信号视而不见。这个智能体也是一样,作者们设计它,让它只注意输入图像中对任务非常关键的区域,然后忽略所有别的区域。
这个自我注意力智能体的结构示意图如下
它的信息处理过程分四步:
  • 输入转换。给定一张观察到的图像,智能体首先把图像大小缩放为LxL,然后把图像分割为N个小块,每一个小块都有机会在后续的流程里被注意到
  • 通过自我注意力进行重要性投票。为了确定哪些小块是合适的,智能体会把所有小块都输入到一个自我注意力模块,从每个小块上都获得一个表示了它的重要性的向量,然后从中选出K个重要性最高的小块
  • 小块选择以及特征提取。用一个带有任务知识的f(k)处理这K个小块,从每个小块中分别提取相关的特征;f(k)可以是学习到的模块或者预定义的函数
  • 控制器。智能体把这些特征输入到控制器中,控制器会输出动作,在环境中执行
由于这个信息处理过程中非常重要的排序和图像小块剪切步骤都是不含有梯度的,所以想要训练这个模型的话没办法直接使用基于梯度的反向传播方法。进一步地,如果限制只在模型中使用基于梯度的模型,也会让模型里没办法继续使用刚才提到的带有任务知识的 f(k) 特征提取器,因为 f(k) 中可以含有离散的操作,或者需要处理离散的特征。
所以作者们转而使用演化算法来训练智能体。实际上作者之一的 David Ha 自己本来就喜欢且擅长使用进化算法,我们也曾编译他的关于演化算法的博客
最终作者们具体选定的算法是 CMA-ES,用它训练出的模型有较为稳定的表现。
为方便阅读,再放一次【动图1】
为方便阅读,再放一次【动图2】
智能体的运行效果演示,左侧为环境的原始图像;中间为缩放到96x96像素,并分为小块,加亮显示的是模型认为最重要的10个小块;右侧为选出的小块包含的特征,这些特征会继续送入到控制器中
作为一种改进的演化算法,CMA-ES 可以根据当前世代的模型与环境的适应程度自动地调节下一个世代的搜索空间大小。详细来说,CMA-ES 不仅会控制世代内的均值 μ 和标准差σ,而且还会计算参数空间的整个协方差矩阵。这个协方差矩阵的主要作用是,可以借助它增大搜索空间的变化,加强探索过程,或者当计算出的适应程度表明已经接近最优解的时候,减小变化,向最优解精细调节。不过这整个协方差矩阵的计算并不简单,所以高维空间的任务很少会选用CMA-ES,但这次的任务偏偏是基于视觉这种高维输入的。好在作者们设计的智能体中含有的参数比传统方法要少很多,他们才能够使用现成的CMA-ES实现来训练智能体。
【动图5】
这里只是简单介绍了这个智能体的设计,更详细的技术细节请参考原博客以及原论文。

3
实验

【动图6】
【动图7】
在CarRacing和DoomTakeCover环境中的对比测试表明,这个自监督智能体的表现已经超过了所有现有方法(虽然相比World Model的优势不明显),获得了新的最好成绩;而同时,它的参数要比以往的方法少两三个数量级。
除此之外,它使用的基于图像小块的视觉处理方法也让人类可以更容易地理解它的决策方式。在以下的实验画面中,智能体的自我注意力模块认为前 k 个最重要的图像小块会加亮显示(越白就越重要)。
【动图8】
【动图9】
通过对智能体注意力关注部分的可视化,可以看到它注意的部分也和人类的直觉有相符之处。比如在CarRacing赛车游戏中,智能体的注意力关注的是赛道的边缘,而当遇到弯道的时候,它在开始转弯之前就会开始注意弯道的部分。另外可以看到,由于跑道是环形封闭、小车是按逆时针方向行驶的,所以它的注意力多数都分给了赛道的左侧。
而在DoomTakeCover环境中,智能体能注意到飞来的火球,而且当它的位置靠近墙角的时候,它也能注意到墙壁并调整自己的躲避策略。而且可以看到,智能体还会用一部分注意力关注屏幕底部的状态栏,尤其会关注中间的头像。作者们猜测这是因为智能体会把这里作为定位点,用来估计它自己和火球之间的距离。
作者们还注意到,所有测试的方法在这个环境中的得分都有大幅波动。作者们认为这可能和游戏本身的设计有关,有一些火球没有出现在智能体的视野里,但确实在逼近,然后会击中智能体。
通过这一组基础的测试,作者们已经能够回答一组基本问题:这个智能体能解决有挑战性的基于视觉的强化学习问题吗?它相比于其他的方法有什么优点?答案是它不仅能很好地解决,而且它还有更好的可解释性,需要的参数也少很多。
4
泛化能力测试
这些智能体能在没见过的环境中泛化吗?
为了测试这些智能体的鲁棒性以及泛化到全新状态的能力,作者们修改了CarRacing和DoomTakeCover这两个环境,然后让不经过重新训练、不经过精细调节的预训练模型直接在其中运行。
作者们在下面的实验中做了许多种不同的修改,不过作者们使用的修改方式都遵守一条规则:这些修改不改变任务中的关键任务、关键信息损失。他们尝试的修改有下面几种:
色彩干扰:作者们随机地把CarRacing环境中跑道和草地的颜色做一些偏移,但在每场比赛中颜色保持固定。原始环境中自我注意力智能体得分为914±15,增加变化后为898±56;同样在增加变化后的环境中,作为基准模型对比的World Model得分为851±130、GA得分为160±304、PPO得分为730±338。
【动图10】
【动图11】
帧遮挡:作者们在屏幕的的两侧增加了两个黑色长条,遮挡了一部分画面。原始的窗口大小为800x1000像素,两个遮挡的黑色长条宽度为75像素。原始环境中自我注意力智能体得分为914±15,增加变化后为900±35;同样在增加变化后的环境中,作为基准模型对比的World Model得分为166±137、GA得分为675±254、PPO得分为615±217。
【动图12】
【动图13】
额外色块:作者们让一个红色的色块显示在小车的固定方位。为了避免色块遮挡跑道,作者们让色块在右边显示。原始环境中自我注意力智能体得分为914±15,增加变化后为898±53;同样在增加变化后的环境中,作为基准模型对比的World Model得分为446±299、GA得分为833±135、PPO得分为855±172。
【动图14】
【动图15】
增加墙的高度:在DoomTakeCover环境中,作者们把围墙加高,其他的设置都保持不变。原始环境中自我注意力智能体得分为1125±589,增加变化后为934±560;作为基准模型对比的World Model得分为243±104。
【动图16】
【动图17】
改变地面的纹理:把地板从灰色纹理变成棕色纹理,其它设置保持不变。原始环境中自我注意力智能体得分为1125±589,增加变化后为1120±613;作为基准模型对比的World Model得分为218±69。
【动图18】
【动图19】
悬浮文字:在屏幕上方显示一个有文字的蓝色气泡。把文字放在气泡里是为了避免文字影响对任务重要的信息。原始环境中自我注意力智能体得分为1125±589,增加变化后为1035±627;作为基准模型对比的World Model得分为240±63。
【动图20】
【动图21】
经过这些测试,已经能可以看出自我注意力智能体的泛化能力如何了,给环境增加变化以后,智能体的表现只有很小的变化。对比的几个基准模型明显受到视觉干扰的影响,而这个智能体只关注对任务起到关键作用的位置,而且只通过自我注意力获取视觉输入中的一些小片段,所以就可以在有变化的环境中依然保持不错的表现。自我注意力的设计相当于让它忽略掉它认为不重要的视觉输入,所以,即便环境、环境中不重要的部件发生了变化,它的表现也可以不受影响。
相比之下,World Model的控制器使用的抽象表征,本来主要是为了重建输入图像的,而且也不带有多少正则化,所以它学习到的表征中除了对任务关键的信息以外还含有别的额外信息,当环境变化、这些信息跟着变化以后,就会对控制器形成误导。GA和PPO的泛化能力就要比World Model好一些,它们有端到端学习、无监督表征学习、随机策略的数据收集,所以可以学到更好的针对任务的表征;而且GA和PPO都还可以精细调节全连接层,给重要区域增大权重。
5
讨论
虽然在刚才的实验中展示了这个模型可以应对一些突如其来的环境修改,但这个方法仍然有不少局限性,未来还需要做更多工作来进一步提高智能体的泛化性。下面说明一些这个方法的局限性。
这个方法新获得的泛化性主要来自于能关注到正确的东西,而不是来自于逻辑推理。比如如果在赛车环境中再增加一条并排的跑道,智能体就会跑到另一条跑道上去,甚至会反方向开。
【动图22】
另外,当背景画面有很大变化的时候模型也会失效,比如把绿色的草地背景换成YouTube上找到的视频(猫猫和街头霸王游戏画面)之后就只有很糟糕的表现了。
【动图23】
【动图24】
甚至于,如果把草地背景换成纯粹的噪声的话,可以看到,模型的注意力模块就完全失效了,注意到的全都是噪声中的小块。
【动图25】
作者们尝试了在这样的噪声环境里从零开始训练智能体,这样一来智能体确实能学会如何在这样的环境里正常驾驶赛车了。不过很有趣的是,自我注意力模块仍然只关注噪声中的小块,控制器似乎学会了一种新的策略,就是要避开这些关注到的地方;与之印证的是,当作者们增加注意力模块注意的小块数量的时候,随着数量增加,模型躲开这些地方的效果也更好了。
【动图26】
这些结果表明,虽然当前的方法就能适应环境中的不大的变化,但想要适应大的变化、达到人类水平的泛化能力还需要做很多后续的工作。而且,这项研究中的设计是只使用图像中关注的小块的位置、不使用这些小块的内容,这种设计可能也并不怎么适合更复杂的任务。在后续研究中,如何学习更有意义的特征、甚至如何从视觉输入中提取出抽象的符号信息,都是有意义的研究方向。
6

结  论

这篇论文展示了,把自我注意力作为强化学习智能体中的一个模块可以发挥出很好的效果,可以让智能体解决具有挑战性的基于视觉的任务。作者们设计的智能体可以在CarRacing和DoomTakeCover环境中得到不错的表现,而且它的参数要比传统方法少很多,在像素空间也具有很好的解释性。用神经进化的方法训练之后,智能体学会了把它的大多数注意力都用来判断任务中很关键的视觉线索,从而它也能够泛化到修改过不重要的视觉元素的环境中;传统方法在这种修改过的环境中表现会下降很多。
不过必须说明的是,这个智能体的泛化能力相比人类而言还是很有限的。实验中展示的对环境的修改是针对基于注意力的方法设计的,具体来说,作者们没有修改模型主要关注的物体的属性,如果修改的话这个模型的表现也会很差,甚至可能和不使用像素空间注意力的方法一样差甚至更差。作者们认为这项研究是对其他一些研究强化学习泛化性问题的论文的补充,他们在未来的后续研究中也会继续研究如何提高模型的泛化性。
在训练智慧智能体时,神经进化是一类效果非常好的方法,但它在强化学习中的使用很有限,这是因为直到近期人们才弄清它对大规模深度模型的作用如何。在这项研究中,作者们发现用神经进化方法训练带有自我注意力的智能体非常理想,相比于基于梯度的方法,神经进化方法可以去掉很多不需要的复杂度,从而得到小得多的模型。除此之外,神经进化训练出的模型中还可以含有带有离散计算、不可微分计算的模块,这些模块也可以对模型的表现有帮助。正因为神经进化可以训练出又小又优秀的模型,作者们也很期待看到这类模型能否改变目前的文献中基于视觉的任务基本被深度强化学习模型称霸的状况。
在这项研究中,作者们也找到了非直接编码和自我注意力之间的联系。具体来说,作者们展示了自我注意力可以看作一种非直接编码。那么自然地,未来研究的另一个有趣方向就是继续探索其他形式的非直接编码瓶颈,看它们搭配神经进化使用以后能否带来参数高效的、具备一些固有行为的强化学习智能体。

原论文

标题:Neuroevolution of Self-Interpretable Agents
地址:https://arxiv.org/abs/2003.08165
摘要:非注意盲视(Inattentional Blindness)是一种让人忽略掉眼前的一些东西的心理现象。这是知觉中的选择性注意力造成的,它让人能够保持专注于世界中的某个重要的部分,而不受到其他无关细节的干扰。
谷歌研究者们受选择性注意力的启发,研究了人工智能体通过自注意力瓶颈视角来感知世界的属性。他们通过限制智能体仅能看到视觉输入的一小部分,发现智能体的策略可以直接到像素空间中得到解释。他们还发现,神经进化方法是训练基于视觉的强化学习任务的自注意力架构的理想方法,允许合并包括对于智能体有用的离散、不可微的操作在内的模块。
研究者们认为,自注意力与间接编码具有相似的属性,即大的隐式权重矩阵由少量关键查询参数生成,从而让智能体能够使用比现存的其他方法至少少1000倍的参数来解决具有挑战性的基于视觉的任务。由于智能体只专注于关键任务的视觉提示,它们能够泛化到在传统方法失败后对与任务无关的因素进行了修改的环境中。
博客地址:
https://attentionagent.github.io/

阅读原文,直接报名直播!
继续阅读