如何避免“災難性遺忘”?
我讀了 Michael Honiball(Spacy 的創建者)的這篇文章,他在其中談到了*“災難性遺忘”*問題。
在這裡他說,當我們想要微調預訓練模型以添加新標籤或糾正某些特定錯誤時,它可能會引入*“災難性遺忘”*問題(失去其普遍性)。為了解決這個問題,他提出了一種稱為偽排練的技術。他說要使用初始模型預測一些示例,並通過微調數據將它們混合,並將其用作模型的目標。
這是否意味著我使用代替由初始模型生成,將其與新模型混合新獲得的數據點的值並用它來訓練我的模型?
我對麼?有人可以詳細說明嗎?
災難性遺忘是神經網絡中的一個固有問題。來自維基百科,
(災難性遺忘)是“敏感性-穩定性”困境或“穩定性-可塑性”困境的根本表現。具體來說,這些問題是指能夠製造一個對新信息敏感但不會被新信息干擾的人工神經網絡的問題。查找表和聯結網絡位於穩定性可塑性譜的對立面。前者在存在新信息的情況下保持完全穩定,但缺乏從新輸入中概括,即推斷一般原則的能力。
**什麼是災難性遺忘?**讓我們考慮兩個任務:任務 A 和任務 B。現在,假設我們使用的預訓練模型在任務 A 上已經相當出色(學習權重),並且我們希望“微調”它以使其也適合任務 B。通常的做法是獲取在任務 A 上訓練的模型的權重,並將它們用作任務 B 訓練的初始化。這很好用在任務 B 是任務 A 的“子任務”的應用程序中(例如,任務 B 是檢測眼鏡,任務 A 是檢測面部)。當 B 不是 A 的子任務時,擔心會發生災難性遺忘:本質上,網絡將使用之前為任務 A 優化過的相同神經元來預測任務 B。在這樣做時,它將完全失去正確分類任務 A 實例的能力。您實際上可以自己進行實驗:您可以構建一個小型網絡,可以判斷 MNIST 圖像是 5 還是不是 5,並測量它在此任務中的準確性;如果您繼續對該模型進行微調以判斷 MNIST 圖像是否為 4,您會注意到最終模型在原始任務(識別 5)上的準確性已經惡化。
**一個天真的解決方案。**災難性遺忘的簡單解決方案是不僅將微調模型的權重初始化為,但還添加正則化:當微調模型的解遠離時懲罰它. 從本質上講,這意味著目標將是為任務 B 找到仍然相似的最佳解決方案,任務 A 的解決方案。我們之所以稱這是一種幼稚的方法,是因為它通常不能很好地工作。神經網絡學習到的函數往往非常複雜且遠非線性,因此參數值的微小變化(即接近)仍然會導致非常不同的結果(即與)。因為這是我們關心的結果,所以這對我們不利。
偽排練。更好的方法是嘗試在任務 B 上表現出色,同時對以下給出的答案給出相似的答案 . 好處是這種方法很容易實現:一旦你學會了,我們可以使用該模型生成無限數量的“標記”示例. 然後,在訓練微調模型時,我們將在為任務 B 標記的示例和以下形式的示例之間交替. 您可以將後者視為“修訂練習”,以確保我們的網絡在學習處理任務 B 的同時不會失去處理任務 A 的能力。
一個更好的方法:添加內存。作為人類,我們既擅長使用新的例子進行概括(可塑性),又擅長記住非常罕見的事件,或者保持我們有一段時間沒有使用的技能(穩定性)。正如我們所知,在許多方面,實現與深度神經網絡類似的唯一方法是將某種形式的“記憶”融入其中。這超出了您的問題範圍,但它是一個有趣且活躍的研究領域,所以我想提一下。請參閱此示例最近的工作:學習記住稀有事件。