研究已经发现,灵长类生物大脑中的神经元越多,平均下来每个神经元与其他神经元的连接就越少(来自Herculano-Houzel等人的研究,2010)。这与我们设计深度神经网络的方式恰恰相反。深度神经网络更倾向于将每一层中的每个新神经元都与前一层中的所有神经元连接起来。
我们已经知道如何将一个完全训练好的稠密网络压缩到稀疏网络,但是,让一个网络在训练期间始终保持稀疏却很少被研究。我们如何才能做到这一点的呢?今天,我们就要介绍ELMo作者Luke Zettlemoyer的最新研究,稀疏动量——一种训练稀疏网络的有效方法。
在稀疏学习中,最重要的是尽可能有效地使用神经网络中的每一个权重。如果将“有效性”定义为“减少误差”,那么我们的下一步就很明确了。我们需要找到能够一个指标——它应当能够衡量一个权重减少误差的效果,并删除所有并不能减少误差的权重。一旦移除了权重,就可以在我们认为有望减少未来误差的位置重新生成新的权重。
打个比方,如果将北极作为局部最小值并使用罗盘针向局部最小值的渐变,那么您可以通过摇动指南针来旋转罗盘针来模拟随机梯度下降更新。每次针经过正北时,它会逐渐减速,然而,由于旋转,它仍会“超过”该方向。但是,如果你取平均指示 - 一次指针位于北极左侧,另一次指向右侧 - 这些偏差抵消了,你会立即得到一个非常接近的方向真正的北极。
如果一个权重的动量表明它一致地减少了多少误差,那么一个层中所有权重的平均动量大小应该表明每个层平均减少了多少误差。通过获取层的平均动量大小,我们可以轻松地比较每层中平均重量的有效性。这就使我们可以有底气地说,例如,卷积层A中的权重平均只有完全连接层B的1/3,反之亦然。这种方法使我们能够有效地重新分配权重:如果我们发现“无用”权重,现在我们就能够很精确地知道到底把它放在哪一层了。可是这下问题又来了——在这一层中,我们把它具体放哪儿呢?
我们可以从以下两个问题着手:哪些是最无用的权重因素?我们应该在哪一层特征中增加权重?第一个问题在神经网络压缩研究中十分常见,我们采取修剪小量级权重的方式,这种方式意义重大。假设所有权重具有相似量级的平均输入,并使用批量归一化方法,那么小量级权重会使神经元产生激活差异最小,因此,删除这些小量级权重对神经网络法预测性能的改变最小。
一旦我们移除了小量级权重,重新分配剩余权重到有效层(由平均动量确定),就需要确定此权重在相应有效层的发展位置。首先思考一个问题:“连接哪些神经元可以协同减少误差?”答案很明显,取决于动量的大小。但无论如何,我们需要先找到缺失或零值权重的动量值(之前我们从训练中排除的那些),在这些缺失权重的位置增加动量值大的权重,这样就完成了稀疏动量算法,此过程如下图所示。
稀疏动量通过查看临近梯度(动量)的加权平均值来确定在稀疏网络中增加新权重的位置,以找到能够一致减少误差的权重和层。(1)我们根据平均动量大小确定每层的重要性。(2)我们删除每一层较小50%的权重。(3)然后,我们根据层的重要性在层之间重新分配权重。在每一层中,我们增加大动量之处的权重。
在ImageNet图像识别数据库中,我们无法达到密集性能水平,这表明需要改善稀疏动量的指标。但无论如何,稀疏动量法与其他方法相比,在训练样本过程中实现保持稀疏权重方面,具有明显优势。稀疏学习预示了我们需要加速样本的训练,我们是否已经做到了?似是而非。如果权衡稀疏卷积的加速效果,稀疏动量可以有效地加速训练,但由于稀疏神经网络法近期才用于训练,对于GPU来说尚未建立优化的稀疏卷积算法,目前,至少对于稀疏动量法,细粒度稀疏模式的权重表现如此。
因此,我们将加速效果分为两组:一组假设存在某种稀疏卷积算法来实现加速,另一组使用标准密集卷积算法来实现加速。究竟密集卷积法如何帮助稀疏网络实现加速呢?当看到神经网络稀疏模式出现卷积通道完全为空的情况,即出现一个全零的卷积滤波器时,我们便可以从计算中删除此通道,同时不改变卷积的结果,从而获得加速效果。
但是,我们从加速效果中发现,最佳稀疏卷积法和朴素密集卷积法大相径庭,这正好清楚地表明了GPU对的优化稀疏卷积算法的需求。我们使用稀疏动量法训练的样本与使用仅有5%权重的密集卷积法的性能水平相当。是什么原因让这5%的权重如此高效,可以与稀疏动量法权重的20倍相匹配呢?
为了研究这个问题,我们对比了稀疏网络法与密集网络法的不同特征,其中低层特征例如边缘检测器,中层特征例如轮子、鼻子、眼睛、爪子,高层特征例如汽车表面,猫脸,冰箱门等。
由此可以预测,第一个能够在核图形处理器上成功训练稀疏神经网络的研究团队,将开启人工智能领域的新世界的大门。除此之外,稀疏学习算法的另一个挑战是将其应用于自然语言处理(NLP)。基于我的实验,毫无疑问,与计算机可视化相比,在使用自然语言进行稀疏学习方面,还需要加强。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』