論文閱讀筆記 連續學習中的EWC,DeepMind論文Overcoming catastrophic forgetting in neural networks


 

首先介紹下連續學習(Continuous Learning)吧。連續學習(Continuous Learning)又叫序列學習,顧名思義就是有順序的學習任務。

參照人類,我們在遇到一個新的問題時,除非是完全陌生的領域,都會或多或少的利用之前所學的知識或技能來幫助自己更快的學習,而不是從零開始;而且在學習完新的知識或技能后,並不會完全忘記之前學過的東西。更直觀的栗子:星星羽毛球打的賊溜,最近開始跟我們一起打籃球了,他學的就會比不怎么運動的東爺快,而且學完了並不會因此忘記了羽毛球怎么打。

人類是可以連續學習的。那么我們希望機器也有這個能力。

ProgressiveNN是這么解決這個問題的:

他們的方法簡單暴力:對所有的之前任務的網絡,保留並且fix,每次有一個新任務就新建一個網絡(一列)。

而為了能使用過去的經驗,他們同樣也會將這個任務的輸入輸入進所有之前的網絡,並且將之前網絡的每一層的輸出,與當前任務的網絡每一層的輸出一起輸入下一層。

每次有一個新的任務,就重新添加一列,然后將前幾列的輸出fuse到當前列來。

比如說,如果兩個任務的low level特征類似,則當前任務網絡中的前幾層可能完全沒有用處,只需要用之前任務的輸出就夠了。

但是一個很明顯的問題是,這個網絡不能學到自己的low level feature的網絡,然后使用之前網絡的high level決策。因為1,當low level不一樣的時候,將輸入輸入之前的網絡就不make sense了;更重要的是,當前列的輸入根本無法輸入進之前列的網絡,只復用高層網絡根本無從談起。

所以這里的限制就是,兩個任務需要有類似的low level feature。

而Pathnet可以說是progressive nn的進階版。

你可以把網絡中每一層都看作一個模塊(綠色方塊),然后把構建一個網絡看成搭積木。pathnet的想法就是復用積木。

一開始我們每一層都有N個候選模塊,對每一個potential的網絡,每一層可以使用k個模塊。然后我們隨機若干個網絡(也就是path,如何連接這些模塊),然后訓練若干episodes。訓練了之后,我們用遺傳算法,把不好的path都淘汰,留下好的path,然后對這些path進行變異,然后繼續訓練。最后我們就能獲得一個很好的path。(上圖,從圖1到圖4)

注意,這個算法本身就是可以是一個獨立的算法,用來訓練一個任務。

而這個算法如何拓展到連續學習呢。在訓練完第一個任務之后,我們將所有第一個任務path上的模塊的參數都固定,然后將所有其他的模塊重新初始化,然后像之前一樣的訓練。唯一的區別就是有些模塊已經固定死了。(上圖,圖5到圖9)

仔細一看,其實這跟progressive network非常類似,只是這里不再有列,而是不同的path。在pathnet的設定下,就不存在我之前所說無法訪問高層的問題了。對一個新的任務,我們可以使用新的底層,然后用之前任務的高層。

EWC其實也是類似的想法。對之前任務學到的參數,我們應該進行保留;區別在於,ewc(elastic weight consolidation)用的是彈性的保留。

很重要的一點是,這里和pathnet和progressive nn不一樣;EWC是使用一個網絡來做不同的任務(而不是多個column或多個path)

 

我們看着這張圖一步步來,首先最腦殘的連續學習的方法就是,我們先訓練了一個task1的網絡,然后直接在task2上finetune(上圖藍色)。但是這樣的問題就是,你學到了第二個任務之后,就就會基本忘記怎么做第一個任務了(這個就是catastrophic forgetting)。

然后你就想,那怎么辦呢,那我就設個限制吧,在第二個任務上更新網絡的時候,不能離第一個網絡的參數太遠,也就是相對於之前的網絡參數上加了l2 regularizaiton。(上圖綠色)

但是這樣還不夠好,然后就想到了。其實網絡中有些參數是沒有用的,有些參數是有用的,那我讓那些重要的參數不要變太多,就更新哪些不重要的參數就行了嘛(上圖紅色)。然后這就是這篇文章的算法。你可以認為,就是對之前任務重要的參數,learning rate特別低,而那些不重要的,learning rate就相對高。而這個重要程度,則是使用fisher information。

他們做了analysis,用fisher information precision很好,但是有recall,因為他們只用了fisher information matrix的對角線,而沒有考慮二元關系。

(上面這段摘自參考資料1的知乎專欄)

然后這個EWC,對應論文Overcoming catastrophic forgetting in neural networks就是我們今天的主角。思路大神羅若天已經講過了(上面的摘抄),如果還不明白可以去看論文或者看參考資料2,我這里主要記錄一下自己做的推導。因為論文里還是涉及了很多數學公式推導的,作為一個數學渣渣,我研究了好久…(是不是要被勸退了)。

論文中的公式1:

