稀疏学习:从人脑得到灵感,让深度学习打破算力限制
作者头像
  • 贾静华
  • 2019-08-06 14:43:32 3

大数据文摘出品

来源:timdettmers

编译:张秋玥、Luciana、钱天培

计算能力的进步是推动深度学习发展的重要力量。

从2010年到2018年,GPU性能提升了97倍。然而,由于我们已经接近半导体技术的物理极限,预计在未来5至8年内,GPU性能的提升将仅略高于80%。

在计算能力难以进一步提升的情况下,我们还可以探索哪些研究方向?

一种可行的研究方向是从人脑中寻找灵感。

人类大脑消耗的能量仅为GPU的十分之一,但其效率却高出10^9倍。是什么让大脑如此高效?

原因之一是稀疏性。

研究表明,灵长类动物大脑中的神经元数量越多,平均来看每个神经元与其他神经元的连接就越少(源自Herculano-Houzel等人的研究,2010)。这与我们设计深度神经网络的方式截然不同。深度神经网络倾向于将每一层中的每个新神经元与前一层的所有神经元连接起来。

我们已经知道如何将一个完全训练好的稠密网络压缩成稀疏网络,但在训练期间保持网络稀疏的研究则较少。

那么,我们如何实现这一点呢?今天,我们将介绍ELMo作者Luke Zettlemoyer的最新研究成果——稀疏动量:一种有效的训练稀疏网络的方法。

优秀的稀疏学习算法长什么样?

在稀疏学习中,最重要的目标是尽可能有效地利用神经网络中的每一个权重。如果我们把“有效性”定义为“减少误差”,那么我们的下一步就非常明确了。我们需要找到一个指标——它可以衡量一个权重减少误差的效果,并删除所有不能减少误差的权重。一旦移除这些权重,我们就可以在我们认为有可能减少未来误差的位置重新生成新的权重。

如果我们仅仅关注权重的误差梯度,那么我们确实有这样的目标。然而,如果我们观察连续的梯度,就会发现梯度的变化可能非常大。例如,如果你有一个神经网络对手写数字0到9进行分类,某个权重可能非常适合检测顶部的直线,这有助于减少数字5和7的错误,但它可能无法识别数字0、1、2、3、6、8、9(甚至可能会帮倒忙!)。相反,检测右上方曲线图案的权重可能有助于识别0、2、3、8、9。因此,我们可以认为随着时间的推移,后者权重比前者更能一致地减少误差。那么,我们如何自动检测神经网络中这种有用的权重?

动量:找到可以持续减少误差的权重

打个比方,如果我们把北极当作局部最小值并用指南针指向局部最小值的方向,那么可以通过摇晃指南针来模拟随机梯度下降的更新。每次指南针经过正北时,它会逐渐减速,但由于摇晃,它仍会“超过”那个方向。然而,如果你取平均值——一次指南针指向北极左侧,另一次指向右侧——这些偏差会相互抵消,你立即就能得到一个非常接近真实北极的方向。

这就是动量优化技术的核心思想:我们对连续梯度取平均值以更好地估计局部最小值的方向。与指南针在慢慢接近北极时会变得越来越准确的特性类似,我们希望在随机梯度下降中更加重视最近的梯度方向。一种方法是指定一个加权平均值,给当前梯度分配更大的权重,给前一个梯度分配较小的权重——这称为指数平滑。通过指数平滑权重的梯度,我们得到一个加权梯度矩阵——这个矩阵被称为动量矩阵(这就是动量优化这个名字的由来)。通过这个目标,我们可以确定哪些权重可以一致地减少误差。

重新分配权重:层平均动量大小

如果一个权重的动量表明它一致地减少了多少误差,那么一层中所有权重的平均动量大小应该表明每层平均减少了多少误差。通过获取层的平均动量大小,我们可以轻松比较每层中平均权重的有效性。这样,我们可以说,例如,卷积层A中的权重平均只有完全连接层B的1/3,反之亦然。这种方法使我们能够有效地重新分配权重:如果我们发现“无用”的权重,我们现在可以非常准确地知道应该把它放在哪一层。但是问题又来了——在这一层中,我们应该具体把它放在哪里?

哪些权重需要删除,在哪里重新分配权重?

