上图省略了不少细节内容。下图是一个时间片段的完整示意图,包括了三个计算步骤。
看上去有点儿复杂,所以我们一步步往下看。从较高的层次观察,我们仍旧运行RNN模型,输出各个状态的带权重组合:
每一步的权重值由“halting neuron”决定。这个神经元事实上是一个sigmoid函数,输出一个终止权重,可以理解为需要在当前步骤终止的概率值。
停止权重值的总和等于1,每一步结束后要减去相应的值。一旦这个值小于了epsilon,我们就停止计算。
当训练Adaptive Computation Time模型时,可以在损失函数添加一项“ponder cost”,用来惩罚模型的累积计算时间。这一项的值越大,就更不倾向于降低计算时间。
ACT仍是一个非常新的概念,但是我们相信它以及其它类似的概念今后一定会发挥作用。
代码
目前开源的ACT代码貌似只有 Mark Neumann’s (TensorFlow)
展望
在某种程度上,事先有准备的人会比两手空空的人更聪明。我们使用数学符号能解决许多新问题,而我们依靠计算机则可以完成更多不可思议的任务,远远超出了我们的个人能力。
一般来说,智慧的表现形式往往是人类启发式直觉与更细腻的媒介的交互过程,比如语言和公式。有时候,这种媒介是实实在在存在的物体,可以用来存储信息,避免我们犯错误或是进行繁重的计算任务。在其它情况下,这种媒介是我们脑子里的模型。无论如何,它似乎是智慧的基础。
机器学习领域的最新研究成果已经带有这种味道了,将神经网络的直觉与其他东西结合。一种方法是所谓的“启发式搜索”。例如,AlphaGo ( Silver, et al., 2016 ) 建立了一个下围棋的模型,在神经网络的指导下探索如何进行游戏。同样的,DeepMath ( Alemi, et al., 2016 )利用神经网络处理数学表达式。我们在本文中提到的“增强RNN”属于另一种方法,我们将RNN模型与工程媒介相结合,以提高它们的泛化能力。
与媒介的互动自然会涉及到一系列的采取行动、观察情况、继续行动步骤。这就产生了一个重大的挑战:我们如何学习该采取哪些行动?这听起来像是一个强化学习的问题,我们当然可以采取强化学习方法。但是强化学习也正在攻坚解决这些难题,其解决办法目前也很难被采用。聚焦的好处在于它让我们比较轻松地绕开了这个问题,我们可以不同程度地采取所有行动。而强化学习只允许我们选择一条道路,从中学习经验。聚焦机制在岔路口会选择所有的方向,然后将各条路径的结果合并起来。
聚焦机制的一大弱点就是每一步都需要执行一个“行动”。这导致消耗的计算资源呈线性增长。有一种解决方式是将聚焦稀疏化,因此只需要处理其中的一部分记忆单元。然而,也许你希望聚焦点是基于记忆单元的,这样势必需要浏览所有的内存单元,这又带来了不小的挑战。我们看到了一些初步的解决方案,例如 Andrychowicz & Kurach, 2016 ,似乎还有很大的提升空间。
增强RNN和其背后的聚焦技术真的领入兴奋。我们期待看到它们取得更大的进展!