導言
傳統的神經網絡都是基於固定的數據集進行訓練學習的,一旦有新的,不同分布的數據進來,一般而言需要重新訓練整個網絡,這樣費時費力,而且在實際應用場景中也不適用,所以增量學習應運而生。
增量學習主要旨在解決災難性遺忘(Catastrophic-forgetting) 問題,本文將要介紹的《iCaRL: Incremental Classifier and Representation Learning》一文中對增量學習算法提出了如下三個要求:
a) 當新的類別在不同時間出現,它都是可訓練的
b) 任何時間都在已經學習過的所有類別中有很好的分類效果
c) 計算能力與內存應該隨着類別數的增加固定或者緩慢增長
有條件的可以去油管聽聽原作者對這篇論文的講座:Christoph Lampert: iCaRL- incremental Classifier and Representation Learning
簡要概括
本文提出的方法只需使用一部分舊數據而非全部舊數據就能同時訓練得到分類器和數據特征從而實現增量學習。
大致流程如下:
1.使用特征提取器\(φ(·)\)對新舊數據(舊數據只取一部分)提取特征向量,並計算出各自的平均特征向量
2.通過最近均值分類算法(Nearest-Mean-of-Examplars) 計算出新舊數據的預測值
3.在上面得到的預測值代入如下loss函數進行優化,最終得到模型。
本文的重點在上面三個步驟中用黑體標出,下面對這三個進行具體介紹
1.平均特征向量
這個其實很好理解,就是把某一類的圖像的特征向量都計算出來,然后求均值,注意本文對於舊數據,只需要計算一部分的數據的特征向量。
什么意思呢?
假設我們現在已經訓練了\(s-1\)個類別的數據了,記為\(X^1,...,X^{s-1}\),因為通常內存資源有限,所以假設從每個舊數據類中選出一定數量的數據組成examplar sets,記為\(P^1,...,P^{s-1}\)。
然后現在又得到了\(t-s\)個新數據,記為\(X^s,...,X^t\)。同理我們也需要提取出一部分數據,記為\(P^s,...,P^t\)
如何選取數據可參見文末算法示意圖。
有了新舊數據后,我們可以先將它們合並,記為\(P=\{P^1,...,P^t\}\),然后就可以使用特征提取器\(φ(·)\)計算每個類別的平均特征向量了。
2.最近均值分類算法(Nearest-Mean-of-Examplars classification)
算法第七行在文首給出的講座中,使用的是\(\|φ(x)-μ_y\|^2\)。 emm... anyway,這不是重點,pass。
3.優化loss函數
機器學習歸根到底其實就是優化,那么loss函數如何設定才能解決災難性遺忘的問題呢?
本文的損失函數定義如下,由新數據分類loss和舊數據蒸餾loss組成。下面公式中的\(g_y(x_i)\)表示分類器,即\(g_y(x)=\frac{1}{1+e^{-{w_y^Tφ(x)}}}\)。
其實該想法其實是基於LWF這篇論文,LWF的loss函數如下:
結果
本文最終結果如下圖示,將iCaRL,fixed representation(feature extraction), fine-tuning和LWF進行了比較,可以看到iCaRL表現最好。
討論
需要說明的是iCaRL和LWF最大的不同點有如下:
- iCaRL在訓練新數據時仍然需要使用到舊數據,而LWF完全不用。所以這也就是為什么LWF表現沒有iCaRL好的原因,因為隨着新數據的不斷加入,LWF逐漸忘記了之前的數據特征。
- iCaRL提取特征的部分是固定的,只需要修改最后分類器的權重矩陣。而LWF是訓練整個網絡(下圖給出了LWF和fine-tuning以及feature extraction的示意圖)。
選取數據算法示意圖