我们可以从两个问题入手:哪些是最无用的权重?我们应该在哪些层的特征中添加权重?第一个问题在神经网络压缩研究中非常常见,我们采用修剪小量级权重的方法。假设所有权重具有相似量级的平均输入,并使用批量归一化方法,那么小量级权重会使神经元产生激活差异最小,因此,删除这些小量级权重对神经网络预测功能的影响最小。

一旦我们移除了小量级权重,重新分配剩余权重到有效层(由平均动量确定),就需要确定此权重在相应有效层的位置。首先考虑一个问题:“哪些神经元的连接可以协同减少误差?”答案很明显,取决于动量的大小。但无论如何,我们需要先找到缺失或零值权重的动量值(之前我们从训练中排除的那些),在这些缺失权重的位置添加动量值大的权重,这样就完成了稀疏动量算法。

结果

结果令人振奋!稀疏动量法得出的结果表明,它优于基于MNIST手写数据集的其他压缩算法。首先,它提供了一种从密集网络开始,反复重新训练稀疏网络的方法;其次,可以通过使用20%的密集权重(即80%的稀疏权重)匹配密集网络的功能。为了便于理解这一结论,我们同时将稀疏动量法与基于CIFAR-10数据集的单次剪枝法进行了比较,毫无疑问,对比显示稀疏动量法更胜一筹。在基于CIFAR-10数据集的单次剪枝法中,VGG16-D和WRN16-10模型可以通过使用5%的密集权重匹配密集网络的功能,其他模型的密集权重水平与稀疏动量法相近。此外,通过优化的稀疏卷积算法,使用WRN16-10模型可以保证在完成相同功能的情况下,训练速度提升12倍。

加速效果

稀疏学习预示了我们需要加速样本的训练,我们是否已经实现了这一点?可能还没有。如果衡量稀疏卷积的加速效果,稀疏动量可以有效地加速训练,但由于稀疏神经网络法近期才用于训练,对于GPU来说尚未建立优化的稀疏卷积算法,目前,至少对于稀疏动量法,细粒度稀疏形式的权重表现如此。

因此,我们将加速效果分为两组:一组假设存在某种稀疏卷积算法来完成加速,另一组使用标准密集卷积算法来完成加速。最终,密集卷积法如何帮助稀疏网络完成加速?

当看到神经网络稀疏形式出现卷积通道完全为空的情况,即出现一个全零的卷积滤波器时,我们可以从计算中删除此通道,同时不改变卷积的结果,从而获得加速效果。

为什么稀疏学习有效?

我们使用稀疏动量法训练的样本与使用仅有5%权重的密集卷积法的功能水平相当。是什么原因让这5%的权重如此高效,可以与稀疏动量法权重的20倍相匹配?

为了研究这个问题,我们对比了稀疏网络法与密集网络法的不同特征,包括低层特征(例如边缘检测器)、中层特征(例如轮子、鼻子、眼睛、爪子)和高层特征(例如汽车表面、猫脸、冰箱门)。

边缘检测器可以有效减少卷积通道中特征的数量,即神经元数量,同时确定卷积通道对数据集中数据分类的决定程度。边缘检测器对数据集中的所有类型数据都适用,也就是说它的类特化程度较低。例如,眼睛这样的中层特征对猫、狗和人类的数据比较适用,而高级特征的类特化程度较高,常用来选择特定的类别。

稀疏学习法的未来

我认为稀疏学习法的前景非常光明。一方面,未来几年内GPU的性能不会有大的变化,另一方面,用于负载稀疏学习法的公用途理器Graphcore(核图形处理器)即将问世:核图形处理器将整个神经网络存储在300MB缓存空间中,同时将速度提升约100倍。这意味着如果我们在训练样本时将神经网络数据压缩到300MB,训练速度将整体提高100倍。那么使用一个核图形处理器在ImageNet图像识别数据库上训练50个残差样本只需要大约15分钟,当然,通过稀疏学习法,数据可以毫无疑问地控制在300MB大小以内。

由此可以预测,第一个在核图形处理器上成功训练稀疏神经网络的团队,将开启人工智能领域的新世界。除此之外,稀疏学习算法的另一个挑战是将其应用于自然语言处理(NLP)。基于我的实验,毫无疑问,在使用自然语言进行稀疏学习方面,还需要进一步加强。

相关报道:

https://timdettmers.com/2019/07/11/sparse-networks-from-scratch/

希望这段改写的内容符合您的要求。

    本文来源:图灵汇
责任编辑: : 贾静华
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
学习人脑稀疏灵感深度打破限制得到
    下一篇