EWC的參照對象是SGD和加了相對previous task參數的L2正則。其核心思想是找到不同參數不同的重要性,對TaskA(Previous Task)重要的參數就更新幅度小一些,不重要的參數就可以多更新一些,這相對全部都加同樣約束的L2正則就有了先進之處。這個重要程度則用Fisher Information來表示。費雪信息是啥呢?沒關系我開始也不知道,后面需要用它的時候我會解釋。

回到公式1。我們如果從概率的視角來看神經網絡的訓練,其實就是求條件概率$p(\theta\vert \mathcal{D})$。這個條件概率可以通過$p(\theta)$和$p(\mathcal{D}\vert\theta)$求(貝葉斯法則)。加對數就得到了公式1。

這里論文說,Note that the log probability of the data given the parameters $logp(\theta)$和$p(\mathcal{D}\vert\theta)$ is simply the negative of the loss function for the problem at hand $-L(\theta)$。

為啥呢?

首先,$logp(\theta)$和$p(\mathcal{D}\vert\theta)$這玩意兒似乎沒有什么實際意義,所以不知道該咋求。所以我們需要找個東西去近似它,然后再求。那怎么近似呢?

我們看$logp(\theta)$和$p(\mathcal{D}\vert\theta)$的意義是啥。是給了$\theta$求數據集的分布。也就是說,如果$\theta$是對的,或者說在現有的$\theta$下,數據集分布越接近“正確”(現有$\theta$條件下的正確),概率就越大。或者反過來想,固定數據集,那么就是$\theta$越接近正確,這個概率就越大。(因為畢竟我們要求的是$\theta$,而條件概率$p(\mathcal{D}\vert\theta)$也可以被看做是$\theta$和D的多元函數)而$L(\theta)$的意義是這個$\theta$下的訓練損失,$\theta$越接近這個數據集下正確的那個值,損失就越小,加個負號,就反過來想。

那么這兩個東西的意義就是一致的了,於是就可以用這個損失去近似它。

然后論文提出了公式2,其中$D_A$,$D_B$是相互獨立的,從數據集D中抽取出來的。

(相互獨立意味着$p(A)p(B)=p(AB)$,$p(A\vert B)=p(A)$ 溫習下相互獨立和條件概率以及多個條件的條件概率?https://baike.baidu.com/item/%E6%9D%A1%E4%BB%B6%E6%A6%82%E7%8E%87)

於是有了公式2:

這個公式猛地有點懵逼,其實沒有那么難,只是作者的記法有些晦澀,跳躍性太大了,如果這么寫:

$\log p(\theta\vert \mathcal{D}_A, \mathcal{D}_B) = \log p(\mathcal{D}_B\vert \theta) + \log p(\theta\vert \mathcal{D}_A) - \log p(\mathcal{D}_B\vert \mathcal{D}_A)$

就相對容易明白一些了吧。D其實就是($D_A$,$D_B$)。

$p(\theta\vert D_A,D_B)=\frac{p(\theta,D_A,D_B)}{p(D_A,D_B)}=\frac{p(D_A)p(\theta\vert D_A)p(D_B\vert\theta,D_A)}{p(D_A)p(D_B\vert D_A)}=\frac{p(\theta\vert D_A)p(D_B\vert\theta)}{p(D_B)}$

其中最后一步$p(D_B\vert D_A)={p(D_B)$ $p(D_B\vert\theta,D_A)=p(D_B\vert\theta)$ 都是因為相互獨立。

是不是就推出來啦。

公式2合理可用,那么咋用呢?

首先$logp(D_B\vert\theta)$可以用$-\mathcal{L}_B(\theta)$近似,前面說過了。

$logp(D_B)$直接歸到常數里就好了。

$p(\theta\vert D_A)$咋辦呢。它基本沒法求,故要轉換為等價的可計算的東西后再去近似計算。

論文用了Diagonalized Laplace Approximation得到了公式3:

其中$F_i$是費舍爾信息矩陣的對角線元素。費舍爾信息矩陣是啥?Diagonalized Laplace Approximation是啥?

首先得學下(大神的話可以溫習下)拉普拉斯近似方法。

給指個明路:

https://www.cnblogs.com/hapjin/p/8848480.html

https://blog.csdn.net/wangjian1204/article/details/49667611

https://blog.csdn.net/unixtch/article/details/77603738

如果期間對泰勒展開(多維),海森矩陣,正態分布(多維)產生了疑問:

https://baike.baidu.com/item/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83 正太分布

https://www.zhihu.com/question/25627482 泰勒展開式是啥?為啥能近似

https://zhuanlan.zhihu.com/p/33316479  多元泰勒展開式

 https://www.jianshu.com/p/7bf1d37751b3 梯度,雅各比矩陣,海森矩陣

https://www.cnblogs.com/emanlee/archive/2011/08/03/2126260.html 海森Hessian矩陣

費舍爾信息,費舍爾信息矩陣又是啥?

https://blog.csdn.net/lanran2/article/details/77995062  費舍爾信息為啥可以含有信息

https://www.zhihu.com/question/26561604  定義過程

是不是還沒明白,看看wiki百科吧  https://en.wikipedia.org/wiki/Fisher_information

(費舍爾信息這塊兒還有些推導需要整理一下)

首先,我們知道,信息量是用樣本發生的概率來衡量的($-logp_A$)。一個事件發生的概率越大,那么它的信息量就越小,說明我們可以在這條樣本上學習到的東西就越少。相反如果一個事件發生的概率很小,那么我們可以認為該樣本攜帶了很多信息。

對於隨機變量$X~f(X|\theta)$,其似然函數為:

當參數$\theta$取到的值接近准確值時,似然函數的值應該很大,所以當參數w取到准確值時,似然函數的值應該取到最大值,或者(對數)似然函數的一階導數為0。

那么,(為了方便,下面w和$\theta$混用了)其對數似然函數(省略求和符號)$log^{'}f(x|w) = \frac{{\partial{logf(x|w)}}}{\partial{w}} = \frac{{f(x|w)^{'}}}{f(x|w)}$

