# Neuron Merging-Compensating for Pruned Neurons ##### 論文屬性 - 主旨 - 神經網路縮減 - 關鍵字 - 神經網路 puring - 結構化剪枝 - 合併神經元 - 背景 - 結構性的神經網路修剪過程中,當一個 node 的前一層被刪除後,reconstruction error 會繼續累積,導致性能下降,望能通過這個方法改善 - 假設 - 使用合併神經元的方式較過去方法 (捨棄、filter) 效果好 - 以合併方式補償修剪後的神經能更好還原原模型的準確度 - 以上假設成立 - 將使用於捲積層的方法應用在全連接層 - 貢獻 - 提出進行神經網路縮減的新方法、並取得更好結果 ### 筆記 ##### 方法 將原始權重分解成兩個矩陣 - 目前 layer 的新權重 - 另一個則是他們提出的 scaling matrix - 指導下一層 mering 的過程 ##### 步驟 目標是維持 i+1 layer 的 activation 的輸出 $a_{i+1}$ 方程式為:$a_{i+1} = W^{T}_{i+1}f(W^{T}_{i}x_{i})$ 接著將 $W_{i}$ 分解成兩部分$Y_{i}$ $R^{N_{i} \times P_{i+1}}$、$Z_{i}$ $R^{P_{i+1} \times N_{i+1}}$ - 0 < $P_{i+1}$ <= $N_{i+1}$ 也就是變成:$a_{i+1} = W^{T}_{i+1} f (Z^{T}_{i}Y^{T}_{i}x_{i})$ 再來將$Z_{i}$ 與 $W_{i+1}$ 合併,為了使$Z_{i}$能夠從 activation 被移出,論文有個推導來證明 為了使得 $a_{i+1}$保持一致,i+1層的權重要滿足: $a_{i+1} = W^{T}_{i+1} f (Z^{T}_{i}Y^{T}_{i}x_{i}) = (Z_{i}W_{i+1})^{T} f(Y^{T}_{i}x_{i}) = (W^{'}_{i+1})^{T} f(Y^{T}_{i}x_{i})$ $W^{'}_{i+1} = Z_{i}W_{i+1}$ 也就是說:$Y_{i}$為第i層的新權重 (未剪枝),$W^{'}_{i+1}$從原本的 $N_{i+1}$ 減少至 $P_{i+1}$ 以上為整個算法的核心概念,後續有將此用於捲積層的內容,請見論文 ##### 演算法 - 使用兩個 hyperparameters 來判斷兩個 node 是否相似,以進行補償 - 對於BatchNorm有額外的操作 1. Decomposition Algorithm - 輸入 $W_{i}$ ∈$R^{N_{i}\times N_{i+1}}$,輸出$Y_{i}$ $R^{N_{i} \times P_{i+1}}$、$Z_{i}$ $R^{P_{i+1} \times N_{i+1}}$ - 給定一個$P_{i+1}$ 與 t 1. $Y_{i}$ = $P_{i+1}$ 選擇保留的 node 2. $Z_{i}$ 設成全為 0 的矩陣 3. 對於每個 neuron 的 weight $w_{n}$ - 如果 $w_{n}$ 屬於 $Y_{i}$ ,則不更動,並將對應的 Z 矩陣位置設成1 - 否則計算相似度 (MostSim),如果 >= t ,則將對應的 Z 矩陣的位置設成所得出的 scale 2. MostSim - 輸入 $w_{n}$ 與 $Y_{i}$ - 輸出$w_{n}$, sim 與 scale - 找到一個 $w^{*}_{n}$ 為 與所有 $Y_{i}$ 中的 $w$ 進行 CosineSim 計算中最大的$w_{n}$ - sim = CosineSim($w_{n}$ , $w^{*}_{n}$) - scale = $||w_{n} ||_{2}$ / $||w^{*}_{n} ||_{2}$ 3. MostSim with BN - 在 MostSim 的基礎上進行 Normalzie,找到 cosineSim * λ + Bias * (1-λ) 有最小值的 ##### 實驗參數 ##### model Model | Optimizer and Parameters | Learning Rate Schedule | Initialization | Merging -- | --| -- | -- | -- LeNet | SGD (momentum = 0.9, lr = 0.1) | 1/10 every 15 epochs, total 60 epochs, weight decay = 1e-4, batch size = 128 | Random | t = 0.45 VGG, ResNet | SGD (momentum = 0.9, lr = 0.1) | 1/10 at 100 and 150 epochs, total 200 epochs, weight decay = 5e-4, batch size = 128 | Random | λ = 0.85, t = 0.1 | WideResNet | SGD (momentum = 0.9, lr = 0.1) | 1/10 at 100 and 150 epochs, total 200 epochs, weight decay = 5e-4, batch size = 128 | Random | λ = 0.8, t = 0.1 | VGG-16 | SGD (momentum = 0.9, lr = 0.1) | 1/10 at 100 and 150 epochs, total 200 epochs, weight decay = 5e-4, batch size = 128 | Random | λ = 0.7, t = 0.1 | ##### pruning criteria - l1-norm [15] - l2-norm [5] - l2-GM [6] - 排除在 filter scoring 中需要使用 filter map 或是 data lossing 的修剪方法 ##### dataset - Preprocessing: - FashionMNIST: normalized ( μ = 0.5, σ = 0.5 ) - CIFAR: He et al. 的設定 ##### 實驗結果 - 重要成果 模型|測試資料集|修剪比例|最好效果 (被 puring 減少的準確率) -|-|-|- LeNet-300-100|FashionMNIST|80%|恢復13%以上的準確度 VGG-16|CIFAR-10|63%|恢復至接近基準水平 VGG-16|CIFAR-100|44.10%|恢復約4% ResNet-56|CIFAR-10|20%, 30%, 40%, 50%|恢復超過30% WideResNet-40-4|CIFAR-10|50%|損失不到5%的準確度,比剪枝好20% - VGG-16 - 使用PFEC [15] 的策略: - 在第一層與最後六層修剪一半的 filters - CIFAR-100 則在第一與最後三層 - ResNet - 在 internal layers of the residual blocks 做修剪 ##### WARE 後續還有針對 feature map 的 Weighted Average Reconstruction Error 的比較,總而言之是這篇論文的 merge 方法更好