Network compression

fcmaple
Aug 12, 2021

--

把大Model縮小,比較少量的參數,但是達到相同效果。

用在資源有限的情況下,ex: 智能手錶、無人機

如果模型巨大,這些IoT的裝置會跑不動。

需要在裝置上運算是因為隱私權的關係。

Network Pruning

要把Network裡面的參數剪掉,一個大的Network裡面一定有在甚麼作用的參數,沒有做的參數放在那邊只是占空間,可以把他們剪掉。

不能一次剪大量資料,可能會對network造成損害,大到fine-tune無法復原。

修剪單位可以以參數為單位,也可以以神經元為單位

參數為單位:

決定某一個參數需不需要,把該參數去掉之後,所得的network可能是不規則的,會導致不好實作,也不好用GPU加速。

因為在pytorch都是設定每一層要幾個neural 輸入幾個輸出,或是輸入多長的vector輸出多長的vector,如果硬實做出來,用GPU加速也不好加速因為GPU在加速時是把Neural看成矩陣乘法。

所以在實作上,被剪掉的weight會直接補0,但這樣其實network沒有變小,還是有參數

把network變不規則用GPU去加速,實際上並沒有變快。

以神經元為單位:

比較好實作。

為何大的Network比較好train,直接train一個小的network沒有辦法跟大的network一樣的效果。一定要大的prune之後變小結果才會好。

Lottery Ticket Hypothesis(大樂透理論)

可以想成大的network裡面包含很多小的sub network,當我們訓練大的network = 訓練許多小的network,每一個小的network不一定可以成功被訓練出來(透過gradient descent找到一個好的solution ),但只要有一個成功train出來就可以成功。

就像是買大樂透,買一個多組的彩券,只要一個中就中大獎。

實驗過程:

一開始大的network用init的紅色這組參數train,train完之後,將其prune,prune完之後將其參數重新隨機初始化,則結果會train不起來,但是如果參數代紅色的則可以train起來。

用大樂透假說來解釋就是,一開始有很多sub network,而右下角的那一組參數就是幸運的那組,可以train起來的network,如果再重新初始化,運氣比較不好就抽不到可以成功訓練的參數。

但有一篇是打臉大樂透假說的,所以可能還是需要證實

#以上參考李宏毅老師講義自己做筆記使用

--

--

fcmaple
fcmaple

No responses yet