❶ 神經網路權值怎麼確定
神經網路的權值是通過對網路的訓練得到的。如果使用MATLAB的話不要自己設定,newff之後會自動賦值。也可以手動:net.IW{}= ; net.bias{}=。一般來說輸入歸一化,那麼w和b取0-1的隨機數就行。神經網路的權值確定的目的是為了讓神經網路在訓練過程中學習到有用的信息,這意味著參數梯度不應該為0。
參數初始化要滿足兩個必要條件:
1、各個激活層不會出現飽和現象,比如對於sigmoid激活函數,初始化值不能太大或太小,導致陷入其飽和區。
2、各個激活值不為0,如果激活層輸出為零,也就是下一層卷積層的輸入為零,所以這個卷積層對權值求偏導為零,從而導致梯度為0。
(1)神經網路中權值和連接的修剪擴展閱讀:
神經網路和權值的關系。
在訓練智能體執行任務時,會選擇一個典型的神經網路框架,並相信它有潛力為這個任務編碼特定的策略。注意這里只是有潛力,還要學習權重參數,才能將這種潛力變化為能力。
受到自然界早成行為及先天能力的啟發,在這項工作中,研究者構建了一個能自然執行給定任務的神經網路。也就是說,找到一個先天的神經網路架構,然後只需要隨機初始化的權值就能執行任務。研究者表示,這種不用學習參數的神經網路架構在強化學習與監督學習都有很好的表現。
其實如果想像神經網路架構提供的就是一個圈,那麼常規學習權值就是找到一個最優點(或最優參數解)。但是對於不用學習權重的神經網路,它就相當於引入了一個非常強的歸納偏置,以至於,整個架構偏置到能直接解決某個問題。
但是對於不用學習權重的神經網路,它相當於不停地特化架構,或者說降低模型方差。這樣,當架構越來越小而只包含最優解時,隨機化的權值也就能解決實際問題了。如研究者那樣從小架構到大架構搜索也是可行的,只要架構能正好將最優解包圍住就行了。
❷ 30分鍾講清楚深度神經網路
這兩年神經網路各種火。但對很多人而言,只是聽著覺得各種高大上,究其本質,還是聽不懂。下面我們花三十分鍾把這個事情講清楚。
神經網路演算法是最早來源於某神經生理學家和某數學家聯合發表的一篇論文,他們對人類神經運行規律的提出了一個猜想,並嘗試給出一個建模來模擬人類神經元的運行規律。
神經網路一開始由於求解問題的不穩定,以及范圍有限被拋棄。後面又在各個大神的努力下,對遇到的問題一個個解決,加上因為游戲帶來的計算能力的提升獲得了一個爆發式的增長。
下面我們講講神經網路是啥以及遇到的問題和探索出來的解決方案,最終我們給出一個深度神經網路的默認的最優配置項。
建立M個隱藏層,按順序建立輸入層跟隱藏層的聯結,最後建立隱藏層跟輸出層的聯結。為每個隱藏層的每個節點選擇激活函數。求解每個聯結的權重和每個節點自帶的bias值。參見下圖。
所謂激活函數就是對各個路徑的輸入求和之後進一步增強的函數 。
典型的有如下幾個:
下面這個圖裡面,是已知的各個聯結線的權值,求y1, y2
這個練習可以測試對神經網路的理解。
所謂神經網路問題的訓練本質,就是已知 y1,y2....yn, 已知x1, x2....xm,求解每個連接的權值和每個神經元上的偏差值。對單層的激活函數為RELU的神經網路而言就是, y = max(sum(w * x)+b, 0),已知y和x,求解w和b。
對於以上求解w和b的值,科學家們發現可以通過反向傳播和梯度下降相結合來求解。就是一開始用隨機數初始化我們每個聯結的權值,然後通過神經網路計算出來的y值跟真實的y值做比對。如果這個值相差比較大,則修改當前層的聯結的權重。當發現這個值相差不大時,則修改更低一層的權重。這個步驟一直重復,逐步傳遞到第一層的權值 。
三大問題:
針對這三個問題,大拿們開始了一場探索之旅。
神經網路的求解是通過反向傳播的技術來解決的。通過梯度下降法。問題是,反向傳播從輸出層開始一步一步傳到Layer 1時,越到低層,聯結的權值變化越小,直到沒變化。這種叫梯度消失。還有一些呢?則是越到第一層,變化越來越大。這種叫梯度爆炸。常見於RNN。
解決方案探索如下:
目前來說,通常用1+2 多於 3 多於 4。就是現在一般使用He initialization跟ReLU的演進版本作為作為激活函數來解決梯度消失和爆炸的問題,其次才使用Batch Normalization,最後使用Gradient Clipping。
通常來說,我們很難獲得足夠的標記好的訓練數據。常用解決方案如下:
對於大規模數據的訓練,很多時候速度很慢。除了解決梯度消失或爆炸的問題之外,還有使用AdamOptimizer替代GradientDescentOptimizer會大大加快收斂速度 。
我們後面會教大家用tensorflow構造出一個神經網路並求解。
❸ BP神經網路中初始權值和閾值的設定
首先需要了解BP神經網路是一種多層前饋網路。以看一下在matlab中BP神經網路的訓練函數,有梯度下降法traingd,彈性梯度下降法trainrp,自適應lr梯度下降法traingda等。
因為初始值(初始權值和閥值)都在x這個向量中,x(n,1)的長度n為:n=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum
其中inputnum*hiddennum是輸入層到隱含層的權值數量,hiddennum是隱含層神經元個數(即隱含層閥值個數),hiddennum*outputnum是隱含層到輸出層權值個數,outputnum是輸出層神經元個數(即輸出層閥值個數)。
結構
BP網路是在輸入層與輸出層之間增加若干層(一層或多層)神經元,這些神經元稱為隱單元,它們與外界沒有直接的聯系,但其狀態的改變,則能影響輸入與輸出之間的關系,每一層可以有若干個節點。
BP神經網路的計算過程由正向計算過程和反向計算過程組成。正向傳播過程,輸入模式從輸入層經隱單元層逐層處理,並轉向輸出層,每~層神經元的狀態隻影響下一層神經元的狀態。如果在輸出層不能得到期望的輸出,則轉入反向傳播,將誤差信號沿原來的連接通路返回,通過修改各神經元的權值,使得誤差信號最小。
以上內容參考:網路-BP神經網路
❹ 神經網路權值是啥意思
神經網路的權值是通過對網路的訓練得到的。如果使用MATLAB的話不要自己設定,newff之後會自動賦值。也可以手動:net.IW{}= ; net.bias{}=。一般來說輸入歸一化,那麼w和b取0-1的隨機數就行。神經網路的權值確定的目的是為了讓神經網路在訓練過程中學習到有用的信息,這意味著參數梯度不應該為0。
網路是由若干節點和連接這些節點的鏈路構成,表示諸多對象及其相互聯系。
在1999年之前,人們一般認為網路的結構都是隨機的。但隨著Barabasi和Watts在1999年分別發現了網路的無標度和小世界特性並分別在世界著名的《科學》和《自然》雜志上發表了他們的發現之後,人們才認識到網路的復雜性。
網路會藉助文字閱讀、圖片查看、影音播放、下載傳輸、游戲、聊天等軟體工具從文字、圖片、聲音、視頻等方面給人們帶來極其豐富的生活和美好的享受。
漢語中,「網路」一詞最早用於電學《現代漢語詞典》(1993年版)做出這樣的解釋:「在電的系統中,由若干元件組成的用來使電信號按一定要求傳輸的電路或這種電路的部分,叫網路。」
在數學上,網路是一種圖,一般認為專指加權圖。網路除了數學定義外,還有具體的物理含義,即網路是從某種相同類型的實際問題中抽象出來的模型。在計算機領域中,網路是信息傳輸、接收、共享的虛擬平台,通過它把各個點、面、體的信息聯繫到一起,從而實現這些資源的共享。網路是人類發展史來最重要的發明,提高了科技和人類社會的發展。
❺ 神經網路演算法中的weight是不是翻譯為「權值」權值指的是什麼呢 我是一個初學者,希望能有人能幫助我。
weight是連接權值的意思。權值是連接某兩層網路的一個可調整的量,通過不斷調節權值的量來達到訓練網路的目的。不同的神經網路有不同的權值修正的函數。
❻ 神經網路演算法原理
一共有四種演算法及原理,如下所示:
1、自適應諧振理論(ART)網路
自適應諧振理論(ART)網路具有不同的方案。一個ART-1網路含有兩層一個輸入層和一個輸出層。這兩層完全互連,該連接沿著正向(自底向上)和反饋(自頂向下)兩個方向進行。
2、學習矢量量化(LVQ)網路
學習矢量量化(LVQ)網路,它由三層神經元組成,即輸入轉換層、隱含層和輸出層。該網路在輸入層與隱含層之間為完全連接,而在隱含層與輸出層之間為部分連接,每個輸出神經元與隱含神經元的不同組相連接。
3、Kohonen網路
Kohonen網路或自組織特徵映射網路含有兩層,一個輸入緩沖層用於接收輸入模式,另一個為輸出層,輸出層的神經元一般按正則二維陣列排列,每個輸出神經元連接至所有輸入神經元。連接權值形成與已知輸出神經元相連的參考矢量的分量。
4、Hopfield網路
Hopfield網路是一種典型的遞歸網路,這種網路通常只接受二進制輸入(0或1)以及雙極輸入(+1或-1)。它含有一個單層神經元,每個神經元與所有其他神經元連接,形成遞歸結構。
(6)神經網路中權值和連接的修剪擴展閱讀:
人工神經網路演算法的歷史背景:
該演算法系統是 20 世紀 40 年代後出現的。它是由眾多的神經元可調的連接權值連接而成,具有大規模並行處理、分布式信息存儲、良好的自組織自學習能力等特點。
BP演算法又稱為誤差反向傳播演算法,是人工神經網路中的一種監督式的學習演算法。BP 神經網路演算法在理論上可以逼近任意函數,基本的結構由非線性變化單元組成,具有很強的非線性映射能力。
而且網路的中間層數、各層的處理單元數及網路的學習系數等參數可根據具體情況設定,靈活性很大,在優化、信號處理與模式識別、智能控制、故障診斷等許 多領域都有著廣泛的應用前景。
確認方法:
統計學認為,在統計中計算平均數等指標時,對各個變數值具有權衡輕重作用的數值就稱為權數。
例子:求下列數串的平均數
3、4、3、3、3、2、4、4、3、3、
一般求法為(3+4+3+3+3+2+4+4+3+3)/10=3.2
加權求法為(6*3+3*4+2)/10=3.2
其中3出現6次,4出現3次,2出現1次.6、3、1就叫權數。這種方法叫加權法。
一般說的平均數,就是把所有的數加起來,再除以這些數的總個數。表示為:
(p1+p2+p3+…..+pn)/n;
但有的數據記錄中有一些相同的數據,在計算的時候,那一個數有幾個相同數,就把這個數乘上幾,這個幾,就叫權,加權,就是乘上幾後再加。平均數還是要除以總個數。
還是以上面的各個數為例:
它們每個數都有一些相同數,表示為:k1,k2,k3…….kn;
加權平均的公式是:(k1p1+k2p2+k3p3+……knpn)/(k1+k2+k3+…..kn)
❽ 三值神經網路
權重壓縮:三值神經網路
卷積神經網路(Convolutional Neural Network,CNN)尤其適合於目標識別、分類、檢測及圖像分割等計算機視覺應用。 典型的模型有數百萬參數並 運算量大 ;例如,AlexNet有6100萬參數(浮點數權值共佔用249MB存儲空間),分類一張圖片需要15億高精度運算。 所以為降低CNN規模和使用資源,現在有模型修剪(model pruning,去掉值較小的權值)和權值壓縮(weight compression,利用少數幾位量化權值) 兩種方法。
權值壓縮:二值神經網路
重要點:網路中的權重更新使用三值{+1,0,-1};並最小化全精度權重W和三值權重W的歐式距離。
傳播過程:
公式1的優化問題化解為如下:
從而 解:
最終確定一個閾值 、 來構建三值神經網路;根據 W 具體的分布情況來確定閾值 :
均勻分布:在 大於閾值的條件下 : 約等於均值( )*數量( )
[圖片上傳失敗...(image-885207-1554553493996)]
正態分布:
[圖片上傳失敗...(image-2a3804-1554553493996)]
最後本文章作者根據經驗:
確定三值網路中的閾值與W期望的關系 : :
均值分布: (注 在[-a,a]均勻取值,均值為 )
正態分布: (註:
演算法:
[圖片上傳失敗...(image-d013ce-1554553493996)]
只在前向和後向過程中使用使用權值簡化 ,但是更新是仍然是使用連續的權值。
優化方法:隨機梯度下降(SGD+動量)、批量標准化和學習率衰減
Momentum動量:
本實驗基於數據集MNIST、CIFAR-10、ImageNet以及三種網路結構(LeNet-5、VGG-7、ResNet-18(B))進行測試,分別使用二值神經網路、三值神經網路及全精度網路,評測其效果。
TWNs在benchmark表現比全精度網路稍微差一點,但是模型壓縮率達到了16/32倍。
源碼:
前向後向 更改在conv_layer.cpp line 30-100 Forward_cpu | backward_cpu
❾ 人工神經網路里的權值和權向量是什麼意思啊
人工神經網路是有向概率隨機網路
每條路徑都有實現概率和方向
權值就是這條路徑的實現概率
權向量就是這條路徑的指向和權值共同組成的向量
❿ Rethingking The Value of Network Pruning
加速卷積神經網路的方法主要可以分三個方面:1. 針對卷積操作優化,例如使用FFT實現卷積操作;2. 量化操作,例如網路的二值化(BinaryNet);3. 在結構上簡化,使模型變小。在結構上簡化模型也可以分三類:張量分解、連接稀疏化,基於通道的裁枝。首先張量分解是將張量分解成多個小張量,但是輸出的通道數並沒有變化,因此對於1*1的卷積層很難通過張量分解的方法做壓縮,而當前很多模型結構都用到了大量的1*1卷積(例如ResNet,GoogleNet,Xception等)。其次連接稀疏化是將兩層之間的連接變稀疏,但是這種稀疏化處理通常是沒有固定模式規律的,所以盡管理論上有很高的加速效果,但是實際實現很復雜,因為通過稀疏化處理,數據無法再通過原來的張量存儲,需要使用稀疏矩陣/稀疏張量來存儲,那麼卷積操作也變成稀疏卷積。最後相比於前兩種方法,基於通道的裁枝既可以減少通道數,又不會改變數據的存儲方式,因此其對於CPU和GPU都有很好的加速效果,同時也不需要實現特殊的卷積操作。
模型壓縮的典型工作:
Low-rank Decomposition 低秩分解 :
使用SVD等技術來近似於權重矩陣(它具有低秩矩陣)。
在全連接層上工作很好,但CNN的計算量主要在卷積層。
Weight Quantization 量化權值 :
如HashNet量化網路權值(採用共享權重和哈希索引大大節省存儲空間)
但不能節省運行時間(因為權重還需要恢復從而進行網路推理inference)
二值化是個很好的方法(或用三值化{-1,0,1})。
Weight Pruning/Sparsifying 權重修剪或稀疏 :
有論文將訓練好的網路里的小權值修剪掉(即設為0),這樣也可以用稀疏格式儲存權值。
但是需要專用的稀疏矩陣運算庫或特殊硬體來加速,且運行內存也沒有減少。
Structured Pruning/Sparsifying 結構修剪或稀疏化:
有提出在訓練好的網路中,修剪那些較小權值連接的Channel,再微調網路恢復精度方法的論文
有提出在訓練前隨機停用channel從而引入稀疏,有提出neuron-level的稀疏方法從而修剪神經元獲得緊湊網路,也有提出結構化稀疏學習(SSL)的方法,去稀疏CNN不同層級的結構(filters、channels、layers)。
Neural Architecture Learning (NAS)神經結構學習:
有關於自動學習網路結構的方法,如谷歌通過強化學習來搜尋最佳網路結構,或者其他的給定巨大網路結構,從中學習出最佳子圖網路。
但是資源消耗太大,時間太長。
傳統的模型剪枝思路:訓練一個冗餘模型+剪枝+微調,剪枝的意義在於保留重要的權重,裁剪冗餘的權重,以此盡可能保證准確率。實際上,對於所有STOA的模型結構剪枝演算法,微調一個剪枝後的模型相比於從頭訓練一個剪枝候的模型,結果不會更好,甚至更差。意思就是說,剪枝之後保留的權重相比於剪枝之後網路模型的結構,並不那麼重要,或者說, Network Pruning更多地是在進行網路結構的搜索 。根據實驗觀察,本文發現:1、訓練一個大的參數冗餘的模型並不是必要的;2、保留對於大網路重要的權重對於小模型而言並不那麼重要;3、剪枝之後的網路結構本身而非保留的權重對於最後模型的有效性更為重要。
傳統剪枝的兩點共識:
1、訓練一個效果優良的大模型很重要,以此保證高准確率;
2、剪枝之後的模型結構和保留的權重都很重要,因此是fine-tuning而非train from scratch
本文認為在進行結構剪枝(structured pruning method)(在卷積通道上進行剪枝)上述兩個共識可能並不是必須的。
兩個觀察:
1、對於預先定義(predefined)目標模型的結構剪枝,直接從頭訓練剪枝模型不比微調剪枝之後的模型效果差,甚至更好;
2、對於事先不知道(auto-discover)目標模型的結構剪枝,從頭訓練也不比微調的結果差,甚至更好。
意思是說結構比參數重要,模型剪枝可能本質就在做網路結構的搜索。此外,從參數冗餘的大模型繼承權重參數似乎並不是那麼好,可能讓剪枝之後的模型陷入局部優化。
對於非結構化的網路剪枝(unstructured,weight level),在小數據集上從頭訓練往往與微調剪枝模型效果相當,但是在大數據集上不是如此。
從頭訓練有兩種方式:
剪枝模型與大模型訓練同樣的輪數顯然不公平,因為剪枝模型一輪訓練的計算量明顯遠低於大模型。
因此,一種方法是使得訓練大模型和訓練小模型的總體計算量是相同的(FLOPs),換言之,剪枝降低了幾倍的計算量,訓練輪數就是訓練大模型的幾倍,稱之為Scratch-B。另外一種的使得訓練剪枝模型的輪數跟訓練大模型一樣,稱之為Scratch-E。
Predefined Structured Pruning
L1-norm based Filter Pruning
以往一些剪枝的操作主要是 減少了全連接層的參數 ,全連接層的參數量佔比最多(比如VGG-16中全連接層操作參數佔了90%,但計算量只佔了不到1%), 但是主要的計算量集中在卷層操作。意即對權重矩陣進行稀疏化並不能充分減少計算量。論文提出 對卷積層進行剪枝操作 ,然後進行retrain,不會造成 稀疏連接 (稀疏矩陣操作需要特殊的庫等來處理),全連接層可以使用 平均池化層 來代替以減少參數量。
pruning filters and feature maps
第 層卷積層的輸入特徵圖為 ,卷積核維度為 ,單個卷積核記為 ,輸出特徵圖維度為 ,總計算量為 ,去除一個卷積核,將減少的計算量為 ,因此,如果去除 個卷積核,將減少的計算量倍數為 。
在單層中確定去除那些卷積核:
衡量每層中單個卷積核的相對重要性:絕對值的和(矩陣L1范數和)
具有較小權重的卷積核可以認為傾向於產生較小激活的特徵圖(相比於同層內的其他卷積核)
選擇前m個最小的絕對值,刪除對應的卷積核和特徵圖,相比於隨機選擇相同數量的filters和選擇最大值filters的結果比較,效果更好 。
演算法:
對於每一個filter matrix按列絕對值求和
對求和結果排序
裁剪掉m個絕對值最小的filters,以及對應的輸出,它又是下一層的輸入,所以也得去掉下一層卷積核的對應通道
剩餘的kernel weights保留
決定每層對剪枝的敏感性:
每一卷積層進行單獨剪枝,查看在validation set上准確度的變化,對於VGG-16,一些卷積層的卷積核數量是一樣的,所以對於敏感度差不多的卷積層,使用相同的比例進行剪枝,而對於敏感度比較大的層,選擇最小的比例進行剪枝或者不進行剪枝。
跨越多層的剪枝:
之前的一些剪枝策略是逐層剪枝,然後進行retraining,但是這樣是非常耗時的。
兩種策略
獨立剪枝:就是每一層是獨立的,當剪枝層的輸入特徵圖通道減少,決定該去掉哪些卷積核時,范數的計算還是應該考慮原始卷積的所有通道,然後進行剪枝
貪心剪枝:就是考慮到上一層被剪掉的情況,當剪枝層的輸入特徵圖通道減少,決定該去掉哪些卷積核時,范數的計算要去掉對應輸入特徵圖減少的通道,然後進行剪枝
Retraining
剪枝之後,應該retraining(類似fine-tune)
一次性剪枝然後retrain
逐層剪枝進行retrain
第二種策略結果可能會更好,但是需要更多的epochs
ThiNet
作者主頁
prune以filter(卷積核)為單位,根據該層filter的輸出來判斷該filter是否對結果有貢獻,如果沒有貢獻或貢獻很小,則直接把這個filter去掉,關鍵在於filter的選擇方式,依據則是如果可以用某一層的輸入的一個子集代替原來的輸入得到盡可能類似原來的輸出的話,那麼子集以外的輸入就可以去掉,則其對應的前面一層的卷積核也就可以去掉。如下圖。
以去掉冗餘卷積核做prune的研究還有很多,關鍵在於選擇方式,比如計算filter的絕對值和,認為如果一個filter的絕對值和比較小,說明該卷積核並不重要,這種演算法暫且叫Weight sum;還有計算激活層輸出的feature map的值的稀疏程度,如果feature map的值很稀疏,也就是大部分值是0,那麼該feature map對應的filter也是冗餘的,可以去掉,這種演算法暫且叫APoZ(Average Percentage of Zeros)。
Filter selection:
不同於一些方法:用第 層的數據來指導剪枝第 層的卷積核,本文使用第 層來確定第 層的剪枝,如前所述:
如果能用第 層的輸入的某一子集來估計該層的輸出,那麼輸入中的其他通道就可以被去掉,而第 層的輸入來源於第 層的輸出,那麼對應第 層的卷積核就可以去掉。
Pruning:
同時去掉第 層輸入的weak channel,和與其對應的第 層的卷積核,網路結構不變,只是變瘦了。
Finetuning:
當對每一層做prune後,都fine-tune1到2個epoch,然後等所有層都prune後,再fine-tune多個epoch。
因此整體上就是上述三步迭代應用到每一層上,依次對每一層做prune。
Data-drive channel election:
將一個卷積操作定義為: , 表示輸入特徵圖,維度為 , 表示卷積核,維度為
目標是移除一些不太重要的卷積核 ,而由於第 層的卷積核數量沒變,因此第 層的輸出的維度是不變的,意即第 層的輸入 不變,根據這樣的想法,就可以移除第 層中對 影響很小的那些卷積核,這樣對整個網路的性能影響也很小。換句話說,就是最小化 的重構損失。
Collecting training examples
從 上任意取一位置分量 ,有:
意即可以尋找一個子集 ,使得:
貪心演算法:給定輸入 ,優化:
m是圖像數量和位置數量的乘積。
由於 包含channel較多,因此求解速度會很慢,因此定義另一個集合 ,集合 所包含的channel要少於 ,滿足:
則優化下式:
對於ResNet這樣的網路,在每一個stage的每一個block中一般有三層卷積,其中最後一層卷積的結果需要和skip connection的結果做element-wise proct,這樣的話就得保證該block的最後一層卷積的輸出channel個數和skip connection的輸出channel個數一樣。因此在文中採用只對一個block的前兩層卷積做prune,而不動最後一個卷積層,如下圖Figure3。另外對於VGG-16網路,由於前面10層卷積占據了90%的計算量,而全連接層又占據了86%的參數,因此作者採用對前面10層卷積層進行prune,達到加速目的,另外將所有全連接層用一個global average pooling層代替。
Regression based Feature Reconstruction
Channel Pruning for Accelerating Very Deep Neural Networks
對於一個訓練好的模型,本文方法通過一個2步迭代的演算法逐層裁枝,優化函數是LASSO回歸和最小二乘法重建誤差。
與ThiNet類似,本文不去考慮單個參數的重要性,而是直接最小化輸出特徵圖的重建誤差,逐層地做裁枝,為了降低特徵圖B的通道,通過最小化特徵圖C的重構誤差得到。
第一步是選擇通道,第二步是特徵圖重建,目的是最小化重建誤差,本文提出兩步迭代的演算法:首先選取最具代表性的通道,即裁剪B層到C層的卷積;其次重建特徵圖,調整B層到C層的參數W,使C層特徵圖重建誤差最小。迭代交替進行以上兩步。通過基於LASSO回歸的方法來找到最具代表性的通道。
假設特徵圖B到特徵圖C的卷積表示為 ,特徵圖B ,特徵圖C , 表示batch_size,將特徵圖B的通道由 降為
表示非零項數, 是向量 的分量,為0就表示對應通道被去掉, , 都表示單通道的特徵圖/卷積核。但由於上式中的約束條件是0-范數,屬於 優化問題,求解為NP難問題,因此進一步將0-范數放寬到1-范數,得優化函數為:
選擇通道:
固定參數 不變,求解 ,則上述優化問題可以進一步轉化為LASSO回歸問題:
,上式可以通過SGD方法找到最優解,是比較常見的優化問題。
重構特徵圖:
固定 不變,上式可以轉化為最小二乘估計問題:
最小二乘估計問題同樣為常見的優化問題,也可以利用SGD的方法得到最優解,最後做出調整,保證范數為1:
對多分支網路進行剪枝:
在裁剪第一個卷積時,並不刪掉其輸入特徵圖的通道,而是新加一層采樣層(其用處就是對輸入特徵圖按 來進行采樣,同時保留了原本的輸入特徵圖作為shortcut的輸入),對於殘差塊的第一個卷積層的輸入進行通道采樣,估計 的重構誤差。
Automatic Structured Pruning
Network Slimming
利用batch normalization中的縮放因子 作為重要性因子,即 越小,所對應的channel就不太重要,就可以裁剪(pruning)
對BN層中的scale factor 進行L1正則化,使其變得稀疏。
BN:
直接用 來評估channel的重要程度。 的數越小,說明該channel的信息越不重要,也就可以刪減掉該Channel。
為什麼不用 作為重要性因子?
feature map的信息量是來源於方差而非均值。方差越大則該feature map內的特徵就越明顯。
服從分布 ,因此方差越小,信息量就越少,就越不重要
某些通道特徵圖的方差越小,意即對下一層特徵圖的所有單元的貢獻值越平均,將其去掉,僅僅只是做了特徵評議,不影響相對差異
因此對BN的縮放因子添加smooth L1正則化(不是Fast R-CNN中的smooth L1 Loss),損失函數定義為:
訓練方法為:
第一步:初始化網路;
第二步:加入Channel稀疏懲罰項,訓練網路;
第三步:通過固定閾值來刪減channel,如刪減70%的channel;
第四步:Fine-tune。由於刪減channel後精度會下降,故再訓練去微調網路;
第五步:可以再跳到第二步,實現多次精簡網路;
第六步:得到精簡後的網路。