博客專欄

        EEPW首頁 > 博客 > 輕量級網絡如MobileNet還適合繼續剪枝操作,進一步壓縮模型嗎?

        輕量級網絡如MobileNet還適合繼續剪枝操作,進一步壓縮模型嗎?

        發布人:計算機視覺工坊 時間:2022-06-16 來源:工程師 發布文章
        作者丨LiteAI@知乎(已授權)

        來源丨https://www.zhihu.com/question/343562568/answer/2514880247編輯丨極市平臺

        導讀

         

        分享一篇ICML2022文章,關于實現硬件友好方式壓縮網絡的新范式,其能在基于MobileNetV2的網絡上進行剪枝,且在移動端/邊緣端Google Pixel 3/Raspberry Pi 4的性能超過通道和層剪枝SOTA方法。

        分享一篇ICML2022文章,關于實現硬件友好方式壓縮網絡的新范式,其能在基于MobileNetV2的網絡上進行剪枝,且在移動端/邊緣端Google Pixel 3/Raspberry Pi 4的性能超過通道和層剪枝SOTA方法。由萊斯大學&Meta提出的《DepthShrinker:一種面向增強實際硬件效率的緊湊型神經網絡的新的壓縮范式》。

        圖片圖片

        文章鏈接: https://arxiv.org/abs/2206.00843

        項目鏈接: https://github.com/RICEEIC/DepthShrinker

        高效的深層神經網絡(DNN)模型配備緊湊型算子(例如深度卷積),降低DNN的理論復雜度(例如總的權重/計算量),同時保持較好的模型準確度。然而,現有高效的DNN在實現其承諾提高實際硬件效率方面是有限的,由于其常用的緊致算子的硬件利用率低。在這項工作中,我們提出一種新的壓縮范式,用于開發真正的硬件高效DNN,從而在保持模型準確性的同時提高硬件效率。有趣的是,我們觀察到一些DNN層的激活函數有助于DNN的訓練優化和提升準確度,可以在不影響模型準確度的情況下,在訓練后以適當的方式去除。受此啟發,我們提出了DepthShrinker,開發硬件友好型緊致網絡,通過將具有不規則計算模式的現有高效DNN的基本構建塊收縮為密集的,從而實現網絡的緊致化,硬件利用率大大提高,從而實現真正的硬件效率。令人興奮的是, 我們的DepthShrinker框架實現了硬件友好緊湊型網絡,超過現有SOTA高效DNN和壓縮方法,例如,準確度提高3.06%,在Tesla V100實現1.53× 現有逐通道剪枝方法MetaPruning的吞吐量。

        以下為文章詳細解讀:

        1 文章提出的的深度收縮框架1.1 概述

        關鍵理念。 DepthShrinker旨在開發真正的硬件 高效的DNN,通過刪除冗余激活功能,然后合并連續線性操作。關鍵理念是通過刪除帶有兩個激活函數的反向殘差塊(Sandler等人2018),即大部分高效DNN的基本構建塊,整個塊合并成一個密集的卷積層,卷積核大小與原始塊的深度卷積相同,輸入/輸出通道數與原始塊相同。

        框架概述。 為了實現上述目標,存在兩個重要的挑戰:哪些激活函數需要去除,如何在剩余激活函數較少的情況下恢復準確度。為了解決這些問題, 建立在現有SOTA高效DNN之上的深度收縮器集成了三個階段的工作,如圖2所示:(1)識別冗余激活函數,(2)去除已識別的激活函數并微調階段(1)生成的DNN和(3)合并在前一階段刪除激活函數后的網絡,以得到最終的網絡。請注意,我們在公開可用的預訓練模型之上應用DepthShrinker,以下為常見模型壓縮方法(He等人2018;Wen等人2016年;Han等人2015;Jacob等人2018)。

        圖片

        圖2 DepthShrinker三個階段設計的整體框架。

        1.2 階段1:識別冗余激活函數

        為了識別不重要的激活函數,預定義的標準如分層修剪(Li等人2016;Wen 等人2016)對于不同層耦合的激活函數是不合適的, 比如去除前面層的激活函數可能會更改后面層的特征分布。因此,我們提出了一種可微搜索方法來了解所有激活函數的重要性,通過考慮其聯合影響而實現,靈感來自最近的剪枝工作(Kang&Han2020;Ramanujan等人2020; Fu等人2021)。

        搜索方法概述。 我們的搜索方法指定可學習掩碼(N是激活函數的總數)到所有激活函數,其用作激活函數代理的重要性得分。在搜索過程中更新m時,應考慮不同激活函數的耦合情況,同時確保m的稀疏性足夠高,例如應高于 (1 ? k/N),其中k是剩余激活函數的數量,以滿足合并后階段的目標效率(見第1.4節)。在DepthShrinker中,搜索方法聯合學習掩碼m和模型權重θ。

        搜索方法表示。 推導最佳θ和m本質上是一個雙層優化問題(Liu等人2018)。在DepthShrinker中,我們將其近似為一級優化方式(Xie等人2018;Hu等人2020;Bi等人2020年)共同更新θ和m:

        其中|是損失函數,  和  是第 i個輸入和標簽對,  (這里是y尖號) 是在參數  和激 活掩碼  下的預測標簽。為了達到目標稀疏性 , 我們通過在正向過程中僅激活  的前  個元素來對 m施加  約束。具體而言, 我們采用二進制掩碼  (這里是m尖號)使用元素1和 0 來 近似前  個元素, 否則直接進行前向, 而m中的所有元素都是通過直通更新估計,Bengio等人2013 年)進行更新。特別地, 前向函數可以表示為:

        其中  (這里是m尖號) 是第一個1層的網絡函數,?是函數合成的運算符,  是激活函數,  是一個變換(例如卷積或其他線性操作), 其由  參數化。等式 (2) 中的二進制掩碼使得第I層 中的激活函數完全啟用或禁用。在反向傳播過程中, 我們直接傳遞二進制掩碼的梯度  (這里是m 尖號)至 , 即  (這里是m尖號)。因為只有對應于掩碼  的前  個值的激活函數參與前

        搜索方法實現。 我們的搜索方法進行兩種設置:(1)塊收縮和(2)m的延遲感知衰減。對于前者,由于我們的目標是將整個反向殘差塊合并為一個密集卷積,我們共享對應于一個塊中的兩個激活函數的掩碼值m,即刪除或保留兩個激活功能。對于后者,我們對m的每個元素額外增加衰減,其通過相應成本塊的權重來進行加權。在這項工作中,我們直接采用搜索過程中在RTX 2080Ti GPU上預先測量的延遲,使其對于平臺感知,以增強更長搜索時間的效率。

        1.3 階段2:如何微調

        在上述搜索過程之后,具有最不重要m的激活函數被去除,并進行微調以恢復精度。

        自由額外添加激活函數。 密集卷積后沒有了激活函數,是因為反向殘余塊(Sandler等人2018)僅包含兩個激活函數。為了提高所達到的準確度,我們在每次合并后,在每個密集卷積后額外添加一個激活函數(本工作中使用ReLU6),其硬件成本可以忽略不計。

        自蒸餾。 在DepthShrinker中,我們在微調期間啟用自蒸餾機制,即在原始網絡的激活函數指導下進行知識蒸餾(Hinton等人2015),以進一步提高生成網絡的準確度。需要注意的是,我們僅將原始網絡作為教師網絡,沒有引入額外的模型。

        1.4 階段3:如何合并

        微調移除不重要的激活函數后的網絡,最后一步是合并相鄰的線性操作(例如卷積/全連接, 平均池化或BN層)。

        合并兩個相鄰層。 在不喪失一般性的情況下, 這里我們考慮兩個相鄰的卷積層, 輸入特征 , 中間特征 , 輸出特征 , 以及第一層和 第二層的卷積核權重為  和  被移除, 并假定:

        上述兩層可合并為一層。假設層  和  的步長均為 1 , 我們得到:

        其中  和

        其中  是大小為  的合并核。請注意, 如果層  和  的步長大于1, 則卷積核仍然可 以合并為一個步長為  、核大小為  的卷積 核。

        合并反轉殘差塊。 從上面的分析可以看出,當連續的卷積層合并到一個卷積層時,產生的卷積層的輸入輸出通道僅由第一卷積層中的輸入通道數量和最后一個卷積層中的輸出通道數量決定,而不需要考慮中間層結構。結果是,反向殘差塊的設計規則(Sandler等人2018),即三個卷積層的通道數先擴展后減少,自然有利于我們的深度收縮器。我們相信該方法由于未來的硬件高效DNN設計。

        1.5 DepthShrinker:展開然后收縮

        上述DepthShrinker的常規設計為,即利用不重要的激活功能可在訓練后適當去除,不會損害推理準確度。令人興奮的是,這種方式也可以用來改進DNN訓練。具體而言,我們建議通過對給定DNN先擴展后收縮策略進行訓練,則將其命名為DepthShrinker。在深度收縮訓練中,我們首先(1)將一個或一些卷積層展開為反轉殘差塊,由于在擴展模型中增加了過參數化,則有利于訓練優化,(2)訓練擴展的DNN,然后(3)應用DepthShrinker合并上述新引入的塊,用于恢復原始網絡結構。該訓練計劃可以被視為用于增強原始DNN的復雜度,有利于其訓練優化,從而得到可實現的準確性,同時推理效率保持不變。

        2 實驗2.1 網絡和數據集

        我們將DepthShrinker應用于MobileNetV2(Howard等人2017)和EfficientNet-Lite(Google2020),即EfficientNet的硬件高效變體(Tan&Le 2019)系列,在ImageNet數據集之上(Russakovsky等人2015)進行實驗。

        2.2 和SOTA剪枝方法的基線對比

        和通道剪枝方法基線對比結果如表2和表3所示。

        圖片

        表2 DepthShrinker與SOTA通道剪枝方法MetaPruning對比結果。

        圖片

        表3 DepthShrinker與SOTA通道剪枝方法AMC對比結果。

        和層剪枝基線對比結果如圖3所示。

        圖片

        圖3 DepthShrinker與SOTA層剪枝方法基線對比結果。

        合并前后塊的延遲可視化結果如圖4所示,內存可視化如圖5所示。

        圖片

        圖4 MobileNetV2-1.4合并前(實線)/后(虛線)的延遲可視化。

        圖片

        圖5 內存可視化。

        2.3 和SOTA高效DNN方法基線對比

        和高效DNN方法對比如圖6所示。

        圖片

        圖6 與高效DNN方法對比結果。

        2.4 消融實驗

        預訓練和額外添加激活函數貢獻如表4所示。

        圖片

        表4 預訓練和額外添加激活函數貢獻結果。

        隨機搜索比較如表2和表3所示。

        CPU設備(實驗使用Google Pixel3和Raspberry Pi 4) 上的實驗結果如表5所示。

        圖片

        表5 CPU設備Google Pixel 3和Raspberry Pi 4的測試結果。

        DepthShrinker評估結果如表6所示。

        圖片

        表6 DepthShrinker評估結果。

        本文僅做學術分享,如有侵權,請聯系刪文。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新沂市| 都匀市| 鹤壁市| 广平县| 鹿邑县| 怀柔区| 类乌齐县| 平阳县| 宁津县| 布拖县| 清水县| 宁河县| 七台河市| 宜良县| 竹溪县| 吉首市| 阳新县| 延吉市| 绍兴市| 灯塔市| 巴彦县| 青铜峡市| 南靖县| 玛纳斯县| 镇巴县| 台山市| 邯郸市| 吉首市| 安国市| 汝南县| 杂多县| 胶州市| 堆龙德庆县| 东丽区| 台安县| 高要市| 琼海市| 双桥区| 宜良县| 成都市| 东方市|