基于 boosting 原理訓(xùn)練深層殘差神經(jīng)網(wǎng)絡(luò)
1. 背景
1.1 Boosting
Boosting[1] 是一種訓(xùn)練 Ensemble 模型的經(jīng)典方法,其中一種具體實(shí)現(xiàn) GBDT 更是廣泛應(yīng)用在各類問題上。介紹boost的文章很多,這里不再贅述。簡(jiǎn)單而言,boosting 方法是通過特定的準(zhǔn)則,逐個(gè)訓(xùn)練一系列弱分類,這些弱分類加權(quán)構(gòu)成一個(gè)強(qiáng)分類器(圖1)。
1.2 殘差網(wǎng)絡(luò)
殘差網(wǎng)絡(luò)[2]目前是圖像分類等任務(wù)上***的模型,也被應(yīng)用到語音識(shí)別等領(lǐng)域。其中核心是 skip connect 或者說 shortcut(圖2)。這種結(jié)構(gòu)使梯度更易容向后傳導(dǎo),因此,使訓(xùn)練更深的網(wǎng)絡(luò)變得可行。
在之前的博文作為 Ensemble 模型的 Residual Network中,我們知道,一些學(xué)者將殘差網(wǎng)絡(luò)視一種特殊的 Ensemble 模型[3,4]。論文作者之一是Robert Schapire(剛注意到已經(jīng)加入微軟研究院),AdaBoost的提出者(和 Yoav Freund一起)。Ensemble 的觀點(diǎn)基本算是主流觀點(diǎn)(之一)了。
2. 訓(xùn)練方法
2.1 框架
- 殘差網(wǎng)絡(luò)
即這是一個(gè)線性分類器(Logistic Regression)。
- hypothesis module
其中 $C$ 為分類任務(wù)的類別數(shù)。
- weak module classifier
其中 $\alpha$ 為標(biāo)量,也即 $h$ 是相鄰兩層 hypothesis 的線性組合。***層沒有更低層,因此,可以視為有一個(gè)虛擬的低層,$\alpha_0=0$ 并且 $、o_0(x)=0$。
- 將殘差網(wǎng)絡(luò)顯示表示為 ensemble
令殘差網(wǎng)絡(luò)的***輸出為 $F(x)$,并接合上述定義,顯然有:
這里用到了裂項(xiàng)求和的技巧(telescoping sum),因此作者稱提出的算法為 telescoping sum boosting.
我們只需要逐級(jí)(residual block)訓(xùn)練殘差網(wǎng)絡(luò),效果上便等同于訓(xùn)練了一系列弱分類的 enemble。其中,除了訓(xùn)練殘差網(wǎng)絡(luò)的權(quán)值外,還要訓(xùn)練一些輔助的參數(shù)——各層的 $\alpha$ 及 $W$(訓(xùn)練完成后即可丟棄)。
2.2 Telescoping Sum Boosting(裂項(xiàng)求和提升)
文章正文以二分類問題為例展開,我們更關(guān)心多分類問題,相關(guān)算法在附錄部分。文章給出的偽代碼說明相當(dāng)清楚,直接復(fù)制如下:
其中,$\gamma_t$ 是一個(gè)標(biāo)量;$C_t$ 是一個(gè) m 乘 C (樣本數(shù)乘類別數(shù))的矩陣,$C_t(i, j)$ 表示其中第 $i$ 行第 $j$ 列的元素。
需要特別說明的是,$st(x, l)$ 表示 $s_t(x)$的第 $l$ 個(gè)元素(此處符號(hào)用的略隨意:-);而 $st(x) = \sum{\tau=1}^t h\tau(x) = \alpha_t \cdot o_t(x) $。
與算法3中類似,$f(g(x_i), l)$ 表示 $f(g(x_i))$ 的第 $l$ 個(gè)元素,$g(x_i, y_i)$ 表示 $g(x_i)$ 的第 $i$ 個(gè)元素。
顯然 Algorithm 4 給的最小化問題可以用 SGD 優(yōu)化,也可以數(shù)值的方法求解([1] 4.3 節(jié))。
3. 理論
理論分部沒有詳細(xì)看。大體上,作者證明了 BoostResNet 保留為 boost 算法是優(yōu)點(diǎn):1)誤差隨網(wǎng)絡(luò)深度(即弱分類器數(shù)量)指數(shù)減??;2)抗過擬合性,模型復(fù)雜度承網(wǎng)絡(luò)深度線性增長(zhǎng)。詳細(xì)可參見論文。
4. 討論
BoostResNet ***的特點(diǎn)是逐層訓(xùn)練,這樣有一系列好處:
- 減少內(nèi)存占用(Memory Efficient),使得訓(xùn)練大型的深層網(wǎng)絡(luò)成為可能。(目前我們也只能在CIFAR上訓(xùn)練千層的殘差網(wǎng)絡(luò),過過干癮)
- 減少計(jì)算量(Computationally Efficient),每一級(jí)都只訓(xùn)練一個(gè)淺層模型。
- 因?yàn)橹恍枰?xùn)練淺層模型,在優(yōu)化方法上可以有更多的選擇(非SGD方法)。
- 另外,網(wǎng)絡(luò)層數(shù)可以依據(jù)訓(xùn)練情況動(dòng)態(tài)的確定。
4.2 一些疑問
文章應(yīng)該和逐層訓(xùn)練的殘差網(wǎng)絡(luò)(固定或不固定前面各層的權(quán)值)進(jìn)行比較多,而不是僅僅比較所謂的 e2eResNet。
作者這 1.1 節(jié)***也提到,訓(xùn)練框架不限于 ResNet,甚至不限于神經(jīng)網(wǎng)絡(luò)。不知道用來訓(xùn)練普通深度模型效果會(huì)怎樣,競(jìng)爭(zhēng) layer-wise pretraining 現(xiàn)在已經(jīng)顯得有點(diǎn)過時(shí)了。
References
- Schapire & Freund. Boosting: Foundations and Algorithms. MIT.
- He et al. Deep Residual Learning for Image Recognition.
- Veit et al. Residual Networks Behave Like Ensembles of Relatively Shallow Networks.
- Xie et al. Aggregated Residual Transformations for Deep Neural Networks.