深度模型壓縮論文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression

文章目錄

    • 1.摘要和背景
      • 1.1 摘要
      • 1.2 背景
    • 2.方法和貢獻
      • 2.1 方法
      • 2.2 貢獻
    • 3.實驗和結果
      • 3.1 實驗
      • 3.2 結果
    • 4.總結和展望
      • 4.1 總結
      • 4.2 展望

本系列是在閱讀深度神經網絡模型小型化方面論文時的筆記!內容大部分從論文中摘取,也會有部分自己理解,有錯誤的地方還望大家批評指出!

論文鏈接:BlockSwap: Fisher-guided Block Substitution for Network Compression
代碼鏈接:github代碼

1.摘要和背景

1.1 摘要

原文摘要:
The desire to run neural networks on low-capacity edge devices has led to the development of a wealth of compression techniques. Moonshine (Crowley et al., 2018a) is a simple and powerful example of this: one takes a large pre-trained network and substitutes each of its convolutional blocks with a selected cheap alternative block, then distills the resultant network with the original. However, not all blocks are created equally; for a required parameter budget there may exist a potent combination of many different cheap blocks. In this work, we find these by developing BlockSwap: an algorithm for choosing networks with interleaved block types by passing a single minibatch of training data through randomly initialised networks and gauging their Fisher potential. We show that block-wise cheapening yields more accurate networks than single block-type networks across a spectrum of parameter budgets.
在資源受限的設備(手機等終端設備)上使用深度神經網絡使得模型壓縮成為研究的熱門。2018年Crowley等人提出的Moonshine方法將原始網絡中的basicBlock用計算量更加少的block進行替代,從而達到了對模型裁剪的目的。但是,該方法對原始網絡中的每一個block都使用相同的block進行替換,即:在篩選出最佳的block后,將原始模型的中所有block都是搜索得到的最佳的block進行替換。本文在moonshine方法基礎上,對不同的basicBlock用不同的最佳的block進行替換,從而得到裁剪后的模型,然后使用網絡蒸餾的方法對裁剪后的模型進行retrain,從而提高裁剪后模型的精度。本文提出的方法首先隨機生成一批滿足資源限定要求的網絡,然后使用一個minibatch的數據對所有產生的網絡進行前向傳播,并計算出每個網絡的Fisher potential,然后推選出Fisher potential最大的那個網絡作為裁剪后的模型,然后對該模型進行微調(使用網絡蒸餾方法),提高裁剪后模型的精度。

1.2 背景

  • 2018年Crowley等人提出的方法:Moonshine主要分為以下兩步:

    • 將原始網絡中的每個block替換成計算資源更加少的block
    • 將替換后的網絡作為學生網絡,原始網絡作為老師網絡,使用網絡蒸餾的方法,訓練學生網絡,得到的學生網絡便是壓縮后的網絡。
  • 2018年Crowley等人提出的方法:Moonshine,存在的問題是對所有的block使用相同的替換block,這個假設太強了。我們知道,即使在resnet中,不同的block之間的通道數還不一樣,所以文章中使用同一個block對原始模型的所有的block進行替換是不合適的。

  • 使用分組卷積,深度可分離卷積,瓶頸卷積等特殊的卷積替換普通卷積,可以大大的降低模型的計算量。如:mobilenet就是使用深度可分離卷積替換原始的普通卷積,使得在和vgg相同的精度表現下可以擁有更少的參數。

2.方法和貢獻

2.1 方法

  • 本文方法的過程:
    • 從候選的可替換卷積模塊中隨機選取block替換原始網絡中的block,并使得構造出來的網絡滿足資源限制的條件。
    • 從數據集中隨機選取一個minibatch的數據集,然后使用生成的所有滿足要求的網絡計算得到 Fisher potential,并選出 Fisher potential最大的那個網絡
    • 將選出的網絡作為學生網絡,初始網絡作為老師網絡,使用網絡蒸餾的方法對學生網絡進行訓練,得到的學生網絡就是我們壓縮后的網絡。
      在這里插入圖片描述
  • 使用網絡蒸餾的方法可以將一個大而復雜的網絡的知識遷移到一個小而簡單的網絡中,是比fine_turn更好的方法。但是使用網絡蒸餾方法的前提是得知道小網絡(裁剪后的網絡)的結構。
  • 分組卷積,深度可分離卷積和瓶頸卷積或者它們的組合,替換普通的卷積可以大大的降低模型的計算量。
    在這里插入圖片描述
  • 網絡自動架構搜索(automating neural architecture search (NAS))技術常常包括如下方法:1)基于空間查找方法的(使用隨機和非隨機方法),即對候選的網絡的參數空間進行搜索,從而得出滿足要求的結構。2)基于優化算法(遺傳算法),對網絡的參數進行搜索;3)基于強化學習的架構搜索,即使用強化學習方法對參數進行搜索 ;4)one-shot方法:訓練一個大而全的混合模型,然后根據要求選出合適的子模型等等。按時NAS方法被證明常常會找到一個次優解。

