文章目錄
前言
我將看過的增量學習論文建了一個github庫,方便各位閱讀地址
主要工作
論文提出了一種算法,以解決增量學習中的災難性遺忘問題,與iCaRL將特徵提取器的學習與分類器分開不同,本論文提出的算法通過引入新定義的loss以及finetuning過程,在有效抵抗災難性遺忘的前提下,允許特徵提取器與分類器同時學習。
算法介紹
總體流程
總體分爲四個流程
- 構建訓練數據
- 模型訓練
- finetuning
- 管理
步驟一:構建訓練數據
訓練數據由新類別數據與examplar構成。
設有箇舊類別,個新類別,每個訓練數據都有兩個標籤,第個訓練數據的標籤爲
- 使用onehot編碼的的向量
- 設舊模型爲,訓練數據爲,,爲一個維的向量
步驟二:模型訓練
模型可以選用常見的CNN網絡,例如ResNet32等,按照國際慣例,這一節會介紹distillation loss,作爲一篇被頂會接收的論文,自然不能免俗
loss函數介紹
符號約定
符號名 | 含義 |
---|---|
有個訓練數據 | |
含義查看上一節 | |
含義查看上一節 | |
新模型舊類別分支的輸出,爲一個的向量 | |
舊類別分支 | |
新類別分支 | |
新模型對於第個數據的輸出,爲一個的向量 |
Classification loss即交叉熵,如下:
其中
distillation loss的形式如下
其中
即讓模型儘可能的記住舊類別的輸出分佈。t是一個超參數,在本論文中,
個人疑問
distillation loss的作用是讓模型記住以往學習到的規律,相當於側面引入了舊數據集,從而抵抗類別遺忘。
直覺上來說,distillation loss應該只對舊類別數據進行計算,但是新類別數據的舊類別分支輸出仍用於計算distillation loss,論文對此給出的解釋是“To reinforce the old knowledge”
我認爲這種做法的出發點爲:舊模型對於新類別數據的輸出(經softmax處理),也是一種舊知識,也需要防止遺忘,因此,新模型對於新類別數據的舊類別輸出(經softmax處理),與舊模型對於新類別數據的輸出(經softmax處理)也要儘可能一致
步驟三:finetuning
使用herding selection算法,從新類別數據中抽取部分數據,構成與舊類別examplar大小相等的數據集,此時各類別數據之間類別平衡,利用該數據集,在小學習率下對模型進行微調,選用的loss函數應該是交叉熵。
步驟二使用類別不平衡的數據訓練模型,會導致分類器出現分類偏好,finetuning可以在一定程度上矯正分類器的分類偏好
步驟四:管理
論文給出了兩類方法
- Fixed number of samples:沒有內存上限,每個類別都有個數據
- Fixed memory size:內存上限爲
使用herding selection算法選擇新類別數據,構成新類別的
實驗
論文訓練模型使用了數據增強,具體方式如下:
每個實驗都進行了五次訓練,取平均準確率
實驗過程沒有太多有趣的地方,在此不做過多說明
Fixed memory size
Fixed number of samples
在CIFAR100上的結果如下
img/cls表示每個examplar中圖片的個數
Ablation studies
首先是選擇數據構建examplar的方法,論文比對了三類方法
- herding selection:平均準確率63.6%
- random selection:平均準確率63.1%
- histogram selection:平均準確率59.1%
上述三個選擇方法的解釋如下:
接下來論文比對了算法各部分對準確率提升的貢獻
上述模型的解釋如下
個人理解
災難性遺忘的本質是類別不平衡,模型在學習舊類別時,所使用的數據是充分的,引入知識蒸餾loss,就是儘可能保留舊數據上學習到的規律,在訓練時,相當於側面引入了舊數據。
論文在distillation loss的基礎上又引入了類別平衡條件下的finetuning,相當於進一步抵抗增量學習下類別不平衡的導致的分類器偏好問題,由此取得模型性能的提升。