0
雷鋒網 AI 科技評論:《從頭開始訓練稀疏網絡:在不損失性能的情況下加速訓練速度》這篇博文介紹的是我和 Luke Zettlemoyer 通過在整個訓練期間保持神經網絡的稀疏性從而加速訓練速度的一項工作。這項工作證明,通過完善稀疏動量算法,可以在短短一次訓練中用稀疏隨機權值來初始化一個神經網絡,并使其達到密集網絡的性能水平。
進一步,如果使用優(yōu)化的稀疏卷積算法,我們能夠將對神經網絡的訓練速度加快至 VGG 網絡訓練速度的 3.5倍和寬殘差網絡(WRNs)訓練速度的 12 倍之間。這與一些需多次對卷積層進行剪枝和重新訓練且計算成本不菲的方法形成了鮮明的對比,比如 2019 年由 Frankle 和 Carbin 提出的“彩票假設”。
如此一來,我們證明了,將稀疏網絡訓練到密集網絡的性能水平并不需要“中獎的初始化彩票”,但是如果能夠結合“以一種明智的方法將權重移至周圍的網絡”這一方法,則能夠依靠隨機權重來實現這一點。我們稱保持稀疏的同時性能也能維持在密集網絡的水平的范式為“稀疏學習”。雖然這項工作表明了實現稀疏學習的可能性,但在下一步工作中,我們希望能夠在要求與當前密集網絡所需要的計算資源相同甚至更少的前提下,在更多的數據上訓練規(guī)模更大以及更深的網絡。雷鋒網
計算資源的進步是推動深度學習進步的一個重要因素。從 2010 年到 2018 年,我們可以看到計算 GPU 的性能增加了 9700%。然而,由于達到了半導體技術的物理極限,我們可以預期在未來 5-8 年內,GPU的性能最多只會提高 80%。那么,一個無法對計算能力進一步提高的研究世界將會是什么樣子呢?
從自然語言處理(NLP)社區(qū)中可以看出這一點,在該社區(qū)中,由于 ELMO、GPT、BERT、GPT-2、Grover 和 XL-Net 等經過預訓練的語言模型在大多數NLP任務中效果優(yōu)于其他方法,于是成為了整個領域的主導方法。
這些模型通常非常簡單:你在大量文檔上訓練它們,在給定一系列其他詞語后預測出某個詞語——這有點像做填空游戲。那你可能會問,這有什么不妥嗎?事實上,這些模型是如此之巨大,以至于它們需要耗費遠超100 GPUs小時的訓練時間。這對于那些想理解這些模型,但又缺乏大公司所擁有的計算資源而無法實現這一訓練的學術研究人員來說,尤其令人感到沮喪。要真正理解這些龐大的語言預訓練模型,首要目標應該是通過開發(fā)更加靈活的訓練程序來使這些模型的訓練過程更加的大眾化。
實現這一目標的一個方法是從人腦中來尋找啟發(fā)。人腦消耗的能量是 GPU 的1/10,但功能卻是GPU的十的九次方倍。是什么使大腦的計算效率如此之高?原因有很多(更多信息可參考:https://timdettmers.com/2015/07/27/brain-vs-deep-learning-singularity/),而其中一個原因便是大腦所具有的稀疏性。
研究發(fā)現,靈長目動物大腦中神經元的數量元越多,與其他神經元的連接就越少 (Herculano Houzel 等人,2010)。這與我們設計深層神經網絡的方式截然不同——深層神經網絡將網絡每一層中的每一個新神經元與前一層中所有的神經元連接起來。我們已經了解如何將經過充分訓練的密集卷積神經網絡壓縮為稀疏網絡(Han 等人,2015),但研究如何從一個稀疏網絡入手并在訓練期間保持網絡稀疏的情況下順利開展訓練的工作,目前還是比較少。那么,我們該怎么做呢?
本節(jié)由直觀到完整的算法視角來介紹稀疏動量算法。
圖1:稀疏動量通過查看最近梯度(動量)的加權平均值來確定稀疏網絡中新權重的增長位置,從而找到同時減少誤差的權重和層。(1)根據平均動量量級確定各層的重要性。(2)在每一層中,我們去掉最小權值的50%。(3)然后,我們根據各層的重要性在層之間重新分配權重。在同一個層中,我們在動量量級較大的地方增加權重。
1、好的稀疏學習算法有什么重要特性?
在稀疏學習中,最重要的事情便是盡可能有效地利用神經網絡中的每一個權值。如果把“有效性”定義為“減少誤差”,那么我們對于如何推進稀疏學習就有了更加清晰的視角。我們需要找到一種度量方法來描述一個權重在減少誤差時的有效性,并去掉所有無效的權重。一旦我們去除了這些權重,我們希望在認為未來有望減少誤差的位置重新生成新的權重。
如果我們看權重所對應的誤差的梯度,實際上我們是有一個度量方法的。然而,如果連續(xù)觀察梯度的變化,我們發(fā)現梯度可以發(fā)生劇烈的波動。例如,如果你有一個將手寫數字集從0到9進行分類的神經網絡,并且這個權重可以很好地檢測到頂部的一條直線,它可能有助于減少對數字5、7的檢測誤差,但對0、1、2、3、6、8、9,它不但可能沒有幫助,甚至可能會適得其反。相反地,在右上角檢測曲線模式的權重可能對數字0、2、3、8、9的檢測有輔助作用,因此,我們希望該權重比“頂部直線”權重在減少誤差時更具有連續(xù)性。如何在神經網絡中自動檢測出這樣有效的權值呢?
2、動量:找到能持續(xù)減少誤差的權重
如果將北極看作局部最小值,將指南針指向局部最小值看作梯度,則可以通過瘋狂搖動來使指南針進行旋轉,從而模擬更新隨機梯度下降。隨著每一次指針正對北極,它會減慢速度,并越來越頻繁地指向北極方向,然而,由于旋轉慣性,它仍然會“越過”這個方向。因此,當北極針還在來回移動,從這兩三次的測量結果中你可能還不清楚北極到底在哪里。然而,如果你取平均的方向——某一次指針位于北極方向偏左一些,另一次則偏右一些——那么這些偏差就會消失,你會立刻得到一個非常接近真實中北極方向的指向。
這就是動量優(yōu)化技術背后的主要思想:我們對連續(xù)梯度取平均值,以獲得對局部最小值方向的最優(yōu)估計。與指南針類似,隨著時間的推移,指南針方向變化的速度越來越慢,于是我們希望用隨機梯度下降中更高的權重來衡量最近的梯度方向。其中一種方法是分配一個加權平均值,即給當前梯度分配一個更大的權重,給之前的梯度分配一個更小的權重——這也被稱為指數平滑。通過指數平滑權值的梯度,我們得到一個加權梯度矩陣,這個矩陣就是動量矩陣,通過它可以實現所謂的動量優(yōu)化。通過這種方法,我們可以識別出哪些權重能夠持續(xù)地減小誤差。
3、權重重新分配:層的平均動量大小
從這里開始,我們對稀疏動量算法進行第一個重要的觀察發(fā)現:如果一個權重的動量表示它所連續(xù)減少誤差值的大小,那么網絡每層中所有權重的平均動量就表示每層平均誤差值減少的大小。我們之所以取這個量值是因為兩個不同的權重可能會連續(xù)朝著負方向或者正方向變化。我們通過計算各層平均動量,可以很容易地比較各層平均權重的有效性。
這就使得,比如說在降低誤差方面的效果,卷積層 A 的平均權重是全連接層 B 的平均權重的1/3,反之亦然。這種方法使我們能夠有效地對權重重新分配:如果我們發(fā)現“無用的”權重,我們現在就可以準確地知道應該將其放在哪一層。但究竟該將它們放在某一層中的哪個位置呢?
4、哪些權重應該被去掉?應該在何處重新賦值?
接下來的兩個問題更直接:哪些是最無用的權重?在一層中卷積層,應該在某一層中的哪個位置增加權重?
第一個問題是在神經網絡壓縮研究中的一個常見問題,針對這一問題,研究者普遍采取的方法是使用最小的動量大小來對權重剪枝。這有什么意義呢?如果我們假設所有的權重都是將動量大小相似的輸入平均所得到的——在使用批量標準化時,這是一個合理的假設,那么較小的權值對激活神經元的影響也是最小的。去掉這些無用的權重,能夠最小限度地改變神經網絡在預測方面的性能。
一旦我們去掉了無用的權重,并通過層的平均動量將其重分配到有效權重層,就需要決定在層內將它們確切地分布到哪個位置。如果有人問道:“將哪兩個處于非連接狀態(tài)的神經元連接起來能夠連續(xù)減少誤差?” 這個問題的答案再次指向動量大小。然而這一次,我們想研究下“缺失”或零值權重的動量大小,也就是說想觀察下那些之前被我們排除在訓練之外的權重。因此,我們在缺失的權重擁有最大動量的地方來增加權重。這就完成了稀疏動量算法,如圖1所示。
在 MNIST 手寫數據集中使用稀疏動量與其他壓縮算法來進行比較,結果令人印象深刻。其中,稀疏動量優(yōu)于其他大多數方法??紤]到從頭開始訓練一個稀疏網絡所使用的壓縮方法是從密集網絡入手并且往往需要分別進行重復訓練,這一結果可以說非常不錯了。
另一個令人印象深刻的發(fā)現則是:當網絡使用 20% 的權重(80%的稀疏度)時,其性能可與密集網絡持平甚至更優(yōu)。
在 CIFAR-10 上,我們將其與單次網絡剪枝進行了比較:后者的設計是為了實現簡單的結構而不是性能的提高,因此,稀疏動量結果會更好也就不足為奇了。
然而,有趣的是,我們僅僅使用 5% 的權重就能夠將 VGG16-D(VGG16 的一個版本,具有兩個全連接層)和寬殘差網絡(WRN)16-10(具有16層結構深且非常寬的 WRN)訓練到密集網絡的性能水平。對于其他網絡,稀疏動量接近密集網絡的性能水平。此外,正如我稍后將要展示的,我們使用優(yōu)化的稀疏卷積算法,將能夠在獲得相同的性能水平的前提下,將訓練速度提升到之前的3.0到5.6倍!
圖2:對LeNet-300-100和LeNet-5caffe在MNIST手寫數據集中分別使用稀疏動量與神經網絡壓縮算法進行訓練的結果對比圖
ImageNet下稀疏動量與相關方法的結果對比。在一個非全稀疏的模型中,第一層卷積層和所有下采樣殘差的連接從訓練開始都是密集的。在一個全稀疏的網絡設置中,所有層都是稀疏的。一般來說,稀疏動量比其他方法更有效,并且當所有權重都呈現為稀疏,與其他方法的效果相比,將幾乎不分上下。這表明稀疏動量在尋找需要具有高密度的重要卷積層時是很有效的。
在 ImageNet 上,我們無法達到密集網絡的性能水平,這表明稀疏動量的改善還有上升空間。然而,我們依舊可以證明在訓練過程保持稀疏權重時,稀疏動量與其他的方法相比有著明顯的優(yōu)勢。
加速訓練
稀疏學習的一個主要功能是加速訓練——那我們成功了嗎?既是又不是。如果我們衡量的是稀疏卷積網絡可能實現的加速,則稀疏動量是能夠有效加速訓練進程的,然而如果僅僅最近才將稀疏網絡用于訓練,那對 GPU 而言,并不存在經優(yōu)化的稀疏卷積算法,至少對于稀疏動量所表現出來的權重的細粒度稀疏格式而言是不存在的。
因此,我們將加速分成兩個部分:如果存在稀疏卷積算法,則可能實現加速,并且如今可以使用標準密集卷積算法來實現加速。那密集卷積如何幫助稀疏網絡加速訓練進程呢?
如果我們去看網絡的稀疏格式,我們會發(fā)現卷積通道是完全空的——一個完全為零的卷積濾波器!如果發(fā)生了這種情況,我們可以在不改變卷積結果的情況下從計算中去掉通道,從而實現加速。
稀疏動量可以用一小部分權重新復制一系列網絡的密集性能水平,從而實現加速。
然而,如果觀察各種不同的加速情況,我們會發(fā)現稀疏卷積加速和密集卷積加速之間存在顯著差異。這一點可以表明 GPU 還需要優(yōu)化稀疏卷積算法。
使用稀疏動量訓練的一些稀疏網絡,其性能與權重僅為 5%的密集網絡訓練結果相一致。是什么使這5%的權重如此有效,以至于它取得的效果與權重為其 20 倍的神經網絡旗鼓相當?
為了探討這個問題,我們比較了稀疏網絡的特征與密集網絡的特征。其中,低級特征可能包括邊緣檢測器之類的東西,中級特征可能是輪子、鼻子、眼睛、爪子,而高級特征可能為汽車的“臉”、貓的臉、冰箱門等。
為了減少特征數量,我們研究卷積通道(相當于卷積網絡中的“神經元”)以及該通道對數據集中的類有多大作用。邊緣檢測器幾乎對數據集中所有類都有效——換句話說,它們對于低級別的特征具有特定對應的類;對于中級特征,如眼睛,應該是對于比如貓,狗,和人類有用的類;而高級特性應該對一些選定的類有用,這些類都高度對應高級特征。
圖 6: AlexNet、VGG16和WRN 28-2網絡對應稀疏和密集網絡的特化類直方圖
我們發(fā)現,大體來說,稀疏網絡可以學習對于更廣泛的類有用的特征——不過更多情況下它們學習的是普遍的特征。這可能解釋了為什么稀疏網絡可以用 5%的權重來達到與密集網絡相一致的性能。
我相信稀疏學習有一個非常光明的未來,這是因為:(1)GPU 在未來幾年的性能將停滯不前;(2)用于稀疏工作負載的專用處理器 Graphcore 處理器即將問世。Graphcore 處理器將整個網絡存儲在它的300 MB緩存中,并將其加速大約 100 倍。
這意味著,如果我們可以在訓練期間將網絡壓縮到 300 MB,那么我們的總體訓練速度將提高100倍。使用一個 Graphcore 處理器在 ImageNet 上訓練 ResNet-50 大約只需要15分鐘。通過稀疏學習,網絡大小為 300 MB的限制將不成問題。
我預測,第一個能夠在 Graphcore 處理器上成功訓練稀疏神經網絡的研究團隊,將開啟一個全新水平的人工智能時代。
除此之外,另一個挑戰(zhàn)是將稀疏學習算法應用于自然語言處理(NLP)。不出所料,我在自然語言處理任務轉換器上的實驗表明,與計算機視覺相比,稀疏學習在自然語言處理中要困難得多——未來我們需要做的工作還有很多!
圖7:一個通用的稀疏學習腳本示例,您可以將其用于自己的模型。使用sparselearning庫很容易使用稀疏動量:(1)導入庫,(2)添加解析器選項,(3)用Masking類包裝模型,(4)應用mask而不是優(yōu)化器,(5)在迭代次數結束時應用稀疏動量。該庫還可以通過自己的稀疏學習算法輕松地進行擴展,以實現增長、修剪或重分配——完成這一切只需僅僅幾行代碼!
為了讓大家都能更深度地了解稀疏學習,我開發(fā)了一個稀疏學習的庫,它能夠讓你將現有的算法如稀疏動量輕易得應用到你自己的模型上,并且能夠用少于 10 行代碼完成。這個庫的設計還使得添加自己的稀疏學習方法變得非常容易。你可以通過以下地址前往GitHub查看這一開發(fā)庫:
Frankle, J. and Carbin, M. (2019). The lottery ticket hypothesis: Finding sparse, trainable neural networks. In ICLR 2019.
Han, S., Pool, J., Tran, J., and Dally, W. (2015). Learning both weights and connections for efficient neural network. In Advances in neural information processing systems, pages
1135—1143.
Herculano-Houzel, S., Mota, B., Wong, P., and Kaas, J.H. (2010). Connectivity-driven white matter scaling and folding in primate cerebral cortex. In Proceedings of the National Academy of Sciences of the United States of America, 107 44:19008—13.
via https://timdettmers.com/2019/07/11/sparse-networks-from-scratch/ 雷鋒網 AI 科技評論編譯
雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。