2.2 貢獻

  • 提出了blockswap方法,通過該方法得出比刪減網絡的深度或者寬度或者moonshine方法結果要好。
  • 我們概述了一種通過Fisher信息快速比較候選模型的簡單方法。 我們通過消融研究證實了我們的度量與最終訓練誤差高度相關,并表明它可以用來選擇性能架構
  • 實驗證明,本文的方法比moonshine和隨機組合的方法都要好。

3.實驗和結果

3.1 實驗

  • 數據集:cofar10和ImageNet
  • 模型:WRN-40-2 , ResNet-34
  • 通過對比人為簡單的刪減網絡的深度和寬度,moonshin取不同block的時候和blockswap方法的對比,驗證本文方法的有效性。
  • blockswap方法在候選的block集合中搜索滿足資源限制的搜索步驟為1000步,是隨機的。然后使用一個minibatch的訓練集根據生成的網絡算出他們的firsh分數,然后選擇分數最高的那個網絡作為裁剪后的網絡。
  • Networks are trained for 200 epochs using SGD with momentum 0.9. The initial learning rate of 0.1 is reduced by a factor of 5 every 60 epochs. Minibatches of size 128 are used with standard crop + flip data augmentation. The weight decay factor is set to 0.0005. For attention transfer β is set to 1000 using the output of each of the three sections of the network.

3.2 結果

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • BlockSwap chooses a student that is better than the teacher, despite using 3.5× fewer parameters and 3× fewer MACs.
  • Fisher potential metric is an effective means for choosing optimal block structures
  • Specifically, it beats the teacher by 0.49% in top-1 error and 0.82% in top-5 error despite using almost 3× fewer parameters

4.總結和展望

4.1 總結

  • 提出了一種算法,可以對復雜的模型進行壓縮以適用于計算資源受限的設備。
  • 通過給定一個block候選集合,然后隨機的對原始網絡中的block使用候選的block進行替換,并且滿足資源受限的條件。然后,使用一個minibatch的訓練集對生成的網絡計算firsher分數,并將分數最高的那個網絡作為裁剪后的網絡,然后利用網絡蒸餾的方法對得到的裁剪后的網絡進行訓練。

4.2 展望

  • 文章中給出的候選的block集合中的block數目有限,是否可以發現更好的可替換的block?
  • 文章中對于網絡的替換是基于隨機生成的,是否可以使用基于優化算法或者網絡生成呢?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445139.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NLP復習資料(8)-知識圖譜、信息抽取

NLP復習資料第16講—知識圖譜第17講-信息抽取(知識圖譜生命周期中信息獲取的關鍵技術)國科大,宗老師《自然語言處理》課程復習筆記,個人整理,僅供參考。第16講—知識圖譜 知識圖譜經典知識表示理論語義網資源描述框架…

Collection源碼閱讀

