原文鏈接:https://www.ijcai.org/proceedings/2022/0667.pdf? ?發(fā)表:IJCAI 2022
code:無
編輯:牛濤
filter pruning這件事本身是一個(gè)從網(wǎng)絡(luò)中尋找子網(wǎng)絡(luò)的優(yōu)化問題帝美。但是由于filter數(shù)量太多了,這個(gè)優(yōu)化問題很難解。之前用EA算法去求解的受限于復(fù)雜度粉寞,只能在給定剪枝標(biāo)準(zhǔn)下求解每層稀疏度怔软,但是會(huì)帶來性能下降近刘。因此本文提出了一種縮小優(yōu)化空間的方法娘荡,核心是利用了分而治之的思想钞护,把對(duì)于網(wǎng)絡(luò)的searching轉(zhuǎn)化成每層獨(dú)立去做搜索喉祭。之所以把整個(gè)網(wǎng)絡(luò)拆分成每層獨(dú)立剪枝嗎养渴,是基于每層會(huì)有提取到同樣特征的filter,刪除某個(gè)filter所帶來的影響主要要看有沒有其他可以替代他的(這理由...似乎有點(diǎn)牽強(qiáng)泛烙,可以看論文也許是我理解表述錯(cuò)誤理卑?)
本文的方法很直觀,也沒啥公式蔽氨,用原文給的兩個(gè)偽代碼來展開藐唠。
算法1:關(guān)于整個(gè)剪枝算法
在T個(gè)iteration中:每次將網(wǎng)絡(luò)分成每一層,并對(duì)每層獨(dú)立利用算法2剪枝鹉究。將剪枝后的每層重新拼接成新的網(wǎng)絡(luò)并finetune宇立。將finetune后的新網(wǎng)絡(luò)加入集合A,并取代這個(gè)iteration開始時(shí)要剪枝的網(wǎng)絡(luò)自赔。? ?執(zhí)行下一個(gè)iteration泄伪。
接下來講解算法2。算法2利用EA算法對(duì)每一層獨(dú)立地進(jìn)行剪枝匿级。
首先需要說明的是蟋滴,作者為了利用EA算法痘绎,把每層剪枝情況編碼成了一個(gè)二進(jìn)制向量津函,向量元素?cái)?shù)量等于filter數(shù)量。數(shù)值為1表示保留該filter孤页,為0表示剪掉尔苦。
在循環(huán)開始前蛾号,先初始化m個(gè)結(jié)構(gòu)作為parent活逆。初始化是從全1向量出發(fā)拗胜,在給定概率p1的情況下,對(duì)全1向量變異r次所灸。(變異指的就是對(duì)每一個(gè)元素诉字,依次以概率p1決定是否變?yōu)?壤圃,當(dāng)變異到達(dá)r次就停止乍桂,沒到就算沒到).以這樣的方式對(duì)全1向量變異m-1次,和全1向量一起共同作為大小為m的集合P旺芽。
在G個(gè)iteration中:從P中隨機(jī)選擇m個(gè)結(jié)構(gòu)采章,并以概率p2和r為參數(shù)進(jìn)行變異图谷。 將這新得到的m個(gè)結(jié)構(gòu)進(jìn)行驗(yàn)證性能。(性能的驗(yàn)證方式是,由于我們獨(dú)立的剪枝每層,那么我們只將未剪枝網(wǎng)絡(luò)中對(duì)應(yīng)的層以新的結(jié)構(gòu)替換掉,其它層維持不變,并在一個(gè)隨機(jī)抽樣的數(shù)據(jù)集上驗(yàn)證精度。隨機(jī)抽樣一個(gè)小集合是為了提升驗(yàn)證的效率中鼠,文章是從訓(xùn)練集抽樣的矛渴。這個(gè)驗(yàn)證過程其實(shí)就是測(cè)量這一層以某種方式剪枝后對(duì)于最終精度造成的影響)
將新的m個(gè)結(jié)構(gòu)和P合并桂躏,并根據(jù)精度和FLOPs排序鳞绕,保留top-k個(gè)作為新的P冤竹。進(jìn)行下一個(gè)iteration。
當(dāng)G個(gè)iteration執(zhí)行完畢后钟病,1)根據(jù)排序選擇最優(yōu)的解構(gòu) 2)在排除全1(該層不剪枝)的情況下選最優(yōu)的。以上兩種策略本文都做了實(shí)驗(yàn)屹徘,第二種是為了加快剪枝流程啦吧。
用圖的方式說明可以看下圖: