深度學習模型一般來說是越深越好(深度學習的本質是不同層級的特徵抽取),當然前提是能用各種技巧訓練好這個深度模型。當前的深度模型壓縮基本是無失真壓縮,或者付出較少的精度代價,所以壓縮的深度模型一般來說會比直接訓練的淺層模型會有更好的預測精度。本質上,深度模型的壓縮是透過訓練的方法設計一個精度較高的稀疏模型,和自動化機器學習類似,最終的模型架構由資料決定,而不是完全由人工設計。另外,由於當前的主流機器學習框架都是基於張量(tensor)化的最佳化,而壓縮後的模型每層引數是稀疏矩陣,其儲存和計算都需要重新設計,比如用連結串列來儲存引數等等,否則無法享受模型壓縮帶來的好處。模型壓縮也給人工設計深度模型帶來一些靈感,比如使用更小的卷積核(1X1),量化權值共享等等。
1. 模型壓縮最常見的方法是剪枝。對於已訓練好的模型網路,可以尋找一種有效的評判手段,將不重要的連線進行裁剪來減少模型的冗餘。另外,也可以在在訓練過程中,對權重的更新加L1正則項進行誘導,使其更加稀疏,使大部分的權值都為0。也可以在訓練中動態進行剪枝,具體做法就是在訓練過程中將認為不重要的連線剪枝,但是往往無法直觀的判斷哪些連線是否重要,因此在這裡增加了一個嫁接的過程,將哪些重要的被裁掉的連線再恢復回來。透過網路嫁接操作的引入,避免了錯誤剪枝所造成的效能損失。
2. 從資訊壓縮的角度來壓縮模型。常見的方法可以對引數矩陣進行低秩壓縮(如svd), 可以將引數矩陣儲存的連續變數轉化成分類變數(浮點數轉成整數),然後透過權值共享進一步壓縮矩陣。最後在儲存網路的時候還可以使用哈夫曼編碼進行進一步的壓縮。
3. 知識蒸餾也可以看成模型壓縮的一種方法。知識蒸餾屬於遷移學習的一種,也就是將一個模型的效能遷移到另一個模型上。如果訓練好的複雜模型已經具有非常好的效能和泛化能力,可以用這個複雜模型來作為一個soft target來指導另外一個簡單模型來學習,使簡單模型具有和複雜模型相近的效能。訓練時,簡單模型有兩個目標:一個是hard target,即原始的目標函式,為簡單模型的類別機率輸出與label真值的交叉熵;另一個為soft target,為簡單模型的類別機率輸出與複雜模型的類別機率輸出的交叉熵,由於soft target具有更高的熵,它能比hard target提供更加多的資訊,事實上,複雜模型的作用是為了提高label包含的資訊量。透過這種方法,可以把模型壓縮到一個非常小的規模。模型壓縮對模型的準確率沒有造成太大影響,而且還可以應付部分資訊缺失的情況。
深度學習模型一般來說是越深越好(深度學習的本質是不同層級的特徵抽取),當然前提是能用各種技巧訓練好這個深度模型。當前的深度模型壓縮基本是無失真壓縮,或者付出較少的精度代價,所以壓縮的深度模型一般來說會比直接訓練的淺層模型會有更好的預測精度。本質上,深度模型的壓縮是透過訓練的方法設計一個精度較高的稀疏模型,和自動化機器學習類似,最終的模型架構由資料決定,而不是完全由人工設計。另外,由於當前的主流機器學習框架都是基於張量(tensor)化的最佳化,而壓縮後的模型每層引數是稀疏矩陣,其儲存和計算都需要重新設計,比如用連結串列來儲存引數等等,否則無法享受模型壓縮帶來的好處。模型壓縮也給人工設計深度模型帶來一些靈感,比如使用更小的卷積核(1X1),量化權值共享等等。
1. 模型壓縮最常見的方法是剪枝。對於已訓練好的模型網路,可以尋找一種有效的評判手段,將不重要的連線進行裁剪來減少模型的冗餘。另外,也可以在在訓練過程中,對權重的更新加L1正則項進行誘導,使其更加稀疏,使大部分的權值都為0。也可以在訓練中動態進行剪枝,具體做法就是在訓練過程中將認為不重要的連線剪枝,但是往往無法直觀的判斷哪些連線是否重要,因此在這裡增加了一個嫁接的過程,將哪些重要的被裁掉的連線再恢復回來。透過網路嫁接操作的引入,避免了錯誤剪枝所造成的效能損失。
2. 從資訊壓縮的角度來壓縮模型。常見的方法可以對引數矩陣進行低秩壓縮(如svd), 可以將引數矩陣儲存的連續變數轉化成分類變數(浮點數轉成整數),然後透過權值共享進一步壓縮矩陣。最後在儲存網路的時候還可以使用哈夫曼編碼進行進一步的壓縮。
3. 知識蒸餾也可以看成模型壓縮的一種方法。知識蒸餾屬於遷移學習的一種,也就是將一個模型的效能遷移到另一個模型上。如果訓練好的複雜模型已經具有非常好的效能和泛化能力,可以用這個複雜模型來作為一個soft target來指導另外一個簡單模型來學習,使簡單模型具有和複雜模型相近的效能。訓練時,簡單模型有兩個目標:一個是hard target,即原始的目標函式,為簡單模型的類別機率輸出與label真值的交叉熵;另一個為soft target,為簡單模型的類別機率輸出與複雜模型的類別機率輸出的交叉熵,由於soft target具有更高的熵,它能比hard target提供更加多的資訊,事實上,複雜模型的作用是為了提高label包含的資訊量。透過這種方法,可以把模型壓縮到一個非常小的規模。模型壓縮對模型的準確率沒有造成太大影響,而且還可以應付部分資訊缺失的情況。