《卷積神經網路的壓縮與加速》概述

2021-09-16 21:23:21 字數 1000 閱讀 1551

有四種常用方法:網路剪枝,模型量化,低秩估計,模型蒸餾。

網路剪枝主要有下列幾種方法:filter-level剪枝(通過刪除filter來減少通道數量),group-level剪枝即kernel-size縮小(如將33變成32,或者3*3變成固定形狀包含若干個0的新核),稀疏卷積的方法(fine-grained,vector-level,kernel-level,稀疏矩陣乘法相比於稠密矩陣乘法,可以顯著減少儲存空間和計算開銷)。以上三種方法都面對同乙個問題,怎麼選擇裁剪掉哪些引數。一般有兩種方法來識別:損失函式對引數的二階導數最小(二階導數越小,代表這個引數的更新對損失函式的下降貢獻越小,可保證損失函式不變,???),引數絕對值最小(表示輸出特徵圖與該引數幾乎無關,可保證輸出特徵圖不變)。

低秩估計:將原來的卷積過程,先用11的核降維,做完卷積運算,再用11的核公升維。所謂的秩我理解代表的就是降維的程度。低秩估計方法存在乙個待解決的問題,就是保留多少秩是不明確的。保留太多的秩可以保證準確率,但加速壓縮效果不好;保留秩太少,加速壓縮效果好,但準確率很難保證。曾經有工作提出先訓練低秩的引數矩陣,即在損失函式中加入對引數矩陣秩的考慮,然後再對訓練好的低秩網路做低秩估計,由於本身引數矩陣中很多列向量都是線性相關的,所以可以保留很少的秩進行分解。

模型量化:通常指的是模型的定點化,比如將float32轉換成int8的運算,首先會有乙個根據引數的最大值和最小值進行的浮點轉定點的運算,然後對定點後的資料進行加乘運算,運算結果再復原為float值。這個過程中輸入和權值都得量化。

模型蒸餾:不是對現有的網路進行改進,而是直接設計乙個小網路。怎麼保證小網路的準確率呢?首先訓練乙個大網路,然後用大網路來指導小網路。具體的做法是,小網路的結構和大網路是一樣的(blob結構相同),然後給小網路設計了乙個聯合的損失函式,一部分是正常的任務損失函式,另一部分是指導損失函式(是各個blob的大小網路輸出特徵圖的均方誤差)。這個聯合損失函式可以引導小網路盡可能學習大網路的引數,並且達到很好的任務準確率。有實驗經驗表明,如果先單獨對指導損失函式進行訓練,然後再加入任務損失函式聯合訓練,得到的模型效果將會比直接聯合訓練得到的模型好很多。

卷積與卷積神經網路

神經網路中的卷積是指用乙個卷積核 也叫濾波器 實質上是乙個矩陣,在影象上掃瞄一遍,得到乙個新的影象。掃瞄的實質,就是矩陣大小的影象畫素值,和卷積核做運算,然後得到新的畫素值,放到新的影象中 運算不是一行乘一列的乘法,而是哈達馬積,即對應位置的元素一一相乘。最後,把哈達馬積得到的矩陣上的每乙個元素求和...

深度神經網路加速與壓縮總結

low rank pruning 深度網路加速和壓縮的第二種方法是pruning,簡單來說就是把神經網路中的連線剪掉,剪掉以後整個網路複雜度特別是網路模型大小要減小很多。最早在iclr2016上史丹福大學提出了一種稱為deep compression的隨機剪枝方法。由於隨機剪枝方法對硬體非常不友好,...

卷積神經網路 有趣的卷積神經網路

一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...