【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(28)——給1750億參數(shù)模型剪枝吧
這篇文章也是較早之前的了,是一篇對于千億規(guī)模模型進(jìn)行剪枝的論文:

由于本文專業(yè)性比較高,我個人對剪枝也不是很熟悉,所以只是講下大概思想,具體細(xì)節(jié)感興趣的朋友可以去看論文(畢竟本系列專欄是類似科普的性質(zhì))。

1.為什么要剪枝
我們還是回到一個關(guān)鍵術(shù)語——稀疏。
在計算機(jī)中,稀疏是個有種特殊魅力的詞語。對于一個滿滿當(dāng)當(dāng)?shù)木仃?,我們卻可以用一個存在一些零星有意義元素的矩陣來代替,這非??岵皇菃幔?/p>
不開玩笑了,稀疏的好處還是很多的,來看看new bing怎么解釋稀疏的好處吧:

(當(dāng)然,稀疏的一個麻煩的地方在于,很多時候,你只有在這個領(lǐng)域有一定的了解后才能體會到一種很難說出來的魅力)
關(guān)于稀疏模型之前的專欄講過了:
【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(5)——稀疏網(wǎng)絡(luò)與特征篩選
簡單來說,經(jīng)過剪枝,整個模型的訓(xùn)練會更快,成本會更低。包括MoE本身也是稀疏的模型。關(guān)于MoE,見如下鏈接:
【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(16)——語言模型的其他出路

2.大模型剪枝
對于大模型,剪枝算法也是需要的。本文的一個主要剪枝對象是GPT模型家族的OPT-175B(1750億參數(shù))。
大家知道,由剪枝造成模型稀疏,很自然地性能大概率會下降,所以很多算法在剪枝后還要重新訓(xùn)練網(wǎng)絡(luò)。但對于大模型來說,訓(xùn)練成本是很高的,所以只能做一次剪枝來達(dá)到最終的效果,所以只能采用訓(xùn)練后剪枝。
當(dāng)然,對于一整個模型直接進(jìn)行剪枝是很麻煩的,然后就是計算機(jī)領(lǐng)域經(jīng)典的分而治之——分層剪枝。
正如果樹一樣,神經(jīng)網(wǎng)絡(luò)也是分為一層一層的(這里說句題外話,有些關(guān)于大模型知識工程的研究表明大模型很可能是在中間層存儲知識的):

我們的想法就是對每一層進(jìn)行剪枝,并保持原有映射不會發(fā)生太大變化。或者說,如果把每層看做一個函數(shù)f(x),則我們需要找到一個f'(x),它和f(x)非常相似但計算成本要更低。
當(dāng)然,這種剪枝算法要是做不好,性能很可能會一層層打折扣的。

3.本文的方法
還是不談細(xì)節(jié)(否則一個海森矩陣就夠我講長篇的),談一些思想。
本文基于的原始方法簡單來說就是剪枝+補(bǔ)償。由于不修改權(quán)重直接剪枝必然會損傷性能,所以需要對其他權(quán)重進(jìn)行補(bǔ)償。這個問題的主要麻煩在于計算解比較慢(時間復(fù)雜度為4次方)。然后又是計算機(jī)經(jīng)典方法——迭代求近似解。通過這種方法,總算是稍微降了一下時間復(fù)雜度。

4.結(jié)語與好玩的發(fā)現(xiàn)
本文最終達(dá)到的剪枝效果還是很好的,在剪除了50%-60%的權(quán)重后依然能保證性能下降不嚴(yán)重甚至提升性能的情況(據(jù)說剪70%左右就會崩潰)。而且作者發(fā)現(xiàn)似乎越大的模型反而更好剪枝(也許真的暗示MoE的未來是光明的?)
這讓我想到《銀砂糖師與黑妖精》中安進(jìn)行了剪枝反而幫助了她取得了更好的聲譽(yù)[指動畫,輕小說這里血壓更高]:

不管怎么說,這篇文章確實(shí)是非常好的一次嘗試。