如果log′(x|w)非常接近於0,那么我們基本學習不到太多跟參數w有關的知識,換句話說模型基本不會更新了;相反,如果|log′(x|w)|很大,那么樣本就提供了比較多的關於參數w的信息。因此,我們可以用|log′(x|w)|的平方來衡量提供的信息(information)。

這個log likelihood的一階導數也叫,Score function :
S(\bold{X};\theta) = \sum_{i=1}^n \frac{\partial log f(X_i;\theta)}{\partial \theta}

那么Fisher Information,用I(\theta)表示,的定義就是這個Score function的二階矩(second moment)I(\theta) = E[S(X;\theta)^2]

其中,E[S(\bold{X};\theta)]= 0。因為

所以I(\theta) = E[S(X;\theta)^2]-E[S(X;\theta)]^2 = Var[S(X;\theta)]

If log f(xθ) is twice differentiable with respect to θ, and under certain regularity conditions,[4] then the Fisher information may also be written as[5]

{\displaystyle {\mathcal {I}}(\theta )=-\operatorname {E} \left[\left.{\frac {\partial ^{2}}{\partial \theta ^{2}}}\log f(X;\theta )\right|\theta \right],}{\displaystyle {\mathcal {I}}(\theta )=-\operatorname {E} \left[\left.{\frac {\partial ^{2}}{\partial \theta ^{2}}}\log f(X;\theta )\right|\theta \right],}

since

{\displaystyle {\frac {\partial ^{2}}{\partial \theta ^{2}}}\log f(X;\theta )={\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}-\left({\frac {{\frac {\partial }{\partial \theta }}f(X;\theta )}{f(X;\theta )}}\right)^{2}={\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}-\left({\frac {\partial }{\partial \theta }}\log f(X;\theta )\right)^{2}}{\displaystyle {\frac {\partial ^{2}}{\partial \theta ^{2}}}\log f(X;\theta )={\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}-\left({\frac {{\frac {\partial }{\partial \theta }}f(X;\theta )}{f(X;\theta )}}\right)^{2}={\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}-\left({\frac {\partial }{\partial \theta }}\log f(X;\theta )\right)^{2}}

and

{\displaystyle \operatorname {E} \left[\left.{\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}\right|\theta \right]={\frac {\partial ^{2}}{\partial \theta ^{2}}}\int f(x;\theta )\,dx=0.}{\displaystyle \operatorname {E} \left[\left.{\frac {{\frac {\partial ^{2}}{\partial \theta ^{2}}}f(X;\theta )}{f(X;\theta )}}\right|\theta \right]={\frac {\partial ^{2}}{\partial \theta ^{2}}}\int f(x;\theta )\,dx=0.}

扔了一堆鏈接,有空整理一下。

然后知道了Laplace Approximation,為啥論文里用的是$F_i$呢,似乎沒有用別的偏導啊?

因為 EWC uses a diagonalised Laplace approximation, which ignores the off-diagonal entries of the Hessian and keeping only diagonal ones. Applied to neural networks, the diagonal assumption is the same as saying that the parameters of the network have completely independent influence on the loss function (which is of course not true, but perhaps true enough).

這個Diagonalized Laplace Approximation是啥,我也沒查到更多信息,姑且現在這么用着吧。就當作是 Laplace Approximation的簡化版(近似的近似)。

 

(先把自己的推導貼上來吧,有空再整理)

 道理我都懂了,那么對於

 

這個費舍爾信息又該咋求呢?

看看Continuous那篇論文里說的meta-learner的訓練的那篇論文里有沒有答案吧。

估計,是用TaskA的負損失-Loss去近似$p(\theta_A)$,即用TaskA的負損失對參數$p(\theta_A)$求二階偏導,進而得到費舍爾信息/海森矩陣。

 

 

參考資料:

1  https://zhuanlan.zhihu.com/p/25893683   連續學習DeepMind三連

2  https://blog.csdn.net/u010195841/article/details/69257897  EWC筆記

3  https://github.com/ariseff/overcoming-catastrophic  論文EWC復現

4  https://www.inference.vc/comment-on-overcoming-catastrophic-forgetting-in-nns-are-multiple-penalties-needed-2/  超級大牛的Comment,我的主要參考文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM