---
# System prepended metadata

title: '[論文筆記]：BNext Family'

---

# [論文筆記]：BNext Family

Note Link: [https://hackmd.io/@HsuJenLung/BNext](https://hackmd.io/@HsuJenLung/BNext)
> [name=RE6121011徐仁瓏]


Paper: **Join the High Accuracy Club on ImageNet with A Binary Neural Network Ticket**
Reference: [https://arxiv.org/pdf/2211.12933](https://arxiv.org/pdf/2211.12933)



> [TOC]


# 貢獻
* BNext是一種新型的BNN架構，其損失曲面比現有的設計更加平滑，更容易優化。
* 提出了多樣化連續知識蒸餾技術，緩解反直覺的過擬合問題。
* BNext是第一個在ImageNet上達到>80%準確率的BNN。


# 動機
* 在 ILSVRC-2012 ImageNet 資料集中，最新的BNNs仍然落後最新的全精度模型大約10%的Accuracy。
* 原因是BNNs的損失曲面比全精度網絡粗糙得多，通往全局最小值的優化路徑比全精度網絡更加崎嶇。

<figure class="half">
    <img src="https://hackmd.io/_uploads/SykYBwkkye.png">
    <img src="https://hackmd.io/_uploads/SJ1l8vkkJl.png">
</figure>

```
圖2(a) 全精度的損失曲面
圖2(b) 直接將網絡二進制化會使損失曲面變得極不連續和崎嶇不平。
圖2(c) BiRealNet 提出的 Double Skip-Connection 設計緩解了信息稀疏問題。
圖2(d) Real2BinaryNet 使用注意力模塊重塑二進制卷積的輸出，減少了信息瓶頸。
```

> [!Tip] Analysis
> > 作者萃取以前方法的優點（如：殘差連接、重塑輸出分佈）來加入自己的模型設計。



# 架構

### Binary Neural Networks
* 二進制神經網絡是由多層 1-bit 卷積組成的輕量級神經網絡。
* 在前向傳播中，每層 1-bit 卷積中的輸入 $x^t_r$ 和代理權重 $w^t_r$ 會使用符號函數將實數化為 ±1。
* 在反向傳播中，符號函數使用 hardtanh 函數的梯度進行近似，因此我們可以計算權重 $w^t_b$ 的梯度並優化 $w^t_r$。
* 在每次迭代中，權重 $w^t_b$ 的梯度會累積到代理權重 $w^t_r$ 上。

$$
x_b^t~, w_b^t = \text{binarize} ~ (x_r^t, w_r^t) = 
\begin{cases}
+1 ~~~~ \text{if} ~x_r^t~, w_r^t\ge 0, \\
-1 ~~~~ \text{otherwise}.
\end{cases}
$$

$$
w_r^{t+1} = W_r^t - \alpha  \frac{\partial l^t}{\partial w_r^t}, ~~~ 
\frac{\partial l^t}{\partial w_r^t} = \frac{\partial l^t}{\partial w_b^t} \frac{\partial w_b^t}{\partial w_r^t}
$$


> $\frac{\partial w_b^t}{\partial w_r^t} = 1_{\lVert w
_r^t \rVert \le c}$ , represents the Staight-Through-Estimation (STE) strategy.
> **r** : real-valued variable
> **b** : binary variable 
> **t** : iteration number

### Binary Convolution with Information Recoupling（Info-RCP）

<figure class="half">
    <img src="https://hackmd.io/_uploads/S1AuJTgyyx.png">
</figure>


1. 使用一個快捷連接來將主分支的輸入與輸出（BConv-BN-PReLU）進行逐元素相加。
2. 輸出被輸入到輕量級的全局感知Squeeze-and-Expand（SE）分支，並通過學習自適應地調整輸出分佈，該分支用於縮放主分支的輸出。

> [!tip] Analysis
> > Info-RCP 的設計可能是參考 full-precision 模型流行的 Conv-BN-ReLU 設計順序，接著參考 Real2BinaryNet 使用 SE 分支重塑輸出分佈。


### Basic Block Design with ELM-Attention

<figure class="half">
    <img src="https://hackmd.io/_uploads/ryVeBAk1Jg.png">
</figure>

* 通過堆疊多個 Info-RCP模塊（Processor）來構建 Basic Block。
* 每個 Processor 之後都有一個 Batch Norm 層。
* 我們使用連續的 residual connections 來包圍每個基本處理器（Info-RCP-BN），有助於減少前向傳播中的信息瓶頸。
* 利用 element-wise bypass multiplication 動態校準每個 Basic Block 中第一個 3×3 Processor 的輸出。
* Element-wise bypass multiplication 有助於每個塊中的前向特徵融合和傳播，顯著改善損失曲面。

### BNext Family Construction

> BNext Architecture
![截圖 2024-10-07 上午9.59.35](https://hackmd.io/_uploads/Hkm9e6eyke.png)

> BNext Family![截圖 2024-10-07 上午10.18.52](https://hackmd.io/_uploads/rytMH6xJke.png)

     N,M: 每個階段的深度比率, C: 輸入層的寬度, Q: 權重和激活(W/A)的量化位元寬度，分別用於第一層、SE分支和輸出層。（藍色部分）
 * 為了與現有的工作進行公平比較，我們將所提出的塊設計應用於流行的 [MobileNetV1](https://arxiv.org/pdf/1704.04861) 骨幹網絡。
 * 通過改變每個階段中的塊寬和深度，得到了不同變種的 BNext。




# 蒸餾策略

### Knowledge Complexity for Teacher Selection


提出了一個簡單而有效的指標，稱為知識複雜度（Knowledge Complexity, KC），該指標結合了準確度和模型的緊湊性，用於教師選擇。


$$ 
KC(T) = log\left(1+\frac{Params(T)}{Accuracy(T) \times 10^6 + 10^{-8}}\right)
$$

    其中，T是選定的教師模型，Params是參數數量，Accuracy是教師的測試準確度。KC定義了教師參數空間的複雜性對暗知識有效性的影響。


下圖展示了三個流行的DNN家族的知識複雜度分析，以及對應的教師和學生的Top-1準確度。

<figure class="half">
    <img src="https://hackmd.io/_uploads/H12AOpekJl.png">
    <img src="https://hackmd.io/_uploads/HJupdTg1ye.png">
</figure>



    Student Model: BNext-T,  Dataset: ImageNet,  Epoch: 128,  Resolution: 224x224

按照常理，我們需要一個更強大的教師來拉高學生準確度的上限。然而，如上圖所示，當教師同時具有高準確度和高KC時，會容易導致二進制學生出現過擬合問題（學生的Top-1準確度顯著下降）。

可能的原因是，在初期訓練階段使用過於複雜的教師訓練二進制學生，**未能顧及教師和學生之間預測分佈的巨大差異**。類似的觀察也出現在其他研究中，剪枝過的教師比原始教師表現得更好。因此，我們建議在BNNs的KD訓練中優先選擇知識複雜度較低的教師。

> [!Tip]Anaiysis
> > 高 Accuracy 的老師無法使學生得到高 Accuracy，所以改用 KC 當作選擇老師的標準。

### Diversified Consecutive KD

開發了一種多樣化連續 KD 算法來進一步提升 KD 訓練的性能。該方法包含一個差距敏感的知識集成（Gap-Sensitive Knowledge Ensemble）和一個知識提升策略（Gap-Sensitive Knowledge Ensemble）。

**1. Gap-Sensitive Knowledge Ensemble**
* 使用 Knowledge Ensemble 來增加 Teacher Knowledge 的多樣性。
* Knowledge Ensemble 不是靜態的，而是根據知識的難度進行動態調整。
* 動態加權和融合方法限制了容量有限的二進制學生 $S_\theta$ 更加關注更為複雜的知識。

$$
L^i_{CE} = -\sum_x S_{\theta}(x)log\left(T^i_\theta(x)\right)
$$

$$
\sigma(x) = \frac{e^{L_{CE}(S_\theta, T^s_\theta)}}{\sum_i e^{L_{CE}(S_\theta, T^i_\theta)}}
$$

$$
L(x) = \sigma(x) KL_{S_\theta,T^s_\theta}(x) + (1-\sigma(x)) KL_{S_\theta,T^w_\theta}(x)
$$


> $T^s_\theta$ : Strong Teacher Model
> $T^w_\theta$ : Weak Teacher Model
> $S_\theta$ : Binary Student Model
> $\sigma(x)$ : Softmax, 對每個知識 $KL_{S_\theta, T_\theta^i}$ 進行加權。
> $CE$ : Cross Entropy
> $KL$ : K-L Divergence, 計算每次前向傳播中學生和每個教師預測之間的距離。

**2. Knowledge-Boosting Strategy**

* 為了進一步減少 BNext-M/L 優化中的知識差距，開發了一種知識提升策略。
* 如前所述，強教師 $T^s_\theta$ 在整個訓練過程中保持一致，但助教教師從預定義的候選組中選擇。
* 助教教師將按準確度和知識複雜度的遞增順序依次加入KD過程，且每個助教的活動時間相同。
* 通過在訓練的不同階段使用適應性助教來調整教師知識，可以獲得更好的多樣性，並有效解決強教師過擬合問題。


<figure class="half">
    <img src="https://hackmd.io/_uploads/ByizlsMJJg.png">
</figure>

<!--![image](https://hackmd.io/_uploads/ByizlsMJJg.png)-->

> [!Tip] Analysis
> > 用權重 $\sigma(x)$ 動態調整要偏好主要教師或助教，是個聰明的選擇，和一般人的思考模式很像。不是一次加入好幾個助教，而是一個階段加入一個助教，就好像一個助教負責一種任務，似乎是個可以增加模型表現的合理設計。

# 實驗


### Setup

> **Optimizar** : AdamW with $\beta_1$=0.99, $\beta_2$=0.999 

> **Weight Decay** : $10^{-3}$ for non-binary params, $10^{-8}$ for binary params.

> **Initial Learning Rate** : $10^{-3}$

> **Scheduler** : Cosine Annealing

> 將 Straight Through Estimation（STE）的反向梯度裁剪範圍設置為 [-1.5, 1.5]。

> 對於激活，我們使用 hard binarization，並逐步根據 [BoolNet](https://arxiv.org/pdf/2106.06991) 的建議對權重進行二進制化。

> 使用兩種不同的骨幹網絡 [ResNet](https://arxiv.org/pdf/1512.03385) 和 [MobileNetV1](https://arxiv.org/pdf/1704.04861) 進行技術評估。

> 模型在 8 個 Nvidia DGX-A100 GPU 上進行訓練。


### Dataset
#### ILSVRC12 ImageNet
```
Resolution : 224 x 224
Batch size : 512
Epochs : 512 
Data Augmentation : RandAugment (7, 0.5)
```
<figure class="half">
    <img src="https://hackmd.io/_uploads/S1Homsf1kg.png">
</figure>

* BNext 在 ImageNet 分類任務中創造了 BNNs 的新紀錄。BNext-XL 將 BNNs 的準確率提升到了 80.57%，超過了大多數現有工作 10% 的準確率，並達到了**接近現代 32 位設計的水準**。
* 相比之前的 SOTA 設計 PokeBNN，BNext-M† 在類似模型大小下準確率提高了 0.7%。PokeBNN 使用了 8192 的巨大批次大小進行 720 個 epoch 的訓練，並使用了 64 個 TPU-v3 芯片，而 BNext 僅使用 512 的批次大小進行 512 個 epoch 的訓練。
* 相比流行的 ReActNet，BNext-Tiny† 在操作數較少的情況下，準確率高出 2.6%。
* BNext-18 在 ImageNet 上的 Top-1 準確率達到 68.4%，僅比原始 ResNet-18 低 1.2%。



#### CIFAR

```
Resolution : 224 x 224
Batch size : 128
Epochs : 256
Data Augmentation : random crop, random horizontal flip, normalization
```

<figure class="half">
    <img src="https://hackmd.io/_uploads/HkgSGOfJye.png">
    <img src="https://hackmd.io/_uploads/HJRLOoMyJl.png">
</figure>

* 進一步探索了 BNext 在較小數據集 CIFAR10 上的泛化能力，CIFAR10 數據集的結果是五次運行的平均值。
* 相比最近的設計，如 AdaBNN、ReCU 和 RBNN，BNext 取得了最佳性能。它比最新的 AdaBNN 提高了 0.5%，並將與 32 位 ResNet 的差距縮小至 0.8%。


### Ablation Study

我們對本文提出的技術影響進行了消融研究，內容包括**模塊設計**、**優化方案**、**數據增強策略**和**訓練後量化的影響**。我們選擇了 BNext-Tiny 進行所有實驗，除非特別說明，所有實驗都使用標準數據增強和交叉熵損失進行模型訓練。

#### Module Designs

我們對所提出的 Info-RCP 和 ELM-Attention 模塊進行了消融研究。未使用兩個結構的 Baseline model 在 ImageNet上 僅獲得了 62.43% 的準確率。僅添加 ELM-Attention 到 BNext-Tiny 後，準確率提高到 64.91%。僅添加 Info-RCP 後，準確率提高到 64.61%。同時使用這兩個設計，達到了 65.02% 的最高準確率。因此，這兩個設計都提高了模型的表現能力，這與損失曲面比較中的預期一致。

<center class="half">
    <img src="https://hackmd.io/_uploads/By4kXdGJyx.png" width="600"/>
</center>

#### Optimization Schemes

我們評估了實驗中使用的所有優化方案的有效性。以 ResNet-101 作為教師的傳統知識蒸餾策略被用作 baseline。用基於 KC(x) 的教師選擇（Efficient-B0）替代 baseline 教師後，準確率提升了 0.57%。這表明教師選擇在二進制網絡優化中至關重要。進一步使用 Efficient-B0 和 Efficient-B2 的差距敏感集成策略使準確率額外提高了 0.05%。再通過加入 RandAugment 提升準確率 0.08%。將訓練 epoch 延長至 512 後，準確率提升到 72.40%。

<center class="half">
    <img src="https://hackmd.io/_uploads/SJYqG_M1kg.png" width="600"/>
</center>


#### Data Augmentations

我們驗證了 Mixup、Cutmix、Augment-Repeat 和 RandAugment 等流行數據增強策略的有效性。結果顯示，大多數流行的增強選擇對 BNext 模型優化有害。例如，Augment-Repeat 策略使 Top-1 準確率下降了 11.28%。Mixup 和 RandAugment 分別提高了泛化性能，但結合它們產生了次優結果。僅使用RandAugment帶來了 2.49% 的最佳增益。

<center class="half">
    <img src="https://hackmd.io/_uploads/Bk9iGdGkkx.png" width="600"/>
</center>

#### Quantization Impacts

我們對輸入卷積層、輸出全連接層及 SE 分支中的層進行了訓練後量化。未進行量化時，BNext-L 的 Top-1 準確率達到了 80.57%。將所有層的權重和激活量化為 8 位時，準確率僅略微下降至 80.47%。進一步將SE分支的權重位元寬度減少到 4 位（激活仍為 8 位），最終得到的BNext-L模型的分類性能仍保持在 80.37%，高於 80% 的標準。

<center class="half">
    <img src="https://hackmd.io/_uploads/H1V2zuM1Jg.png" width="600"/>
</center>

> [!Tip] Analysis
> > 從表中觀察，把 SE 層的權重從 int8 掉到 int4 不會使模型掉太多，但是將激活層從 int8 掉到 int4 卻使結果下降許多。因此我們可以猜測或許激活層對模型表現較敏感，此一發現也可以運用在往後的實驗上。此外，作者並未秀出將輸入層和輸出層從 int8 掉到 int4 的結果，或許此兩層對於模型表現更加敏感，可能會使結果大幅下降，因此沒有秀出來。

# 結論

* 提出了 BNext，這是第一個能在 ImageNet 上達到 80.57% Top-1 準確率的二進制神經網絡架構。
* 引入全新的 Info-RCP 和 ELM-Attention 模塊來增強優化過程，更平滑的損失曲面和使模型能夠更好地擬合訓練資料，甚至出現了微弱的過擬合現象，這在以前的 BNN 架構中是不可能實現的。
* 為了增加泛化能力並減少過擬合，我們提出了多樣化的連續知識蒸餾技術，並在過程中發現了一些有趣的現象。
* 在 ImageNet 上取得的高準確度表明 BNext 足以成為一個強大的特徵提取器。

> [!Note] Future Directions
> > - BNext 模型在 ImageNet 上展現出色表現，具有成為其他圖像領域輕量化骨幹網路的潛力。
> > - 在改良模型時，觀察先前的網路並萃取有用的設計至關重要。
> > - 若現有指標無法有效解釋問題，創建新的指標來應對也是一種可行策略。
> > - 除了傳統方法外，思考如何利用各種集成方法來提升模型性能，有助於解決過擬合問題。
> > - 許多論文中的消融實驗往往蘊含對現有研究有益的發現，深入分析並靈活運用這些發現，能有效提高問題解決的效率。

> [!Caution] Questions
> > 1. 整個 Basic Block 是怎麼想到的？為什麼 Processor 後面還要加 BN？
> > 2. 為什麼 Stage 3 的 Basic Block 數量和其他不一樣？
> > 3. 為什麼最後輸出層前還要加 PReLU？