---
# System prepended metadata

title: Neuron Merging-Compensating for Pruned Neurons

---

# 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 方法更好