Naomi Saphra在GitHub發表的這篇文章從動態超引數、自適應架構和教師學生方法三個方面介紹了模型最佳化策略。
模型可以在訓練過程中透過修正超引數而逐步建立。這在遷移學習中最為常見,在這種環境中,我們試圖將現有模型的知識應用到新領域或新任務中。這是持續學習中更常見的問題,也是一個顯而易見的應用。然而,即使有預置的資料集,網路拓撲的遞增約束也會為正則化帶來益處。
在每個 epoch 中超引數都被更新的模型最容易被修改。在這種情況下,我們指的不是那些與網路拓撲相關的超引數,例如層數或維度。在訓練過程中有許多機會調整拓撲,但是模型為了再次得到合理的架構通常需要大量的再訓練,這在記憶網路(memory network)中已得到清晰的證明 [1]。如果我們轉而關注與正則化項和門相關的權重,我們就可以逐步學習到架構,無需頻繁的再訓練來適應出現根本改變的拓撲。
Dropout 設定
Hinton 等人 [2] 將 dropout 描述為:透過防止完美擬合數據的特徵檢測器的共適應(co-adaptation)來減少過擬合。在這種解釋中,共適應的神經元簇同時被啟用。隨機抑制這些神經元迫使它們各自發展。
在標準 dropout 中,這些共適應神經元在所有訓練階段都有相同的問題。然而,Morerio 等人 [3] 設想在訓練初期,共適應可能是網路的最優自組織的開端。從這個角度看,這些結構是訓練後期出現過擬合的一大威脅。因此作者介紹了一個增加 dropout 率的超引數排程(hyperparameter schedule)。據我所知,這是唯一發表的自適應正則化提議。
緩和網路(Mollifying network)
緩和網路 [4] 是目前將增量控制資料分配的技術和增量控制模型表示能力的技術結合起來的唯一嘗試。緩和網路透過模擬退火來逐漸降低資料溫度,同時修改各種超引數以實現更長距離的依賴。在 LSTM 中,將輸出門設定為 1,輸入門為 1/t,遺忘門為 1−1/t,t 是退火時間步。透過這個系統,LSTM 最初表現為詞袋模型,逐漸增加了在每個時間步處理更多上下文的能力。
緩和網路對每一層使用不同的資料排程,較低層的噪聲退火快於較高的層,因為較低層的表示被設定為學得更快。
訓練期間最難修正的超引數可能是模型架構本身的拓撲超引數。儘管如此,深度學習文獻包含了在訓練期間適應模型架構的技術的悠久歷史,這些技術通常是對學到引數的迴應。這些方法可以透過在訓練之初平滑函式來最最佳化搜尋;透過從更簡單的模型出發來加快學習速度;或者壓縮模型使其更適用於手機或嵌入式裝置。這些方法大都可分為兩類:透過在訓練中增加引數來塑造模型、透過修剪邊或節點來壓縮模型。
架構生長
最近的一些遷移學習策略依賴於不斷生長的架構,這些架構透過為與現有網路 [5、6] 有關的新任務建立全新模組而得到。如果我們的目標是透過新增少量引數來擴大現有網路,那麼這個問題就類似傳統的非引數學習了,因為我們不需要一開始就明確限制模型空間。
經典的神經網路技術(例如級聯相關網路(Cascade Correlation Network)[7] 和動態節點建立(Dynamic Node Creation)[8])隨機逐個新增新節點並分別訓練。在當今的大型架構和問題上,這種做法非常複雜。此外,這類方法的主要優點是它們適用於小型模型,由於幾十年來計算能力的飛躍,現代深度學習開發者不再看重這一目標。用於漸進增長網路的現代技術必須做出兩個決定:1) 何時(以及在何處)新增新引數?2) 如何訓練新引數?
Warde-Farley 等人 [9] 提出在完整訓練完網路後將引數大批次加入。增加的形式是將專門的輔助層並行加入現有網路。這些層在類邊界(class boundary)上進行訓練,而這正是最初的通用模型試圖解決的問題。對留出資料集的混淆矩陣進行譜聚類,並將類劃分為具有挑戰性的子問題,從而選擇類邊界。
輔助層與原始通用系統並行隨機初始化,然後每個輔助層僅基於指定的類分割槽中的樣本進行訓練。除了對最後的分類層進行微調外,原始通用網路是固定的。由此產生的網路就是多專家網路,該網路被證明可以改善影象分類問題的結果。
同時 Neurogenesis Deep Learning (NDL) [10] 使自編碼器擁有終身學習的能力。這種策略透過在模型遇到異常值時新增神經元來更新自編碼器的拓撲結構,模型在異常值處效能較差。這些新引數僅在異常值上進行訓練,使得現有的解碼器引數以更小的步長進行更新。現有的編碼器引數只有在直接連線到新神經元時才會更新。
在引入和訓練這些新神經元之後,NDL 使用一種被作者稱為「intrinsic replay」的方法穩定網路的現有結構。他們重建了之前見過樣本的近似值,並在重建結果上進行訓練。
另一個允許終身學習的系統是無窮受限玻爾茲曼機 (RBM) [11]。這一經典 RBM 的擴充套件透過獨特的索引將隱藏單元引數化,表示成一個序列。這些指令透過支援舊節點直到收斂來增強網路增長的順序,允許系統任意增長。這個方法很有趣,但如何將類似的修改應用到 RBM 的特殊生成結構以外的網路還未可知。
這些增強技術都不支援迴圈架構。在現代自然語言處理設定中,這是一個致命的限制。然而,這些技術中有一些可能適用於 RNN,尤其是近期訓練專門子系統的問題已得到解決 [12]。
架構修剪
最近的許多研究都集中在從訓練好的網路中修剪邊或整個神經元。這種方法不僅可用於壓縮,還有可能提高網路的泛化能力。
修剪邊
修剪邊而非整個神經元的步驟可能不會減少網路的維度型別。但是會使網路更稀疏,從而有可能節約記憶體。稀疏網路佔用的引數空間更小,因此可能更通用。
LeCun 等人 [14] 和 Hassibi 等人 [15] 都基於修剪誤差變化的泰勒級數近似(Taylor series approximation)來選擇權重。雖然這些方法在較老的淺層網路上是成功的,但是在整個網路上執行這些操作則需要對所有引數計算 Hessian 矩陣,這對於現代的深層架構來說比較麻煩。Dong 等人 [16] 提出了一個更有效的替代方案——在各個層上執行 optimal brain surgery。
修剪節點
修剪全部節點能夠減少網路的維數。它可能比選擇單獨修剪邊更快,因為節點數量多於邊,這減少了修剪時需要考慮的候選者數量。
He 等人 [17] 透過計算每個節點的重要性,選擇從寬度為 d_ℓ的層ℓ上修剪神經元。他們測試了幾個重要指標,發現使用「onorm」(即節點啟用模式的平均 L1 範數)可以獲得最好效能:
Net-trim [18] 同樣依賴 L1 範數來增加稀疏性。
Wolfe 等人 [19] 將基於重要性的修剪方法的結果與蠻力法進行對比,蠻力法基於節點對效能的影響而貪婪地選擇要犧牲的節點。在蠻力法中,他們在沒有每個節點的情況下在測試資料上重新運行了網路,並根據得到網路的誤差對節點進行排序。它們的重要性指標是基於節點對效能影響的神經元級泰勒級數近似 [15]。
在測試的第一個演算法中,他們根據節點的重要性對所有節點進行排名,然後連續刪除每個節點。在第二種演算法中,它們在每次節點移除後對剩餘節點重新排序,以解釋生成然後又被取消的子網路的影響。在第二種情況下,他們發現在 mnist 上訓練的網路中可以修剪多達 60%的節點而不會顯著降低效能。這與早期觀察結果 [20] 相符——網路中的大多數引數是不必要的,它們的影響僅限於生成然後取消它們自己的噪聲。這一結果支援這樣的觀點:反向傳播隱性地為給定的任務訓練最小網路。
Srinivas 和 Babu [21] 為了減少網路的冗餘而進行了修剪,因此他們根據其權重與同層其他神經元的相似度來移除節點。而 Diversity networks [22] 根據其啟用模式的多樣性進行選擇。為了對不同的節點選擇進行取樣,他們使用了 Determinantal Point Process(DPP)。該技術最小化了取樣節點之間的依賴性。他們遵循這一修剪過程,融合被扦插回網路的節點。
這些論文的觀察結果中出現了一個有趣的差異。Mariet 和 Sra [22] 發現,他們利用 DPP 在較深的層中取樣了更多節點,而 Philipp 和 Carbonell [19] 透過在 2 層網路的較深一層中使用蠻力法修剪了更多節點。換句話說,diversity networks 在更深層保留更多節點,而貪婪的蠻力法從較深層移除了更多節點。這些結果表明這些演算法各自結果之間存在根本差異,值得進一步研究。
合併節點
Mariet 和 Sra [22] 發現,如果他們將修剪的節點合併回網路中,那麼在基於 DPP 的修剪之後,效能會提高。他們透過調整修剪層中剩餘節點的權重來最小化修剪前後啟用輸出的差異,從而實現了前述現象:
由於 DPP 專注於選擇一組獨立的神經元,在任何給定的噪聲消除系統中為保持現狀可能需要至少修剪一個節點,因為這些消除子網路必然存在高度依賴。在這種情況下,噪聲消除部分會合併到產生噪聲的節點中,反之亦然。這將使合併在 diversity networks 中成為一種特殊的必要元件,但是它仍然可以在不同的修剪演算法之後提供一種易處理的再訓練替代方法。
非引數神經網路
據我所知,修剪和生長策略在一項研究中被結合在了一起。非引數神經網路 (NNN) [23] 將增加神經元與對神經元施加增加稀疏性的懲罰結合起來。對於一個具有 N^L 層的前饋網路,作者引入了兩種正則化項,一種是「fan-in」,另一種是「fan-out」:
fan-in 變數懲罰每個神經元輸入的 p-norm,而 fan-out 變數懲罰每個神經元輸出的 p-norm。在前饋網路中,這兩種正則化項均可被新增到具備任意正權重 λ 且 0<p<∞ 的損失函式中,保證目標函式在有限數量的神經元處收斂。
NNN 為調整網路提供了一系列有益的策略。特別是當 p=1 或 2 時,透過加壓形成零值神經元,或者 fan-in 或 fan-out 值為 0 的神經元,來增加稀疏性。每隔一段時間,我們就可以移除這些零值神經元。同時,我們可以在網路的不同位置引入新的零值神經元,正則化項確保目標函式能夠收斂,所以我們可以在效能開始下降的任意點停止新增神經元。
然而,這種方法存在明顯的問題。第一個限制是這個正則化項不應用於任何迴圈網路。這種約束降低了該策略在許多自然語言領域中的有用性,在這些領域中,RNN 的效能最好。
該方法的另一個缺點是:透過將輸入或輸出權重向量初始化為 0 並隨機初始化其他相關向量,來插入零值神經元。因此,我們每隔一段時間就重新訓練整個網路,而不是智慧地初始化和訓練新節點來加速收斂。雖然這種方法可以收斂到最佳數量的節點,但它無法加速訓練或專門化新節點。
最後,這種方法為建立最終的密集網路增加並移除了所有神經元。所以它失去了因修剪權重而得到的較稀疏網路的潛在正則化優勢。
透過新的訓練,還可以根據現有網路生成更大或更小的模型。在研究任何自適應架構時,重要的是將使用網路之前狀態的基線模型(「教師」)與具有新架構的「學生」網路進行比較。
在蒸餾學習(distillation learning)[24] 的特殊情況下引入教師學生方法,即使用教師網路的輸出層來代替真正的標籤。蒸餾(distillation)是一種以高效能實現大型整合壓縮或昂貴分類器壓縮的技術。較小的網路是透過一個目標函式來訓練的,這個目標函式將應用於真實標籤的損失函式與交叉熵結合起來,這個網路會和較大的教師網路的 logit 層進行對照。除壓縮以外,教師學生方法對域適應技術也很有效 [25],這表明它對於適應資料排程的新時間步可能會很有效。
Naomi Saphra在GitHub發表的這篇文章從動態超引數、自適應架構和教師學生方法三個方面介紹了模型最佳化策略。
模型可以在訓練過程中透過修正超引數而逐步建立。這在遷移學習中最為常見,在這種環境中,我們試圖將現有模型的知識應用到新領域或新任務中。這是持續學習中更常見的問題,也是一個顯而易見的應用。然而,即使有預置的資料集,網路拓撲的遞增約束也會為正則化帶來益處。
動態超引數在每個 epoch 中超引數都被更新的模型最容易被修改。在這種情況下,我們指的不是那些與網路拓撲相關的超引數,例如層數或維度。在訓練過程中有許多機會調整拓撲,但是模型為了再次得到合理的架構通常需要大量的再訓練,這在記憶網路(memory network)中已得到清晰的證明 [1]。如果我們轉而關注與正則化項和門相關的權重,我們就可以逐步學習到架構,無需頻繁的再訓練來適應出現根本改變的拓撲。
Dropout 設定
Hinton 等人 [2] 將 dropout 描述為:透過防止完美擬合數據的特徵檢測器的共適應(co-adaptation)來減少過擬合。在這種解釋中,共適應的神經元簇同時被啟用。隨機抑制這些神經元迫使它們各自發展。
在標準 dropout 中,這些共適應神經元在所有訓練階段都有相同的問題。然而,Morerio 等人 [3] 設想在訓練初期,共適應可能是網路的最優自組織的開端。從這個角度看,這些結構是訓練後期出現過擬合的一大威脅。因此作者介紹了一個增加 dropout 率的超引數排程(hyperparameter schedule)。據我所知,這是唯一發表的自適應正則化提議。
緩和網路(Mollifying network)
緩和網路 [4] 是目前將增量控制資料分配的技術和增量控制模型表示能力的技術結合起來的唯一嘗試。緩和網路透過模擬退火來逐漸降低資料溫度,同時修改各種超引數以實現更長距離的依賴。在 LSTM 中,將輸出門設定為 1,輸入門為 1/t,遺忘門為 1−1/t,t 是退火時間步。透過這個系統,LSTM 最初表現為詞袋模型,逐漸增加了在每個時間步處理更多上下文的能力。
緩和網路對每一層使用不同的資料排程,較低層的噪聲退火快於較高的層,因為較低層的表示被設定為學得更快。
自適應架構訓練期間最難修正的超引數可能是模型架構本身的拓撲超引數。儘管如此,深度學習文獻包含了在訓練期間適應模型架構的技術的悠久歷史,這些技術通常是對學到引數的迴應。這些方法可以透過在訓練之初平滑函式來最最佳化搜尋;透過從更簡單的模型出發來加快學習速度;或者壓縮模型使其更適用於手機或嵌入式裝置。這些方法大都可分為兩類:透過在訓練中增加引數來塑造模型、透過修剪邊或節點來壓縮模型。
架構生長
最近的一些遷移學習策略依賴於不斷生長的架構,這些架構透過為與現有網路 [5、6] 有關的新任務建立全新模組而得到。如果我們的目標是透過新增少量引數來擴大現有網路,那麼這個問題就類似傳統的非引數學習了,因為我們不需要一開始就明確限制模型空間。
經典的神經網路技術(例如級聯相關網路(Cascade Correlation Network)[7] 和動態節點建立(Dynamic Node Creation)[8])隨機逐個新增新節點並分別訓練。在當今的大型架構和問題上,這種做法非常複雜。此外,這類方法的主要優點是它們適用於小型模型,由於幾十年來計算能力的飛躍,現代深度學習開發者不再看重這一目標。用於漸進增長網路的現代技術必須做出兩個決定:1) 何時(以及在何處)新增新引數?2) 如何訓練新引數?
Warde-Farley 等人 [9] 提出在完整訓練完網路後將引數大批次加入。增加的形式是將專門的輔助層並行加入現有網路。這些層在類邊界(class boundary)上進行訓練,而這正是最初的通用模型試圖解決的問題。對留出資料集的混淆矩陣進行譜聚類,並將類劃分為具有挑戰性的子問題,從而選擇類邊界。
輔助層與原始通用系統並行隨機初始化,然後每個輔助層僅基於指定的類分割槽中的樣本進行訓練。除了對最後的分類層進行微調外,原始通用網路是固定的。由此產生的網路就是多專家網路,該網路被證明可以改善影象分類問題的結果。
同時 Neurogenesis Deep Learning (NDL) [10] 使自編碼器擁有終身學習的能力。這種策略透過在模型遇到異常值時新增神經元來更新自編碼器的拓撲結構,模型在異常值處效能較差。這些新引數僅在異常值上進行訓練,使得現有的解碼器引數以更小的步長進行更新。現有的編碼器引數只有在直接連線到新神經元時才會更新。
在引入和訓練這些新神經元之後,NDL 使用一種被作者稱為「intrinsic replay」的方法穩定網路的現有結構。他們重建了之前見過樣本的近似值,並在重建結果上進行訓練。
另一個允許終身學習的系統是無窮受限玻爾茲曼機 (RBM) [11]。這一經典 RBM 的擴充套件透過獨特的索引將隱藏單元引數化,表示成一個序列。這些指令透過支援舊節點直到收斂來增強網路增長的順序,允許系統任意增長。這個方法很有趣,但如何將類似的修改應用到 RBM 的特殊生成結構以外的網路還未可知。
這些增強技術都不支援迴圈架構。在現代自然語言處理設定中,這是一個致命的限制。然而,這些技術中有一些可能適用於 RNN,尤其是近期訓練專門子系統的問題已得到解決 [12]。
架構修剪
最近的許多研究都集中在從訓練好的網路中修剪邊或整個神經元。這種方法不僅可用於壓縮,還有可能提高網路的泛化能力。
修剪邊
修剪邊而非整個神經元的步驟可能不會減少網路的維度型別。但是會使網路更稀疏,從而有可能節約記憶體。稀疏網路佔用的引數空間更小,因此可能更通用。
LeCun 等人 [14] 和 Hassibi 等人 [15] 都基於修剪誤差變化的泰勒級數近似(Taylor series approximation)來選擇權重。雖然這些方法在較老的淺層網路上是成功的,但是在整個網路上執行這些操作則需要對所有引數計算 Hessian 矩陣,這對於現代的深層架構來說比較麻煩。Dong 等人 [16] 提出了一個更有效的替代方案——在各個層上執行 optimal brain surgery。
修剪節點
修剪全部節點能夠減少網路的維數。它可能比選擇單獨修剪邊更快,因為節點數量多於邊,這減少了修剪時需要考慮的候選者數量。
He 等人 [17] 透過計算每個節點的重要性,選擇從寬度為 d_ℓ的層ℓ上修剪神經元。他們測試了幾個重要指標,發現使用「onorm」(即節點啟用模式的平均 L1 範數)可以獲得最好效能:
Net-trim [18] 同樣依賴 L1 範數來增加稀疏性。
Wolfe 等人 [19] 將基於重要性的修剪方法的結果與蠻力法進行對比,蠻力法基於節點對效能的影響而貪婪地選擇要犧牲的節點。在蠻力法中,他們在沒有每個節點的情況下在測試資料上重新運行了網路,並根據得到網路的誤差對節點進行排序。它們的重要性指標是基於節點對效能影響的神經元級泰勒級數近似 [15]。
在測試的第一個演算法中,他們根據節點的重要性對所有節點進行排名,然後連續刪除每個節點。在第二種演算法中,它們在每次節點移除後對剩餘節點重新排序,以解釋生成然後又被取消的子網路的影響。在第二種情況下,他們發現在 mnist 上訓練的網路中可以修剪多達 60%的節點而不會顯著降低效能。這與早期觀察結果 [20] 相符——網路中的大多數引數是不必要的,它們的影響僅限於生成然後取消它們自己的噪聲。這一結果支援這樣的觀點:反向傳播隱性地為給定的任務訓練最小網路。
Srinivas 和 Babu [21] 為了減少網路的冗餘而進行了修剪,因此他們根據其權重與同層其他神經元的相似度來移除節點。而 Diversity networks [22] 根據其啟用模式的多樣性進行選擇。為了對不同的節點選擇進行取樣,他們使用了 Determinantal Point Process(DPP)。該技術最小化了取樣節點之間的依賴性。他們遵循這一修剪過程,融合被扦插回網路的節點。
這些論文的觀察結果中出現了一個有趣的差異。Mariet 和 Sra [22] 發現,他們利用 DPP 在較深的層中取樣了更多節點,而 Philipp 和 Carbonell [19] 透過在 2 層網路的較深一層中使用蠻力法修剪了更多節點。換句話說,diversity networks 在更深層保留更多節點,而貪婪的蠻力法從較深層移除了更多節點。這些結果表明這些演算法各自結果之間存在根本差異,值得進一步研究。
合併節點
Mariet 和 Sra [22] 發現,如果他們將修剪的節點合併回網路中,那麼在基於 DPP 的修剪之後,效能會提高。他們透過調整修剪層中剩餘節點的權重來最小化修剪前後啟用輸出的差異,從而實現了前述現象:
由於 DPP 專注於選擇一組獨立的神經元,在任何給定的噪聲消除系統中為保持現狀可能需要至少修剪一個節點,因為這些消除子網路必然存在高度依賴。在這種情況下,噪聲消除部分會合併到產生噪聲的節點中,反之亦然。這將使合併在 diversity networks 中成為一種特殊的必要元件,但是它仍然可以在不同的修剪演算法之後提供一種易處理的再訓練替代方法。
非引數神經網路
據我所知,修剪和生長策略在一項研究中被結合在了一起。非引數神經網路 (NNN) [23] 將增加神經元與對神經元施加增加稀疏性的懲罰結合起來。對於一個具有 N^L 層的前饋網路,作者引入了兩種正則化項,一種是「fan-in」,另一種是「fan-out」:
fan-in 變數懲罰每個神經元輸入的 p-norm,而 fan-out 變數懲罰每個神經元輸出的 p-norm。在前饋網路中,這兩種正則化項均可被新增到具備任意正權重 λ 且 0<p<∞ 的損失函式中,保證目標函式在有限數量的神經元處收斂。
NNN 為調整網路提供了一系列有益的策略。特別是當 p=1 或 2 時,透過加壓形成零值神經元,或者 fan-in 或 fan-out 值為 0 的神經元,來增加稀疏性。每隔一段時間,我們就可以移除這些零值神經元。同時,我們可以在網路的不同位置引入新的零值神經元,正則化項確保目標函式能夠收斂,所以我們可以在效能開始下降的任意點停止新增神經元。
然而,這種方法存在明顯的問題。第一個限制是這個正則化項不應用於任何迴圈網路。這種約束降低了該策略在許多自然語言領域中的有用性,在這些領域中,RNN 的效能最好。
該方法的另一個缺點是:透過將輸入或輸出權重向量初始化為 0 並隨機初始化其他相關向量,來插入零值神經元。因此,我們每隔一段時間就重新訓練整個網路,而不是智慧地初始化和訓練新節點來加速收斂。雖然這種方法可以收斂到最佳數量的節點,但它無法加速訓練或專門化新節點。
最後,這種方法為建立最終的密集網路增加並移除了所有神經元。所以它失去了因修剪權重而得到的較稀疏網路的潛在正則化優勢。
教師學生方法透過新的訓練,還可以根據現有網路生成更大或更小的模型。在研究任何自適應架構時,重要的是將使用網路之前狀態的基線模型(「教師」)與具有新架構的「學生」網路進行比較。
在蒸餾學習(distillation learning)[24] 的特殊情況下引入教師學生方法,即使用教師網路的輸出層來代替真正的標籤。蒸餾(distillation)是一種以高效能實現大型整合壓縮或昂貴分類器壓縮的技術。較小的網路是透過一個目標函式來訓練的,這個目標函式將應用於真實標籤的損失函式與交叉熵結合起來,這個網路會和較大的教師網路的 logit 層進行對照。除壓縮以外,教師學生方法對域適應技術也很有效 [25],這表明它對於適應資料排程的新時間步可能會很有效。