《Scalable and Sustainable Deep Learning via Randomized Hashing》 阅读报告



PART1 INTRODUCTION

1.神经网络的现状:

为了学习复杂的数据集,当前的深度学习网络的规模越来越大,往往有着数以百万计的参数,训练和测试这样的大型深度神经网络所需要的矩阵计算成本很高。

2.大型神经网络在分布式计算环境下的问题:

在分布式计算的环境中,大型深度神经网络的参数需要跨越多个存储结点。这样的设置,在转移更新的梯度和参数时,需要大量的交流和同步。并且,梯度更新的连续和稠密的特性也使得网络参数不能很好地分布在不同的计算结点上。训练中的同步问题成为网络的可扩展性上的一个瓶颈。如果神经网络在分布式计算中采取异步训练,网络会对冲突和参数更新重叠很敏感,而导致很差的收敛。

3.减少深度学习中矩阵计算的方法:

该论文之外的减少矩阵计算的方法主要是围绕着探索低阶矩阵和低精度的更新。但是这些方法并行度低,不能很好地适用于分布式和大规模应用。

4基于敏感哈希的深度学习算法的优势:

论文提出的基于敏感哈希的深度学习算法,整合了两个最新的思想,Adaptive Dropout和RandomizedHashing forMaximum Inner Product Search (MIPS)。该算法在不损失精度的同时显著减少了训练深度学习网络中的计算(只需要原始标准网络模型的%5的计算并且可以达到的准确率与原始标准模型的准确率相差平均不超过1%)。网络向前传播和反向传播过程中的结点是通过哈希搜索得到的,使得传播过程中的更新是稀疏的,该算法可以很好地应用于异步,并行的训练。随机局部敏感哈希的深度学习算法使得网络具有很好的扩展性,并随着计算内核数量地增加,网络的训练和测试达到接近线性的加速。

4基于随机哈希的深度学习算法的基本思想:

该算法的基本思想是,对隐藏层神经元结点用哈希表进行索引(每一个神经元的权重看成一个向量)。这些哈希表可以在次线性的时间内选择(抽样)具有最好激活值的神经元。由于选取的结点集合(active set AS)是随机选取的并具有稀疏性,所以梯度更新不太可能会重叠,适用于异步并行的计算。

PART2 RELATEDWORK

(1)0Courbariaux和Lin的算法是在向前传播中让网络的权重随机映射到为{-1,0,1}以减少非固定结点的运算。

(2)正交方法则减少了权重的和激活的精度。

(3)二值量化只提高了常数级别的提高,但是我们的方法在网络规模上是次线性的,尤其是对于大型网络的提高更显著。

(4)Siandhwani 使用低阶矩阵进行结构化矩阵转化来减少全连接神经网络中全连接的参数数量。低阶矩阵的约束使得内存占用的少。但是,这样的近似不能很好地应用于异步并行的训练,限制了神经网络的可扩展性。我们使用随机稀疏的激活,通过利用近似查询处理的优势,可以更容易地实现并行化。

(5)Dropout及其变型,是很受欢迎的神经网络的稀疏改进技术。 Dropout作为一种重要的正则化方法,在训练神经网络过程中通过随机丢弃隐藏层一半的结点以解决过拟合问题。这些结点是每一批小型训练数据的独立抽样。即Dropout算法是通过随机忽略网络中的一些结点来减少向前和反向传播阶段计算的技术,但是,当丢掉网络的中的结点数太多时网络的效率很变得很差。所以通常,在训练网络时只丢掉网络中的一半数量的结点。在测试阶段,用经过Droupout训练出的神经网络的平均值作为输入数据的预测。但是,这样稀疏技术没有被充分利用去使深度升级网络的计算节省和并行化。

(6)Adaptive Dropout是Dropout技术的改进,可以基于激活函数自适应地选择丢弃的结点。Adaptive Dropout比vanilla dropout的表现好。Adaptive Dropout一个显著的特点在保留优越性能的同时可以比标准dropout技术丢弃更多的结点。

(7)Winner-Take-All是AdaptiveDropout的一种形式,通过这个技术,在向前和反向传播过程中只选取前k%具有最大且非零的激活值结点。这个方法在进行向前传播前,需要先对每个结点的激活进行充分地计算,然后利用硬阈值选择k%的结点。但是,这项技术只用来实现更好的泛化能力,并不用来减少计算成本。于Adaptive dropout和Winner-Take-All不同的是,基于随机哈希的神经网络利用随机哈希在次线性时间内抽样结点集合而不用计算每个结点的激活值。

(8)还有另外一种正交的方法,使用通用的哈希技术来减少网络的内存占用。即通过使用一个哈希函数连接虚拟权重与真实的权重来减少神经网络中参数的数量。HashedNet结构比标准的神经网络计算成本更高,因为他在重建权重矩阵和查找相应权值时增加了额外的开销。HashedNet与论文提出的方法互补,论文所提方法专注于减少计算成本而不是内存规模。

