Abstract
持續學習背后的主流范式是使模型參數適應非平穩數據分布,其中災難性遺忘是核心挑戰。典型方法依賴于排練緩沖區或測試時已知的任務標識來檢索已學知識并解決遺忘問題,而這項工作提出了一種持續學習的新范式,旨在訓練一個更簡潔的記憶系統,且在測試時無需訪問任務標識。我們的方法學習動態提示(L2P)預訓練模型,以便在不同任務轉換下順序學習任務。在我們提出的框架中,提示是可學習的小參數,保存在記憶空間中。目標是優化提示以指導模型預測,并在保持模型可塑性的同時,顯式管理任務不變和特定于任務的知識
。我們在流行的圖像分類基準測試下,針對不同具有挑戰性的持續學習設置進行了全面實驗,L2P始終優于先前的最先進方法。令人驚訝的是,即使沒有排練緩沖區,L2P也能取得與基于排練的方法相媲美的結果,并且可直接應用于具有挑戰性的任務無關持續學習。
Introduction
與在獨立同分布(i.i.d.)數據上進行訓練的普通監督學習不同,持續學習旨在解決在非平穩數據分布上訓練單個模型的問題,其中不同的分類任務是按順序呈現的。然而,由于該模型在學習周期的單個階段中僅能訪問當前數據,它易于對當前可用數據過擬合,并且由于災難性遺忘,在先前數據上會出現性能下降的情況。
先前工作的局限性在持續學習中提出了關鍵問題[13, 16]:(1) 情景記憶的形式能否超越對過往數據的緩沖,發展為更智能、簡潔的情景記憶系統?(2) 如何在不知道任意樣本的任務身份的情況下,自動為其選擇相關的知識組件?
為了回答第一個問題,我們從基于提示的學習(提示法)[29] 的最新進展中汲取靈感,這是自然語言處理(NLP)領域的一種新的遷移學習技術。提示法通過包含額外特定任務信息的模板化或可學習的提示詞來設計模型文本輸入,以便預訓練語言模型能夠處理參數化輸入,從而執行特定于提示的預測 [25, 27, 53]。直觀地說,基于提示的學習將下游任務的學習從直接調整模型權重重新規劃為設計提示,這些提示 “指導” 模型有條件地執行任務。提示編碼了特定任務的知識,并且比普通的微調更能有效地利用預訓練的凍結模型。因此,在持續學習的背景下,利用提示來學習知識,并進一步存儲所學知識是很有前景的。
然而,目前尚不清楚如何直接應用提示來解決持續學習中上述的第二個問題。一方面,如果我們按順序針對不同任務訓練不同的提示,那么在測試時,仍需要知道任務標識,以便使用合適的特定任務提示進行預測。另一方面,作為一種遷移學習技術,提示的目標是讓凍結的預訓練模型在下游任務上各自表現良好,而不是按順序表現良好。因此,如果我們改為對所有任務使用單一共享提示,災難性遺忘的問題可能仍然存在。
為此,我們提出了一種新的持續學習方法,稱為持續學習的提示學習(L2P),它與流行的基于排練的方法相互獨立,并且適用于不知道任務身份或邊界的實際持續學習場景。圖1對我們的方法與典型的持續學習方法進行了對比概述。L2P利用預訓練模型的代表性特征;然而,在持續學習過程中,L2P并不對參數進行微調,而是保持預訓練模型不變,轉而學習一組提示,這些提示可以動態指導模型解決相應的任務。具體來說,提示信息以鍵值對的形式組織在一個名為提示池的共享內存空間中,并且我們設計了一種查詢機制,以便根據實例級輸入特征動態查找與任務相關的提示信息子集。提示池與監督損失聯合優化,確保共享提示對用于知識遷移的共享知識進行編碼,而非共享提示對有助于維持模型可塑性的特定任務知識進行編碼。我們的設計明確地將共享知識和特定任務知識解耦,從而在很大程度上減少了優化過程中特定任務知識之間的干擾,實現了最小化的災難性遺忘,且無需使用重放緩沖區。實例級查詢機制消除了了解任務身份或邊界的必要性,使最具挑戰性但研究不足的任務無關持續學習成為可能。然后,將選定的提示添加到輸入嵌入之前(圖2),這會隱式地將與任務相關的指令添加到預訓練模型中,以便模型回憶起最相關的特征來執行相應的任務。
Learning to Prompt
From prompt to prompt pool
引入提示池有三個動機。首先,測試時的任務身份是未知的,因此訓練與任務無關的提示是不可行的。其次,即使與任務無關的提示在測試時可以得知,它也會阻礙相似任務之間可能的知識共享。第三,雖然為所有任務學習單一共享提示的簡單方法能夠實現知識共享,但它仍然會導致嚴重的遺忘問題。理想情況下,人們希望學習一種模型,該模型能夠在任務相似時共享知識,而在其他情況下保持知識的獨立性。因此,我們建議使用提示池來存儲編碼后的知識,這些知識可以靈活地組合起來作為模型的輸入。
提示池被定位為
P = P 1 , P 2 , P 3 . . . , P M , P = {P_1,P_2,P_3...,P_M} , P=P1?,P2?,P3?...,PM?,
其中, P j ∈ R L p × D P_j \in R^{L_p \times D} Pj?∈RLp?×D是單個prompt,Lp為token長度,embedding size D與x相同。
我們分別令 x x x和 x e = f e ( x ) x_e = f_e(x) xe?=fe?(x)為輸入和對應的embedding feature。請注意,我們在符號表示中省略了(x)的任務索引(t),因為我們的方法對于與任務無關的設置具有足夠的通用性。
x p = [ P s 1 ; . . . . ; P s N ; x e ] , 1 < = N < = M x_p = [P_{s1};....;P_{sN};x_e], 1<=N<=M xp?=[Ps1?;....;PsN?;xe?],1<=N<=M
其中;表示沿標記長度維度的連接。提示可以自由組合,因此它們可以聯合編碼知識(例如視覺特征或任務信息),以供模型處理。我們希望通過實例級別的提示組合來實現更細粒度的知識共享方案:相似的輸入傾向于共享更多的通用
Instance-wise prompt query
我們設計了一種基于鍵值對的查詢策略,以便為不同的輸入動態選擇合適的提示。這種查詢機制與其他領域的方法有一些共同的設計原則,例如可微神經計算機[14]和矢量量化變分自編碼器(VQ-VAE)[41],它們具有外部存儲器,用于出于不同目的進行維護和使用。
我們將每個提示與一個可學習的鍵相關聯,把提示作為值:
we denote the set of all keys by
K = { k i } i = 1 M \mathbf{K} = \left\{ \mathbf{k}_i \right\}_{i=1}^{M} K={ki?}i=1M?
理想情況下,我們希望讓輸入實例本身通過查詢-鍵匹配來決定選擇哪些提示。為此,我們引入查詢函數q
將輸入x編碼到和key相同的維度。 此外,q 對于不同任務應該是一個確定性函數,并且沒有可學習參數。我們直接將整個預訓練模型作為一個固定的特征提取器,以獲取查詢特征:q(x) = f(x)0,:.
Denote γ : R D k × R D k → R \gamma:R^{D_k} \times R^{D_k} \rightarrow R γ:RDk?×RDk?→R作為一個對查詢與提示鍵之間的匹配進行評分的函數。(我們發現余弦距離效果很好)。給定輸入x,我們使用q(x)通過簡單地求解目標來查找前N個鍵:
其中Kx代表從K中為專門為x選擇的前N個key的子集。請注意,這種鍵值策略的設計將查詢機制學習和提示學習過程解耦,實驗表明這一點至關重要。此外,對提示的查詢是以實例方式進行的,這使得整個框架與任務無關,也就是說,該方法在訓練期間無需明確的任務邊界,在測試時也無需任務標識即可運行。
可選擇地使提示選擇多樣化。
雖然我們的方法不需要任務邊界信息,但在現實場景和實驗數據集中,任務轉換通常是離散的,因此在訓練時任務邊界是已知的。我們發現,在我們的框架中加入這樣一個先驗知識,可以幫助模型學習到更好的特定任務提示,特別是當任務具有高度多樣性時。為此,我們提出了一種簡單的擴展方法,以添加任務邊界先驗,這對于L2P而言是可選的。
在任務t的訓練過程中,我們維護一個提示頻率表Ht = [h1, h2, ··· , hM],其中每個條目表示在任務t - 1之前提示Pi被選中的歸一化頻率。
為鼓勵查詢機制選擇多樣化的提示,我們修改了公式3為
h s i h_{si} hsi?對頻繁使用的提示進行懲罰,避免其被選中,以鼓勵多樣化選擇。公式4只在訓練中適用,在測試時間,公式3被使用。