剪枝系列1 AutoPruner

2021-09-28 22:21:36 字數 1214 閱讀 2797

這是此系列第一篇部落格,也是我的第一篇部落格,可能許多地方寫的簡略。主要目的是記錄一下看過的**,以後自己要用到的時候可以快速了解這篇**的主要思想。

autopruner: an end-to-end trainable filter pruning method for efficient deep model inference是2023年南京大學的一篇文章,算是比較新的剪枝演算法吧。這幾年在剪枝方面出了很多思路,比如三階段法(train-prune-finetune),邊訓練邊剪法,逐層剪還是所有層同時剪,一次性剪還是每次剪,或者有人直接質疑剪枝的必要性,認為直接訓練小模型效果並不差。但是總體來說,主要還是圍繞著channel pruning(filter pruning)來展開。最傳統的也是最簡單的方法是,根據每一層自己的卷積核的引數,設計準則去掉被判斷為不重要的channel,有l1準則,泰勒展開準則,gm和repr準則;其他做法比如thinet是根據下一層的輸出來判斷本層的重要性;還有的剪枝演算法關注每層剪枝率的設定,用了強化學習的方法來找出最佳剪枝率;也有的希望在訓練時通過修改損失函式來訓練出冗餘卷積核的。

本篇**,是乙個通道剪枝+邊剪枝邊finetune+逐層剪枝+非人工準則的方法。(兩階段,訓練階段還是要的,只是剪枝和finetune結合到一起了)

方法如下:對每一層,新增一層編碼層,設定損失函式來使得編碼層輸出為0,1的向量,並且1的數量滿足剪枝率。編碼層的輸出會和原來的層相乘,訓練結束後,0對應的通道被直接拿掉,不用再另外finetune。

但是這個方法有乙個控制收斂到0,1的引數α

\alpha

α特別不好設定。每種網路、每個層的α

\alpha

α都不一樣。特別不方便。而損失函式是用來控制稀疏程度的。還有編碼層的初始化也比較難搞。

總之,可以借鑑的地方是編碼層0,1來代表剪枝與否的思想,以及用損失函式控制稀疏度的思想,還有把finetune和剪枝合到一起的思想。但是逐層剪真的不提倡。

好像沒有開源**。

搜尋(1) 剪枝

要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當i m時,要求ri ri 1且hi hi 1。由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面 最下一層的下底面除外 的面積q最小。令q s 請程式設計對給出的n和...

實習系列1

實習,抱著一顆學習的心態因為底子薄,發現很多東西不會,學得完全不夠用!這個捉急啊。這乙個月來接觸了很多新東西,zepto,自適應布局,webkit 私有屬性,less,git,ajax,表單驗證,正規表示式。每乙個知識點都需要花時間才能學得好,可是我啊,每一項花的時間都不是很多,有點浮在上面,總感覺...

排版系列1

本學習筆記根據 慕課網 教程修改而來,用它學習bootstrap,將會帶來全新的體驗哦 強調相關的類主要涉及到使用不同顏色顯示不同資訊,通過class類來實現 text muted 提示 淺灰色 text primary 主要 藍色 text success 成功 淺綠色 text info 通知資...