百度NLP|神經網路模型壓縮技術
百度NLP專欄
作者:百度NLP
引言
近年來,我們在神經網路模型與 NLP 任務融合方面深耕,在句法分析、語義相似度計算、聊天生成等各類方向上,均取得顯著的進展。在搜索引擎上,語義相似度特徵也成為了相關性排序系統最為重要的特徵之一。模型越趨複雜,由最初的詞袋模型(BOW)發展至建模短距離依賴關係的卷積神經網路(CNN),建模長距離依賴關係的循環神經網路(RNN),以及基於詞與詞之間匹配矩陣神經網路(MM-DNN)等等。同時,由於語言複雜、表達多樣、應用廣泛,為了更好的解決語言學習的問題,我們將更多的 NLP 特徵引入 DNN 模型,比如基於 t 統計量的二元結構特徵,基於依存分析技術的詞語搭配結構特徵等。
更複雜的模型、更強的特徵以及更多的數據對工業級應用提出了更高的要求,如何有效控制內存、減少計算量以及降低功耗是深度神經網路模型發展面臨的重要問題。壓縮演算法的研究不僅提升了模型的擴展潛力,並且使其具有更廣闊的應用場景和巨大的想像空間。
在百度,以搜索場景為例,用於相關性排序的神經網路參數規模達到億級,而線上環境對計算資源要求嚴格,模型難以擴展。因此,我們引入了 Log 域量化、多層次乘積量化和多種子隨機哈希等模型壓縮演算法,經實踐驗證壓縮率可以達到 1/8。並且這些方法具有很好的通用性,可以借鑒到各種神經網路應用場景。
Log 域量化壓縮
對於 NLP 任務,目前已有的深度神經網路模型中動輒應用百萬量級詞典,其中 embedding 層的參數占整個模型的絕大部分,所以解決模型內存消耗首先從 embedding 層入手。圖 1 是用於相關性排序系統中卷積神經網路模型的 embedding layer 參數的值域分布圖:
圖 1. embedding layer 參數值域分布圖
從上述的分布圖可以看到數據分布的特點:
1. 參數的值域跨度大;
2. 絕大部分參數集中在較小的區域中,並以 0 為中心呈現山峰的分布。
現在需要對圖 1 所示的參數進行量化從而達到壓縮的目標,這裡的量化是指連續取值(或者大量可能的離散取值)近似為有限多個(或較少的)離散值的過程。如果選擇整個值域空間,平均的取若干個量化點,會造成占絕大部分參數的值域範圍內只有較少的量化點。如果把量化的範圍縮小,則會導致部分重要參數的丟失,同樣會對效果造成很大的影響。所以需要找到這樣的一種選取量化點的方法:一方面保持原模型值域空間的上限,可以適當去掉 0 附近的參數(剪枝),另一方面參數分布越密集的地方量化點選取越密集。
圖 2. Log 量化曲線
我們選擇在 Log 域上選取量化點以滿足上述兩個要求。從圖 2 可以看出,在 Log 域上平均取量化點,這些點映射到原始參數空間上,量化點越接近 0,就會越密集。具體演算法為,首先根據量化的位數(本文統一用 b 來表示量化位數,即最終的量化點數目為2^b),從大到小取相應數量的量化點;然後保留原模型值域空間的上限,並剪枝 0 附近的參數。Log 域量化壓縮十分有效,其優點在於:在量化位數為 8 的情況下能夠做到無損壓縮,這意味著深度神經網路模型的 embedding 空間被量化成只有2^8=256 個離散值;而原模型無需重訓。
我們採用這種方法,在百度搜索的深度神經網路語義模型進行了 1/4 無損壓縮,即保證線上模型表達能力不變、應用效果持平的前提下,線上所有模型的內存佔用減少了 75%。
多層次乘積量化壓縮
為了在量化手段上取得更大的壓縮率,我們探索了乘積量化壓縮。這裡的乘積是指笛卡爾積,意思是指把 embedding 向量按笛卡爾積做分解,把分解後的向量分別做量化。和 Log 域量化壓縮有所不同,乘積量化壓縮主要是在量化單位上有所變化:前者的量化單位是一個數,而後者的量化單位是向量。圖 3 所示的例子設置分解後的向量維度為 4,而這 4 維的分解向量通過 K-means 聚類進行量化壓縮(設量化位數為 b,則 K-means 中的 K 為 2^b),針對這 4 維向量只需存儲聚類中心 ID,從而達到壓縮的目的。
圖 3. 乘積量化壓縮示意圖
基於百度搜索的深度神經網路模型的實驗,我們分析並取得了一些結論:
1. 量化向量維度為 1 時可實現 1/4 無損壓縮;
2. 量化向量維度為 2 時可實現 1/5 無損壓縮;
3. 固定量化的維度,量化位數越大,壓縮率越低,模型效果越好;
4. 固定壓縮率,隨著量化維度的增加,壓縮效果先升後降,且在 2 維時取得最好效果。
可見,在單獨使用乘積量化的策略的情況下,最多可以實現 1/5 無損壓縮,相對於 Log 域量化壓縮並沒有太大的提升。
為了進一步提高壓縮效果,我們引入多層次乘積量化壓縮。根據詞表中詞的重要性,分別應用乘積量化的不同參數。重要的詞壓縮率低一些,如使用維度為 1、量化位數為 8 的乘積量化;次要一些的詞使用壓縮率高一些的參數,如維度為 2、量化位數為 8;最不重要的詞使用壓縮率最高的參數,如維度為 4、量化位數為 12。這種多層次的劃分由全自動優化所得。在百度搜索的深度神經網路語義模型應用中,我們通過多層次乘積量化實現了 1/8 無損壓縮,並且原始模型無需重訓,使用方便。
多種子隨機哈希壓縮
到目前為止,多層次乘積量化能夠實現 1/8 無損壓縮。有沒有壓縮率更大的壓縮演算法能夠支持超大規模 DNN 模型?多種子隨機哈希正是這樣一種壓縮演算法:在無損或者可接受的有損範圍內,它能夠任意配置壓縮率,適用於不同應用場景。圖 4 是它的示意圖:
圖 4. a)單種子隨機哈希壓縮演算法;b)多種子隨機哈希壓縮演算法
圖 4-a)是 Wenlin Chen 在 ICML 2015 發表的「Compressing neural networks with the hashing trick」,它的主要思想是通過單種子的隨機哈希函數將原始空間和壓縮空間連接起來,並通過設定壓縮空間大小來達到配置任意壓縮率的目的。但是,在這種方法中壓縮率和衝突率成正比(這裡的衝突是指原始 embedding 空間不同位置的點落入壓縮空間的同一個位置上),而衝突率過大則會使效果有損。圖 4-b)是為了降低衝突率而提出的多種子隨機哈希壓縮演算法,它的流程如下:對於一個要解壓的參數,首先根據它的位置獲得多個隨機哈希值,映射至用戶配置的壓縮空間,並取出相應的哈希值作為輕量級重構神經網路(圖 4-b 虛線框內)的輸入,該網路的輸出則是重構之後的參數值。相對於單種子隨機哈希壓縮演算法,多種子隨機哈希壓縮演算法具有更低的衝突率,並在多個任務中在效果無損情況下取得更高的壓縮率。
圖 5. 同源多種子隨機哈希壓縮演算法
更進一步地,我們將多種子隨機哈希壓縮演算法推廣至其他神經網路層,如卷積層、全連通層。但是這樣會帶來一個問題,不同層的壓縮率如何設置。為了解決這個問題,我們提出同源壓縮演算法,如圖 5 所示,即深度神經網路的所有層公用一個壓縮空間,而不同層擁有各自的輕量重構神經網路。這種方式不僅方便設置統一的壓縮率,而且諸多實驗表明具有更好的壓縮效果。圖 6 是固定網路大小時不同壓縮率下的錯誤率情況,可以看出,在不同數據集、不同深度的模型以及同一壓縮率下,相對於單種子隨機哈希壓縮演算法(HashedNets),同源多種子隨機哈希壓縮演算法(HMRH)具有更低的錯誤率。
圖 6. 固定網路大小時不同壓縮率下的錯誤率
多種子隨機哈希壓縮演算法能夠與前面所述的兩種壓縮演算法搭配使用,可實現更大的無損壓縮。
總結
至此,我們介紹了 3 種 DNN 模型壓縮演算法,它們有各自的優點,適用於不同的應用場景:
Log 域量化壓縮演算法能夠實現 1/4 無損壓縮,具有普適性,且原始模型無需重訓,使用方便。
多層次乘積量化壓縮演算法則進一步有 1/8 無損壓縮率,它根據 embedding 的重要程度來分配不同壓縮率的乘積量化,故適用於具有區分度的 embedding 層的 DNN 模型,同樣地,原始模型無需重訓,使用方便。
多種子隨機哈希壓縮演算法能夠配置任意壓縮率,需和模型一起訓練。它能和 Log 域量化壓縮組合達到更大的壓縮率,故能支持超大規模的 DNN 模型。舉一個極端例子,若給全球 72 億人每人一個 128 維 embedding,按浮點存儲需要約 3.4T 內存,這是巨大的內存開銷,而且也難以在普通單機環境下部署。多種子隨機哈希壓縮演算法若設置 25 倍壓縮率,再輔以 Log 域量化,可實現 100 倍內存壓縮至 34G,使得其能夠在普通單機環境部署。甚至在效果有損可接受範圍內設置更大的壓縮率,可進一步壓縮到 1G 以內,支持嵌入式場景應用。
除了內存方面的壓縮外,我們在減少深度神經網路模型 CPU/GPU 計算上也做了大量的工作,其中一個典型工作為剪枝演算法(Pruning)。它的思路為動態剪枝不重要的連接點與邊,使其矩陣乘法計算稀疏化,從而提升前向計算速度。篇幅關係,我們不在這裡詳細討論相關的優化方法,有興趣的同學可以進一步與我們聯繫交流。
「百度NLP」專欄主要關注百度自然語言處理技術發展進程,報道前沿資訊和動態,分享技術專家的行業解讀與深度思考。
※加入巨頭競爭之列,索尼開源可在Windows中運行的神經網路庫NNabla
※使用認知心理學解釋深度神經網路:DeepMind新研究破解AI黑箱問題
※在機器人撫養孩子的浪潮中,迪士尼正研究如何搶佔先機
※專欄|自然語言處理第一番之文本分類器
※用 AI 撬動美國神秘大型銀行,這位年輕創業者如何做到的?
TAG:機器之心 |
※英特爾提出新型壓縮技術DeepThin,適合移動端設備深度神經網路
※談SDN網路技術的大家族
※智能物聯 網路劃分之VLAN技術
※DNeT區塊鏈技術助力新一代網路運營商
※龐際網路——VR+文創 助力文化產業轉型升級
※資源|DLL:一個炙手可熱的快速深度神經網路庫
※深度|卷積神經網路十五問:CNN與生物視覺系統的研究探索
※超全總結:神經網路加速之量化模型
※DLL:一個炙手可熱的快速深度神經網路庫
※訓練神經網路最快的方式:AdamW優化演算法+超級收斂
※深度學習第6期:循環神經網路RNN
※Daisy彩妝網路技術課程:短髮造型
※新型循環神經網路IndRNN:可構建更長更深的RNN
※台工業級網路設備提供商Lantech 串口伺服器曝嚴重漏洞;美DHS這樣評估系統性風險中的供應鏈威脅
※谷歌大腦開源多種新型神經網路優化器,AutoML探索新架構
※VGG卷積神經網路模型解析
※生物神經網路與機器學習的碰撞,Nature論文提出DNA試管網路識別手寫數字
※網路技術課程:新韓式造型
※APP正變網路攻擊入口
※生物神經網路與機器學習的碰撞,Nature論文DNA試管網路識別