Distillation論文總結(1)Do Deep Nets Really Need to be Deep?
論文目錄
- Do Deep Nets Really Need to be Deep?
Do Deep Nets Really Need to be Deep?
目前,深度神經網路在許多領域都得到了出色的,但本文我們要說明淺層網路通過學習深層網路也能達到相似的結果。我們在TIMIT與CIFAR-10兩個資料集上進行了測試。
引言
傳說中如果我用一個深的網路去訓練資料,會得到一個比淺網路更好的結果。這個“更好”是從哪裡來的呢?
以前的研究(我覺得是很早的研究)表明一個深網路加上逐層預訓練效果不錯,還有很多研究表示很難將淺網路訓出和深網路一樣好的效果。本文就想要說明其實淺網路也有一樣的表達能力,方法是先訓一個好的深網路,再用一個淺網路去模仿它。雖然不能直接用資料訓出相媲美的結果,但是可以用model compression
模仿學習訓練淺層網路
模型壓縮
Model Compression,用未標註的資料去訓練小模型,使它產生與大模型相似的輸出,從而有相近的準確率。現有的演算法不足以利用源資料將小模型訓到那種精度,所以必須要用大模型來指導教學。這也說明了模型的複雜度,與模型的結構、大小是兩碼事。(大模型不一定是複雜的模型)
用L2Loss迴歸來模仿學習
訓練方法:deep model還是老方法:用softmax輸出交叉熵訓練;然而小模型要用softmax之前的logits。因為一來softmax之後會使原本比較小的數便得更小學不到細節;二來不同的logits可能會導致一樣的概率,SoftMax內有資訊損失。
除了用logits的L2Loss以外 ,文章還考慮了KL散度、pred的L2等多種訓練方法,但是結果都沒前面好;文章還試過對logits作規一化,效果會更好,但不是必須的。
引入線性層加速模仿學習
為了有一樣的引數量,淺模型在一層當中就需要有更多的神經元,這會便訓練變得很慢——一方面,大的Matrix當中會有很多相關的引數;另一方面,大矩陣的乘法很消耗資源。我們就引入了一個線性瓶頸層(其實就是一個矩陣的低秩分解),將一個矩陣分解成兩個。從而既加速了收斂又減少了儲存佔用。以前這個只在最後一層使用,現在我們把它用到了輸入層。
這個矩陣分解可以只在訓練時使用,然後訓練完之後可以將中間的非線性層去掉,又變成了同一層。
TIMIT Phoneme Recognition
略
目標檢測: CIFAR-10
CIFAR-10資料集中有10類物品,是tiny images datasets中的一個標註子集,每張圖片是32x32x3共3072個通道。我們對資料的處理包括減均值併除以每張圖片的方差以做到global contrast normalization,然後再對圖片做ZCA白化。
因為CIFAR-10資料太少了,所以我們用tiny images和cifar-10一起構成一個1.05M的資料集進行訓練。因為非卷積網路之前被證實效果不好,所以我們就用盡可能淺的conv網路。事實證明小網路的acc是可以被蒸餾學習擡上去0.9%(怎麼感覺有、少啊)
討論
為什麼蒸餾比直接訓練原資料好
- 原資料可能有問題(???),T網路可能可以消除它;
- 直接學是有難度的,T網路可以理解成對target做了一個濾波;
- 不確定的logits相較於0-1標籤有更多的資訊;
- GT可能依賴於某些輸入並沒有給的特徵,而T網路的輸出是一定可以從輸入得到的。
以上也可以看作是對overfit的預防措施。相較而言,淺網路更容易受到overfit的困擾,如果我們有更好的正則化手段的話,淺深網路之間的鴻溝就可能被消彌。Model Compression似乎是一種可靠的手段。
淺網路的表徵能力
我們用兩個不同大小的淺網路去學習深網路。在使用同樣的Teacher的情況下自然大一些的網路學的更好一些,但是兩個淺網路的學習曲線都是近似的45度斜線——即淺網路可以通過更好的模型或更多的資料與深網路的準確率同步增長。文章認為,沒有任何證據表明淺網路的表徵能力存在上限,而限制其acc的主要是我們的學習演算法和正則項。
並行分佈處理VS深度順序處理
略
未來工作
略
結論
文章認為,當前深層網路的優勢主要是在於其與目下的學習演算法較好的匹配性,如果以後能設計出一種適用於淺層網路的學習演算法就好了。一定數量的引數,網路深一點可以更容易學一點,但不是必須的。