计算机问世以来,人类对于制造智能机器的兴趣便有增无减。尤其是近年来,第四次技术革命掀起巨大的风暴,机器学习和深度学习领域技术飞速发展并快速转化为产品走入人们的生活,人工智能俨然成为了全民话题。能识别人脸,能自动驾驶,能诊断疾病,能预测未来……人们早已开始幻想制造出真正的人工智能时的景象,探讨人类与这位“超人”的关系。
图一:《极限挑战》人工智能主题节目
然而,人类距离制造出这样一个拥有真正的智能的机器还有相当遥远的距离。当下人工智能领域当之无愧的明星神经网络,才刚刚学会“数数”。
神经网络可以在学习表示和操纵数字,但当他们遇到超出训练范围之外的数值时,却往往不知所措。图一中展示了不同多层感知器学习标量的恒等函数(f(x)=x)时的行为。恒等函数是最简单的数值关系之一,尽管许多结构在理论上可以表示这一数值关系,但在实践中它们的表现却差强人意。
图二:利用 MLP(多层感知器)学习恒等函数。MLP 只“学会”了训练数据数值范围内的内容。训练数值外的平均误差斜向上升。误差的大小与模型激活函数的非线性程度相关。
究其原因,是系统结构导致泛化能力的缺失,使得这些模型缺乏对数值的推理能力。然而,从像人类一样的高级哺乳动物到如蜜蜂等昆虫般简单的生物,这种能力在生物界十分常见。由此也表明,基本的数值推理是智能的基本的组成部分。
为此,来自 DeepMind、牛津大学和伦敦大学的研究人员提出了一种新的模型NALU(neural arithmetic logic unit),与传统处理器中的算术逻辑单元类比,他们称该结构为神经算数逻辑单元。
NALU 通过线性激活函数表示数值量,由门结构控制,通过原始的算术运算来操纵。实验结果表明,通过该结构加强的神经网络可以学习追踪时间、对数字图像进行运算、将数值语言转化为实值标量、执行计算机代码、计算图像中的物体数目……和传统结构相比,该结构在训练时学习的数值范围之内和在外都表现出了更好的泛化能力,可以把握数据底层的数值本质,推理能力往往可以超出训练中观测数据几个数量级。
研究人员提出了两种模型。第一个模型称为 NAC(neural accumulator,神经累积器)。这是一种特殊的线性层,它的转换矩阵 W 仅仅由 0,-1,1 组成。也就是说,它的输出只会是输入向量各个行进行加减运算的结果,而不会像之前的处理包含缩放。因此,不论进行多少操作,在整个模型中,数值表示的尺度都是不变的。该模型不包含偏置向量,也不对输出结果应用任何非线性操作。
图三:NAC 对其输入进行线性转换。NALU 通过门结构(b 中橙色部分)控制两个 NAC 结构的组合和相应的权重实现加减(b 中小紫色色部分)和乘除(b 中大紫色部分)操作。
仅仅可以进行加法减法操作并一般化是不够的,乘法等更为复杂的操作也是必须的。故而研究者进一步提出了 NALU(neural arithmetic logic unit,神经算数逻辑单元)。他通过学习得到两个子细胞(NAC)的不同权重的和,其中一个处理加减操作,另一个处理乘除幂运算等。NALU 也表明了 NAC 可以通过门控制的子操作扩展,进行新型数值函数的端到端学习。和 NAC 一样,NALU 也不包含任何改变数值表示的尺度的操作。
图四:NAC 与 NALU 的运算规则
这项工作可以视为是在深度神经网络中应用线性激活函数的倡导。正如最近其他结构创新,如 Highway Networks、ResNets 和 DenseNet 等,他们都倡导使用线性连接以减少梯度爆照和梯度消失。尽管由于模型体系的深度增加会带来额外的计算开销,但这样的方式的确会改善性能。这项工作也符合机器学习中更广泛的主题,即寻求以控制方程的形式确定那些能探索空间中不可见部分的系统的基础结构。
实验一:简单的函数学习任务
这个简单的实验意在展示 NAC 结构和 NALU 结构学习选择相关输入并对其应用不同算数方法的能力,也就是设计它们的初衷。该任务分成两个部分。第一部分是静态任务,每个输入作为一个向量仅仅出现一次。第二个任务是循环的,输入组成序列依次呈现。
图五:实验一测试结果 插入值(Interpolation)和外推(Extrapolation)错误率。0.0 是最优的表现结果,100.0 表示随机效果,>100.0 表示效果比随机初始化的模型还差。
图中的结果表明,各种模型即使在插值的处理中取得了不错的结果,但是它们无一能较好地处理数值外推的情形。而 NAC 在加法,减法运算中均取得了较好的结果,更为复杂的 NALU 表现得则更为优秀,除了数值外推的除法运算。
实验二:MINST 计数和算数任务
在上一个任务中,输入和输出已经被泛化为可以直接进行计算的形式,需要学习的仅仅是中间的操作和表示方法。在这个任务中,研究者探究了该模型能否学习非数字化输入。他们随机选择 10 个 MNIST 数据集中的数字输入循环网络模型中。在 MNIST 计数任务中,要求其输出各种类型数字出现的次数。在 MNIST 数字加法任务中,则要求其输出这些数字的和。
图六:实验二测试结果
与实验一呈现出的结果相同,标准结构尽管可以较好的处理插值,在处理数值外推方面却表现欠佳。而 NAC 结构在这两种情况下都表现优异。
除此之外,研究者还进行了文本数字转换、程序评估、时间追踪等实验,证明了 NALU 的优良性能。这一结构还可以很容易地与各种神经网络模型结合使用,提高模型性能。
NALU 结构简单,功能强大,尽管论文刚刚发布数日,却已经引起热议。GitHub 上已经出现了十几个利用不同工具对该结构的实现和应用,其中包括包括 pytorch、tensorflow 等广泛应用的机器学习框架。研究者 Trask 也在 twitter 上不竭余力的为其宣传,希望其在更多任务中被尝试应用。