輕量級持續學習: 0.6%額外參數把舊模型重編程到新任務
持續學習的目的是模仿人類在連續任務中持續積累知識的能力,其主要挑戰是在持續學習新任務后如何保持對以前所學任務的表現,即避免災難性遺忘(catastrophic forgetting)。持續學習和多任務學習(multi-task learning)的區別在于:后者在同一時間可以得到所有任務,模型可以同時學習所有任務;而在持續學習中任務 一個一個出現,模型在某一時刻只能學習一個任務的知識,并且在學習新知識的過程中避免遺忘舊知識。
南加州大學聯合 Google Research 提出了一種解決持續學習(continual learning)的新方法通道式輕量級重編碼(Channel-wise Lightweight Reprogramming [CLR]):通過在固定任務不變的 backbone 中添加可訓練的輕量級模塊,對每層通道的特征圖進行重編程,使得重編程過的特征圖適用于新任務。這個可訓練的輕量級模塊僅僅占整個backbone的0.6%,每個新任務都可以有自己的輕量級模塊,理論上可以持續學習無窮多新任務而不會出現災難性遺忘。文已發表在 ICCV 2023。
- 論文地址: https://arxiv.org/pdf/2307.11386.pdf
- 項目地址: https://github.com/gyhandy/Channel-wise-Lightweight-Reprogramming
- 數據集地址: http://ilab.usc.edu/andy/skill102
通常解決持續學習的方法主要分為三大類:基于正則化的方法、動態網絡方法和重放方法。
- 基于正則化的方法是模型在學習新任務的過程中對參數更新添加限制,在學習新知識的同時鞏固舊知識。
- 動態網絡方法是在學習新任務的時候添加特定任務參數并對舊任務的權重進行限制。
- 重放方法假設在學習新任務的時候可以獲取舊任務的部分數據,并與新任務一起訓練。
本文提出的CLR方法是一種動態網絡方法。下圖表示了整個過程的 pipeline:研究者使用與任務無關的不可變部分作為共享的特定任務參數,并添加特定任務參數對通道特征進行重編碼。與此同時為了盡可能地減少訓練每個任務的重編碼參數,研究者只需要調整模型中內核的大小,并學習從 backbone 到特定任務知識的通道線性映射來實現重編碼。在持續學習中,對于每一個新任務都可以訓練得到一個輕量級模型;這種輕量級的模型需要訓練的參數很少,即使任務很多,總共需要訓練的參數相對于大模型來說也很小,并且每一個輕量級模型都可以達到很好的效果。
研究動機
持續學習關注于從數據流中學習的問題,即通過特定的順序學習新任務,不斷擴展其已獲得的知識,同時避免遺忘以前的任務,因此如何避免災難性遺忘是持續學習研究的主要問題。研究者從以下三個方面考慮:
- 重用而不是重學:對抗重編碼(Adversarial Reprogramming [1])是一種通過擾動輸入空間,在不重新學習網絡參數的情況下,"重編碼" 一個已經訓練并凍結的網絡來解決新任務的方法。研究者借用了 “重編碼” 的思想,在原始模型的參數空間而不是輸入空間進行了更輕量級但也更強大的重編程。
- 通道式轉換可以連接兩個不同的核:GhostNet [2] 的作者發現傳統網絡在訓練后會得到一些相似的特征圖,因此他們提出了一種新型網絡架構 GhostNet:通過對現有特征圖使用相對廉價的操作(比如線性變化)生成更多的特征圖,以此來減小內存。受此啟發,本文方法同樣使用線性變換生成特征圖來增強網絡,這樣就能以相對低廉的成本為各個新任務量身定制。
- 輕量級參數可以改變模型分布:BPN [3] 通過在全連接層中增加了有益的擾動偏差,使網絡參數分布從一個任務轉移到另一個任務。然而 BPN 只能處理全連接層,每個神經元只有一個標量偏置,因此改變網絡的能力有限。相反研究者為卷積神經網絡(CNN)設計了更強大的模式(在卷積核中增加 “重編碼” 參數),從而在每項新任務中實現更好的性能。
方法敘述
通道式輕量級重編碼首先用一個固定的 backbone 作為一個任務共享的結構,這可以是一個在相對多樣性的數據集(ImageNet-1k, Pascal VOC)上進行監督學習的預訓練模型,也可以是在無語義標簽的代理任務上學習的自監督學習模型(DINO,SwAV)。不同于其他的持續學習方法(比如 SUPSUP 使用一個隨機初始化的固定結構,CCLL 和 EFTs 使用第一個任務學習后的模型作為 backbone),CLR 使用的預訓練模型可以提供多種視覺特征,但這些視覺特征在其他任務上需要 CLR 層進行重編碼。具體來說,研究者利用通道式線性變化(channel-wise linear transformation)對原有卷積核產生的特征圖像進行重編碼。
圖中展示了 CLR 的結構。CLR 適用于任何卷積神經網絡,常見的卷積神經網絡由 Conv 塊(Residual 塊)組成,包括卷積層、歸一化層和激活層。
研究者首先把預訓練的 backbone 固定,然后在每個固定卷積塊中的卷積層后面加入通道式輕量級重編程層 (CLR 層)來對固定卷積核后的特征圖進行通道式線性變化。
給定一張圖片 X,對于每個卷積核 ,可以得到通過卷積核的特征圖 X’,其中每個通道的特征可以表示為
;之后用 2D 卷積核來對 X’的每個通道
進行線性變化,假設每個卷積核
對應的線性變化的卷積核為
,那么可以得到重編碼后的特征圖
。研究者將 CLR 卷積核的初始化為同一變化核(即對于的 2D 卷積核,只有中間參數為 1,其余都為 0),因為這樣可以使得最開始訓練時原有固定 backbone 產生的特征和加入 CLR layer 后模型產生的特征相同。同時為了節約參數并防止過擬合,研究者并不會在的卷積核后面加入 CLR 層,CLR 層只會作用在的卷積核后。對于經過 CLR 作用的 ResNet50 來說,增加的可訓練參數相比于固定的 ResNet50 backbone 只占 0.59%。
對于持續學習,加入 CLR 的模型(可訓練的 CLR 參數和不可訓練的 backbone)可以依次學習每個任務。在測試的時候,研究者假設有一個 task oracle 可以告訴模型測試圖片屬于哪個任務,之后固定的 backbone 和相對應的任務專有 CLR 參數可以進行最終預測。由于 CLR 具有絕對參數隔離的性質(每個任務對應的 CLR 層參數都不一樣并且共享的 backbone 不會變化),因此 CLR 不會受到任務數量的影響。
實驗結果
數據集:研究者使用圖像分類作為主要任務,實驗室收集了 53 個圖像分類數據集,有大約 180 萬張圖片和 1584 個種類。這 53 個數據集包含了 5 個不同的分類目標:物體識別,風格分類,場景分類,計數和醫療診斷。
基線:研究者選擇了 13 種基線,大概可以分成 3 個種類
- 動態網絡:PSP,SupSup,CCLL,Confit,EFTs
- 正則化:EWC,online-EWC,SI,LwF
- 重放:ER,DERPP
還有一些不屬于持續學習的基線,比如 SGD 和 SGD-LL。SGD 學習每個任務時對整個網絡進行微調;SGD-LL 是一個變體,它對所有任務都使用一個固定的 backbone 和一個可學習的共享層,其長度等于所有任務最大的種類數量。
實驗一:第一個任務的準確率
為了評估所有方法在克服災難性遺忘的能力,研究者跟蹤了學習新任務后每個任務的準確性。如果某個方法存在災難性遺忘,那么在學習新任務后,同一任務的準確率就會很快下降。一個好的持續學習算法可以在學習新任務后保持原有的表現,這就意味著舊任務應受到新任務的影響最小。下圖展示了本文方法從學完第 1 到第 53 個任務后第 1 個任務的準確率。總體而言,本文方法可以保持最高的準確率。更重要的是它很好地避免了災難性遺忘并保持和原始訓練方式得到的相同準確率無論持續學習多少個任務。
實驗二:學習所有任務后的平均準確率
下圖所有方法在學完全部任務后的平均準確率。平均準確率反映了持續學習方法的整體表現。由于每個任務的難易程度不同,當增加一項新任務時,所有任務的平均精確度可能會上升或下降,這取決于增加的任務是簡單還是困難。
分析一:參數和計算成本
對于持續學習,雖然獲得更高的平均準確率非常重要,但是一個好的算法也希望可以最大限度地減少對額外網絡參數的要求和計算成本。"添加一項新任務的額外參數" 表示與原始 backbone 參數量的百分比。本文以 SGD 的計算成本為單位,其他方法的計算成本按 SGD 的成本進行歸一化處理。
分析二:不同 backbone 的影響
本文方法通過在相對多樣化的數據集上使用監督學習或自監督學習的方法來訓練得到預訓練模型,從而作為與任務無關的不變參數。為了探究不同預訓練方法的影響,本文選擇了四種不同的、與任務無關的、使用不同數據集和任務訓練出來的預訓練模型。對于監督學習,研究者使用了在 ImageNet-1k 和 Pascal-VOC 在圖像分類上的預訓練模型;對于自監督學習,研究者使用了 DINO 和 SwAV 兩種不同方法得到的預訓練模型。下表展示了使用四種不同方法得到預訓練模型的平均準確率,可以看出來無論哪種方法最后的結果都很高(注:Pascal-VOC 是一個比較小的數據集,所以準確率相對低一點),并且對不同的預訓練 backbone 具有穩健性。