論文解讀:神經網路修剪最新研究進展
選自inference
作者:Ferenc Huszár
機器之心編譯
參與:陳韻竹、思源
本文解讀了兩篇近期關於神經網路修剪的論文,分別是 L_0 正則化方法和 Fisher 修剪方法。作者對兩種方法的工作機制進行了精簡的總結和解釋,可以幫助我們快速領會論文的方法論思想。
我想簡單介紹近期兩篇關於神經網路修剪的論文(免責聲明,其中一篇是我們自己的論文):
Christos Louizos, Max Welling, Diederik P. Kingma (2018) 《Learning Sparse Neural Networks through L0Regularization》
Lucas Theis, Iryna Korshunova, Alykhan Tejani, Ferenc Huszár (2018) 《Faster gaze prediction with dense networks and Fisher pruning》
標題中所寫的「修剪」通常是指減少或控制非零參數的數量或神經網路中頻繁使用的特徵圖數量。在較高的層次上,至少有三種方法可以做到這一點,而修剪只是其中的方法之一:
正則化(regularization):修改目標函數/學習問題,所以優化後可能會得到一個參數較少的神經網路。參見 Louizos et al, (2018)
修剪(pruning):面向大規模神經網路,並刪除某些意義上冗餘的特徵或參數。參見 (Theis et al, 2018)
增長(growing):雖然這一方法傳播得不夠廣泛,但是也可以採取這第三種方法,從小型網路開始,按某種增長標準逐步增加新的單元。參見「學界 | 為數據集自動生成神經網路:普林斯頓大學提出 NeST」
為什麼要這樣做?
對網路進行修剪有不同的原因。最顯然的理由是,修剪能在保持相同性能的前提下降低計算成本。刪除那些在深度網路結構中不真正使用的特徵可以加速推斷和訓練的過程。你也可以認為,修剪是一種架構搜索的形式:找出每層需要多少特徵才能獲取最佳性能。
第二種觀點是,通過減少參數數量可以減少參數空間的冗餘,從而提高泛化能力。正如我們在對深度網路泛化的近期研究中所看到的,參數的原始數量(L_0 範數)實際上並不是泛化能力的充分預測因子。也就是說,我們憑藉經驗發現修剪網路有助於泛化。同時,社區也正在不斷開發(或者,可能在某些情況下是重新發現)新的參數相關量對泛化進行預測和描述。Fisher-Rao 範數就是一個很好的例子。有趣的是,Fisher 修剪 (Theis et al, 2018) 和 Fisher-Rao 範數有著密切的聯繫,這可能暗示了修剪、參數冗餘性和泛化能力深層次的關聯(參見「深度 | 可視化線性修正網路:看 Fisher-Rao 範數與泛化之間的關係」)。
L_0 正則化
我認為 Christos Louizos 等人關於 L_0 的論文(第一篇)非常有意思,它可以被視作我幾個月前在 machine learning cookbook 中提到的機器學習問題轉化的直接應用。這是一個很好的例子,它可以說明如何通過這些一般性的思想,將棘手的機器學習優化問題轉化為可執行的 SGD 過程。
因此,我會把該論文總結為一系列的步驟,每個步驟都會對優化問題作出一些推進:
1. 從可能難以優化的理想損失函數入手:通常訓練損失加上參數的 L_0 範數,進行線性組合。L_0 範數簡單地計算向量中的非零項,是一個不可微的分段常值函數。這是一個困難的組合優化問題。
2. 應用變分優化將不可微函數變成可微函數。這通常需要引入關於參數 θ 的概率分布 p_ψ(θ)。即使目標函數對任何 θ 都不可微,平均損失函數 p_ψ 也可能關於 ψ 可微。為了找到最優的 ψ,通常可以使用強化梯度估計,這也就導致了進化策略的應用。但是,進化策略一般方差很高,因此我們需要進行下一步。
3. 對 p_ψ 應用參數重設技巧構建一個低方差梯度估計器。但是,這隻適用於連續變數。為了處理離散變數,我們需要執行第 4 步。
4. 應用 concrete relaxation,通過連續近似的方法逼近離散隨機變數。現在,我們就有了一個低方差梯度估計器(相比於強化梯度估計而言),可以通過反向傳播和簡單的蒙特卡羅採樣進行計算。你可以將這些梯度用於 SGD(Adam),這也就是論文中所做的工作。
有趣的是,其中並沒有提到 Eq.(3) 和進化策略或變分優化之間的關聯。取而代之,其中提到了與基於獎勵機制的 spike-and-slab prior 的不同關聯。我建議可以帶著這種相關性思想閱讀這篇論文。
作者接下來表明,這的確能起作用,並且與其他用於減少參數數量的方法相比更具優勢。
根據上述步驟,你可以順著從一個問題向另一個問題轉換的思路來領會本文,這能讓你對這個方法進行推廣和改進。例如,REBAR 或 RELAX 梯度估計器能為 concrete relaxation 提供一個無偏、低方差的替代方案,可能也能獲得不錯的性能。
Fisher 修剪
我想談的第二篇文章來自我們自己的實驗室。該論文更加註重建立快速神經網路以預測圖像顯著性的具體應用,而不是一個純粹的方法類論文。修剪後的網路能捕捉 Twitter 裁剪照片背後的特徵關聯。
我們的目標也是降低網路中的計算成本,特別是遷移學習設置中的計算成本:如果在預訓練過的神經網路上進行構建,你將同時繼承解決原始的源任務所需的大量複雜性,這其中大部分對於解決目標任務而言是多餘的。我們的高級修剪目標與上一篇論文存在區別:與 L_0 範數或組稀疏度不同的是,我們使用了一個略顯複雜的公式直接估計該方法正向傳播所需的時間。這是相鄰層參數數量的二次函數。有趣的是,這將導致網路架構傾向於交替堆疊厚層和薄層,如下所示:
通過一次減少一個卷積特徵圖,我們貪婪地修剪訓練好的網路。選擇下一個需要修剪的特徵圖有一個重要原則,即最小化由此帶來的訓練損失函數值的增加。從這個標準出發,對損失函數進行二階泰勒展開,並添加更多的假設,我們會得到以下保持參數 θ_i 的修剪信號:
其中,F_i 表示 Fisher 信息矩陣的第 i 個對角項。上面的公式僅處理單一參數,但是我們可以通過推廣得到移除整個特徵圖的方法。修剪過程即每次迭代中去除具有最小 Δ 的參數或特徵圖,此外,在迭代步驟之間要對網路進行重新訓練。如果你想了解更多詳情,請參閱論文。
除了論文中提到的內容之外,我還想指出一些 Fisher 修剪和之前在博客中提到的想法之間的一些聯繫。
Fisher-Rao 範數
首先,Fisher 修剪與 Fisher-Rao 範數之間存在一些聯繫。讓我們首先假設 Fisher 信息是對角的——理論上來說這是一個過於簡化且不合理的假設,但實際上這種簡化能獲得很有幫助的演算法。在上述假設下,θ 的 Fisher-Rao 範數變成下面的形式:
寫成這種形式,你就很容易意識到 FR 範數和 Fisher 修剪標準之間的聯繫。根據所使用的 Fisher 信息的特定定義,你可以將 FR 範數近似地解釋如下:
移除一個隨機參數後,訓練對數似然度(經驗 Fisher 信息)的期望值下降
移除一個參數後,模型(模型 Fisher 信息)定義的條件分布的近似變化
在現實世界中,Fisher 信息矩陣並不是對角的,這實際上是理解泛化的一個重要方面。一方面,只考慮對角元素使得 Fisher 修剪對網路的某些參數重設(非對角雅克比矩陣)是敏感的。不過,Fisher-Rao 範數和參數冗餘之間可能還有著更深的聯繫,尚有待發掘。
彈性權重固化
利用 Fisher 對角信息值指導修剪也和彈性權重固化(Elastic Weight Consolidation)有相似之處(Kirkpatrick et al, 2017)。在彈性權重固化(EWC)中,Fisher 信息值用於確定哪些權重對於源任務而言比較重要。在 EWC 中,該演算法是從貝葉斯在線學習的角度派生而來的,不過你也可以從泰勒展開的角度推導它,就像 Fisher 修剪那樣。
我用「共享硬碟」的比喻來理解和解釋 EWC。(注意:就如同所有的比喻一樣,這可能完全沒有意義。)神經網路的參數就像是一個硬碟或某種存儲容器。在某一任務上訓練神經網路需要對訓練數據進行壓縮,並將它們保存到硬碟當中。如果你沒有一個防止數據重寫的機制,數據就很可能被覆蓋:在神經網路中,災難性遺忘也以相同的方式發生。EWC 就像是多個用戶之間共享硬碟的協議,用戶不能相互覆蓋彼此的數據。Fisher 信息值可以被視為一個軟性的「不可覆蓋」標誌。在對第一個任務進行神經網路訓練之後,我們可以計算 Fisher 信息值,該值能顯示哪些參數存儲了有關該任務的關鍵信息。Fisher 值較低的參數是冗餘的,它們可以被覆蓋然後重新用來存儲新的信息。在這個比喻當中,Fisher 信息值的總和可以衡量硬碟驅動器滿載的程度,而修剪就像是拋棄實際上不用於存儲任何東西的硬碟驅動部分。
小結
本文中,我提到近期的兩種方法,它們通過計算應該去掉哪些參數或特徵自動學習(修改)神經網路架構。在我看來,方法和文章本身都很有趣。L_0 方法更像是一個簡單的優化演算法,它可能比 Fisher 修剪中每次去除一個特徵的迭代方案更可取。但是,如果你從一個很大的預訓練模型開始,想進行遷移學習的設置,Fisher 修剪可能更加適用。
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
------------------------------------------------
※斯坦福吳恩達老師 deeplearning.ai 開課了:敲黑板序列模型
※機器之心完成 A 輪融資,堅持全球化,探索新產品
TAG:機器之心 |