# Learning both weights and connections for efficient neural network, NIPS 2015
## 3. Learning Connections in Addition to Weights

Figure 2 說明三步驟的 pruning 流程
### 3.1. Regularization
選擇正確的 regularization 方法會影響 performance。L1 regularization 會在 pruning 之後、retraining 之前 有更好的 accuracy,但是 retraining 之後的 performance 比 L2 regularization 差,因此整體而言,**L2 regularization 給予最佳的 pruning 結果**。
### 3.2. Dropout Ratio Adjustment
Dropout 用來避免 overfitting, 且套用在本篇中 train 及 retrain 過程中。由於三階段中 pruning 後模型已簡化,因此在 retrain 階段中 drpoout ratio 應該更小,將之 ratio 稱為 $D_r$ ,公式為:
$C_i = N_iN_{i-1}$
$D_r = D_o \sqrt{\frac{C_{ir}}{C_{io}}}$
### 3.3. Local Pruning and Parameter Co-adaptation
* 在 retrain 完 pruned 過的模型後,應該保留這些 weight 做為下一次 retrain 初始化的 weight。
* 為了避免模型越深層時造成梯度消失,而使得 pruning error 在retrain model 時越無法回復,本篇將固定 conv layer 的 weight 來 retrain FC layer,**反之亦然(???)**。
### 3.4. Iterative Pruning
learning the right connections 是一個迭代的過程,「pruning 之後 retraining」是一個 iteration,經過許多這樣的 iteration 之後可以找到一個最小數量的 connections (即最小的網路)。在不損失 accuracy 的情況下,本方法可以將 AlexNet 的 pruning rate 從 5倍 變成 9倍 (和 single-step aggressive pruning 比較)。
- **每次 iteration 都是一個想找最佳 connections 的 greedy search。 (???)**
- **同時也做了實驗根據 parameter 的絕對值來隨機刪除,但得到更差的結果 (???)**
### 3.5. Pruning Neurons
pruned 階段會將 connection weight 為零的刪掉。且利用 Regularization 將訓練的 weight 趨近於零,**dead neuron 會在下次 retain 的時候自動去除。(???)**
###### tags: `model compression`