PART3 LSH/Multi-ProbeLSH

(1)Locality-Sensitive Hashing (LSH)

LSH是一个受欢迎,次线性时间的算法,用于近似最近邻查找。LSH的主要思想是,以很高的概率将相似的结点映射到哈希表的同一个桶里。LSH 算法里的哈希表的插入删除的时间复杂度是常数级别,使得LSH可以在次线性时间内进行近似最近邻搜索。

  经典LSH算法中有两个参数(K,L)来提高最近邻搜索的查准率和查全率。每一个哈希表的meta-hash function H是由K个随机哈希函数h串联而成,对于两个相似的结点,H的k个独立的哈希函数值必须相互匹配,即有相同的meta-hash fngerprint 以指示同一个桶: [H(x) = H(y)] ⇐⇒ [hi(x) = hi(y)] for all [i = 0,1, 2, . . . , K]。给定一个查询,经过哈希函数计算得到L个meta-hash fngerprints,分别指向一个哈希表中的一个桶,然后将这L个桶里的结点的集合返回就得到查询的近似最近邻集合。Meta-hash function减少了假正例,因为对于一个查询,有效的最近邻结点更大可能地匹配其所有K个哈希值。且将L个桶的结点的集合做为查询的结果,增加了可能会容纳有效最近邻结点的桶,从而减少了假反例。对于X,Y,L个meta-hash fngerprints中至少有一个匹配的概率是Pr[H(x) = H(y)] = 1 − (1 − pk)L

图1:局部敏感哈希:向量X于SRP进行矩阵乘法运算得到向量Y,sign(Y)是一个K*L大小的映射向量(L个meta-hash fngerprints),sign(Y)中每K位指示了一个哈希表的桶号,在图中一共有三个哈希表,sign(Y)指示了向量X在三个哈希表中的桶号,然后将X放入这三个桶中。

这个算法包括两个阶段:

a预处理阶段:从数据中先创建L个哈希表存储所有的元素x ∈ C。在哈希表中只存储指向向量的指针而不是数据向量,这样可以节省内存。

b查询阶段:给定一个查询搜索q的最近邻,我们只探测L个哈希桶,一个哈希表一个,然后将这L个哈希桶中的所对应的结点返回。在最近邻搜索中,需要对搜索得到的结点做筛选,但是LSH不需要筛选,因为LSH是为了达到自适应采样而不是真正的最近邻搜索。

图2:该图是使用随机哈希的一个神经网络的例子。图中的神经网络只有2个隐藏层,5个输入结点和2个输出结点。对于每一个隐藏层,根据其神经元结点的权重向量创建哈希表(向前传播过程),创建哈希表是一次性操作且时间复杂度是O(权重参数个数),对输入向量根据哈希函数计算meta-hash fngerprints得到激活结点的集合active set AS,在向前和反向传播过程中的操作只作用于active set AS(图中被填充颜色的神经元为隐藏层的AS),然后通过梯度下降更新AS的权重和哈希表。在图2中,每个隐藏层只创建了一个哈希表,输入向量X={x1,x2,x3,x4,x5},经过meta-hash function H1计算得到桶号为2,即Hidden 1的激活结点为2号,4号结点,然后作为Hidden2的输入,经过meta-hash function H2的计算得到桶号为3,即Hidden2的激活结点为3号结点。

(2)Multi-Probe LSH

  经典的LSH算法需要数量较多的哈希表,增加了处理时间和内存消耗。一个简单的解决方法是在探测一个哈希表时不仅仅只探测一个桶,也探测该桶邻近的桶,增大找到的概率(如果查询点q的邻近p没有被映射到q的所在的桶,那么p很可能在p所在桶的附近的桶中),这样可以减少哈希表的数量。

PART4 PROPOSED METHODOLOGY

Winner-Take-All方法在向前传播中只考虑有着最大激活值的前K个结点,而忽略其他的神经元结点,在反向传播更新过程中也只更该K个结点的权重值。用n表示神经网络中的神经元结点的数量,用AS(Active Set)表示前K个具有最大激活值得神经元结点(|AS|<<n)。每一次梯度更新,Winner-Take-All算法为了找到AS需要将结点的激活值进行排序,排序的时间复杂度为O(n logn),然后更新AS结点的权重,更新权重值得时间复杂度为O(n)。O(n logn)的排序成本有点高,实际上找到AS可以用更好的数据结构,当数据结构动态高效时,梯度更新也会更高效。

结点i,对应着权重向量wi和输入向量x(x ∈ℝ

猜你喜欢

转载自blog.csdn.net/weixin_40922938/article/details/78534587
今日推荐