package java.util;import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport;/*** 集合層次結構的根接口,一個集合表示一組對象,稱為元素* JDK不提供任何該接口的直接實現,JDK提供實現…

socket阻塞和非阻塞的區別

讀操作 對于阻塞的socket,當socket的接收緩沖區中沒有數據時,read調用會一直阻塞住,直到有數據到來才返 回。當socket緩沖區中的數據量小于期望讀取的數據量時,返回實際讀取的字節數。當sockt的接收緩沖 區中的數據大于期望讀取的字節數時,讀取期望讀取的字節數,返回實際讀…

深度模型壓縮論文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目錄1.摘要和介紹1.1摘要部分2.背景和方法2.1 背景2.2 貢獻2.3 方法3.實驗和結果3.1 實驗3.2 結果4.總結和展望4.1 總結4.2 展望本系列是在閱讀深度神經網絡模型小型化方面論文時的筆記!內容大部分從論文中摘取,也會有部分自己理解,有錯誤…

架構分享--微博架構

先來分享下大神Tim Yang的關于微博的架構設計: 這里主要從 存儲和接口角度來講 對于大流量系統的架構設計,對于寫入方面是特別需要注意的,基本上現在遇到的系統都是對于主數據庫的寫入,然后對于從數據庫實現流量的分發。 對于存…

Pytorch(7)-自己設計神經網絡會遇到的問題

操作pytorch架構遇到的問題1.網絡參數初始化2.查看當前可學習參數3.增加可學習的參數4.參數優化函數Adagrad5.直接修改網絡梯度值6.optimizers.zero_grad()報錯7.tensor.detach() 和 tensor.data 的區別1.網絡參數初始化 在pytorch中,有自己默認初始化參數方式&…

Python里的OS模塊常用函數說明

Python的標準庫中的os模塊包含普遍的操作系統功能。如果你希望你的程序能夠與平臺無關的話,這個模塊是尤為重要的。即它允許一個程序在編寫后不需要任何改動,也不會發生任何問題,就可以在Linux和Windows下運行。 下面列出了一些在os模塊中比較…

深度模型壓縮論文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目錄1.摘要和背景1.1 摘要1.2 背景2.方法和貢獻2.1 方法2.1.1 訓練過程2.1.2 loss介紹2.2 貢獻3.實驗和結果3.1 實驗3.2 結果4.總結和展望4.1 總結4.2 展望主要貢獻:基于網絡蒸餾方法,提出了一種提升裁剪后模型的精度的方法!將訓練時間大…

關系數據庫——基礎

數據庫系統概論 四個基本概念 數據:數據庫中存儲的基本對象,描述一個事物的符號記錄,數據和其語義不可分開說 數據庫(DB):是長期儲存在計算機內、有組織的、可共享的大量數據的集合。 數據庫管理系統&a…

Python(27)-模塊

模塊、包1.模塊導入的方式2.使用as給模塊取一個別名(大駝峰命名法)3.從模塊中導入部分工具4.從模塊中導入全部工具5.模塊搜索順序6__name__7.包8.發布模塊、安裝模塊、卸載包9.pip安裝第三方模塊本系列博文來自學習《Python基礎視頻教程》筆記整理&#…

Wow6432Node

64 位版本 Windows 中的注冊表分為 32 位注冊表項和 64 位注冊表項。許多 32 位注冊表項與其相應的 64 位注冊表項同名,反之亦然。 64 位版本 Windows 包含的默認 64 位版本注冊表編輯器 (Regedit.exe) 可顯示 64 位和 32 位的 注冊表項。WOW64 注冊表重定向器為 32 位程序提供…

如何使用docker配置深度學習開發環境

文章目錄1.底層驅動的安裝1.1 操作系統的安裝1.2 顯卡驅動的安裝1.3 cuda的安裝2.使用docker配置深度學習開發環境2.1 docker的安裝2.2 nvidia_docker的安裝2.3 安裝過程中的問題2.3.1 docker和nvidia_docker的版本不匹配的問題。2.3.2 解決每次運行docker命令的時候要加sudo.2…

反射全解

反射的概念 反射的引入: Object obj new Student(); 若程序運行時接收到外部傳入的一個對象,該對象的編譯類型是Object,但程序又需要調用該對象運行類型的方法: 1.若編譯和運行類型都知道,使用 instanceof判斷后&…

MachineLearning(4)-核函數與再生核希爾伯特空間

核函數與再生核希爾伯特空間1.支持向量積-核函數2.一個函數為核函數的條件3.核函數與希爾伯特空間3.1希爾伯特空間-Hilbert空間1.支持向量積-核函數 核(kernel)的概念由Aizenman et al.于1964年引入模式識別領域,原文介紹的是勢函數的方法。在那之后,核…

CRegKey 注冊表操作

1.簡介 CRegKey提供了對系統注冊表的操作方法,通過CRegKey類,可以方便的打開注冊表的某個分支或子鍵(CRegKey::Open),可以方便的修改一個鍵的鍵值(CRegKey::SetValue),也可以查詢某…

進程基礎

進程的基本概念 程序順序執行的特征: 1)順序性:處理機嚴格按照程序所規定的順序執行,每一步操作必須在下一步操作開始前執行 2)封閉性:程序在封閉的環境下運行,程序獨占資源,資源的狀…

用Docker容器自帶的tensorflow serving部署模型對外服務

相信很多人和我一樣,在試圖安裝tensorflow serving的時候,翻遍了網上的博客和官網文檔,安裝都是以失敗而告終,我也是一樣,這個問題折磨了我兩個星期之久,都快放棄了。幸運的是在同事的建議下,我…

C資源

云風最近寫了一篇博客《C語言的前世今生》。作為長期使用C語言開發網絡游戲服務器的程序員,云風是有理由寫這樣一篇文字,不過還是感覺談的不夠深入,C語言在業界使用的現狀沒有怎么描寫,有些意猶未盡。在這里想比較系統的談談個人對…

學點數學(2)-特征函數

特征函數1.數列特征方程2.矩陣特征方程3.微分方程特征方程4.積分方程特征方程特征方程是為研究相應的數學對象而引入的一些等式,這些等式描述了特定對象的特性。依據研究的對象不同,特征方程包括數列特征方程、矩陣特征方程、微分方程特征方程、積分方程…

GCC如何產生core dump

先決條件1.安裝apport(automatically generate crash reports for debugging)2.修改/etc/security/limits.conf文件,使允許core dump,或者用ulimit -c unlimited設置core dump文件的大小為unlimited3.C/C的編譯開關-g(…