持續學習的目的是模仿人類在連續任務中持續累積知識的能力,其主要挑戰是在持續學習新任務後如何保持對先前所學任務的表現,即避免災難性遺忘(catastrophic forgetting)。持續學習與多任務學習(multi-task learning)的差別在於:後者在同一時間可以得到所有任務,模型可以同時學習所有任務;而在持續學習中任務 一個一個出現,模型在某一時刻只能學習一個任務的知識,並且在學習新知識的過程中避免遺忘舊知識。
南加州大學聯合Google Research 提出了一種解決持續學習(continual learning)的新方法##通道式輕量級重編碼(Channel-wise Lightweight Reprogramming [CLR]):透過在固定任務不變的backbone 中加入可訓練的輕量級模組,對每層通道的特徵圖進行重編程,使得重編程過的特徵圖適用於新任務。這個可訓練的輕量級模組僅佔整個backbone的0.6%,每個新任務都可以有自己的輕量級模組,理論上可以持續學習無窮多新任務而不會出現災難性遺忘。文已刊登於 ICCV 2023。
#通常解決持續學習的方法主要分為三大類:基於正規化的方法、動態網路方法和重播方法。
本文提出的CLR方法是一種動態網路方法。下圖表示了整個流程的流程:研究者使用與任務無關的不可變部分作為共享的特定任務參數,並添加特定任務參數對通道特徵進行重編碼。同時,為了盡可能減少每個任務的重編碼參數的訓練量,研究者只需調整模型中內核的大小,並學習從backbone到特定任務知識的通道線性映射來實現重編碼。在持續學習中,每個新任務都可以訓練得到一個輕量級模型;這種輕量級模型所需訓練的參數很少,即使任務很多,總共需要訓練的參數相對於大模型來說也很小,並且每個輕量級模型都能達到很好的效果
########################### #持續學習專注於從資料流中學習的問題,即透過特定的順序學習新任務,不斷擴展其已獲得的知識,同時避免遺忘先前的任務,因此如何避免災難性遺忘是持續學習研究的主要問題。研究者從以下三個面向來考慮:######
#通道式輕量級重編碼先用一個固定的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參數和不可訓練的backbone的模型可以依序學習每個任務。在測試時,研究者假設有一個任務預測器可以告訴模型測試圖片屬於哪個任務,然後固定的backbone和對應的任務專用CLR參數可以進行最終預測。由於CLR具有絕對參數隔離的特性(每個任務對應的CLR層參數都不一樣,而共享的backbone不會改變),因此CLR不會受到任務數量的影響
資料集:研究者使用影像分類作為主要任務,實驗室收集了53 個影像分類資料集,有大約180 萬張圖片和1584 個種類。這 53 個資料集包含了 5 個不同的分類目標:物件識別,風格分類,場景分類,計數和醫療診斷。
研究者選擇了13個基線,可以大致分為3個類別
還有一些不屬於持續學習的基線,例如SGD 和SGD-LL。 SGD 學習每個任務時對整個網路進行微調;SGD-LL 是一個變體,它對所有任務都使用一個固定的 backbone 和一個可學習的共享層,其長度等於所有任務最大的種類數量。
實驗一:第一個任務的準確率
#為了評估所有方法在克服災難性遺忘的能力,研究者追蹤了學習新任務後每個任務的準確性。如果某個方法有災難性遺忘,那麼在學習新任務後,同一任務的準確率就會很快下降。一個好的持續學習演算法可以在學習新任務後保持原有的表現,這意味著舊任務應受到新任務的影響最小。下圖展示了本文方法從學完第 1 到第 53 個任務後第 1 個任務的準確率。整體而言,本文方法可以保持最高的準確率。更重要的是它很好地避免了災難性遺忘並保持和原始訓練方式得到的相同準確率無論持續學習多少個任務。
第二個實驗:完成所有任務後的平均準確率學習#
下圖所有方法在學完全部任務後的平均準確率。平均準確率反映了持續學習方法的整體表現。由於每個任務的難易度不同,當增加一項新任務時,所有任務的平均精確度可能會上升或下降,這取決於增加的任務是簡單還是困難。
首先,讓我們來分析一下參數與計算成本
對於持續學習,雖然獲得更高的平均準確率非常重要,但是一個好的演算法也希望可以最大限度地減少對額外網路參數的要求和計算成本。 "新增任務的額外參數" 表示與原始 backbone 參數量的百分比。本文以 SGD 的計算成本為單位,其他方法的計算成本則依 SGD 的成本進行歸一化處理。
重寫內容:不同骨幹網路的影響分析
本文方法透過在相對多樣化的資料集上使用監督式學習或自監督學習的方法來訓練得到預訓練模型,從而作為與任務無關的不變參數。為了探討不同預訓練方法的影響,本文選擇了四種不同的、與任務無關的、使用不同資料集和任務訓練出來的預訓練模型。對於監督式學習,研究者使用了在 ImageNet-1k 和 Pascal-VOC 在影像分類上的預訓練模型;對於自監督學習,研究者使用了 DINO 和 SwAV 兩種不同方法得到的預訓練模型。下表展示了使用四種不同方法得到預訓練模型的平均準確率,可以看出來無論哪種方法最後的結果都很高(註:Pascal-VOC 是一個比較小的數據集,所以準確率相對低一點),並且對不同的預訓練backbone 具有穩健性。
#以上是優化學習效率:透過0.6%額外參數將舊模型遷移至新任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!