論文閱讀筆記《On First-Order Meta-Learning Algorithms》

核心思想

  本文是在MAML的思路上進一步改進,提出一種基於參數優化的小樣本學習算法Reptile。首先我們一起回憶一下MAML是如何進行元學習的,在之前的文章中,我們有提到MAML的訓練可以分爲兩個層次:內層優化和外層優化,內層優化就與普通的訓練一樣,假設網絡初始參數爲θ0\theta^0,在數據集AA上採用SGD的方式進行訓練後得到參數θ\theta'。如果是普通的訓練,那麼就會接着採樣一個數據集BB,然後以θ\theta'作爲初始參數繼續訓練了。MAML同樣採集一個數據集BB,然後用在數據集AA上訓練得到的模型fθf_{\theta'}處理數據集BB上的樣本,並計算損失。不同的是,MAML利用該損失計算得到的梯度對θ0\theta^0進行更新。θ1=θ0εθTiBLTi(fθ)\theta^1=\theta^0-\varepsilon\triangledown _{\theta}\sum_{\mathcal{T}_i\in B}\mathcal{L}_{\mathcal{T}_i}(f_{\theta'})  也就是說MAML的目標是訓練得到一個好的初始化參數θ\theta,使其能夠在處理其他任務時很快的收斂到一個較好的結果。在梯度計算過程中會涉及到二階導數計算,MAML利用一階導數近似方法(FOMAML)進行處理,發現結果相差並不大,但計算量會減少很多。回到本文,本文提出的算法就是在FOMAML,進一步簡化參數更新的方式,甚至連損失梯度都不需要計算了,直接利用θ0θ\theta^0-\theta'(這裏的符號使用的與原文不同,但表達含義相同)作爲梯度對參數進行更新,即θ1=θ0ε(θ0θ)\theta^1=\theta^0-\varepsilon(\theta^0-\theta')  可能有人會覺得這樣做,不是相當於退化成普通的訓練過程了嗎,因爲θ\theta'還是利用SGD方式得到的,然後讓θ0\theta^0沿着θ0θ\theta^0-\theta'的方向更新,就得到θ1\theta^1。如果說在訓練數據集AA中只有一個訓練樣本,或者說只經過一個batch的訓練,那麼本文的算法的確會退化爲普通的SGD訓練,但如果每個數據集都進行不止一個Batch的訓練,二者就不相同了。
在這裏插入圖片描述
  如上圖所示,本文在更新參數θ0\theta^0時,會在數據集AA上做多個Batch的計算得到最終的參數θ\theta'(也就是圖中的θ^m\hat{\theta}^m),然後再回到θ0\theta^0處,計算θ0θ\theta^0-\theta',並更新參數得到θ1\theta^1。而普通的SGD就不會回到θ0\theta^0處了,而是繼續以θ\theta'作爲初始值進行更新了。MAML,本文提出的算法(Reptile)和普通的SGD(Pre-train)方法的比較如下圖所示
在這裏插入圖片描述
  假設訓練集中包含兩個Batch,則對於Pre-train模型會沿着g1g_1方向更新,MAML會沿着g2g_2的方向更新,Reptile則會沿着g1+g2g_1+g_2的方向更新,看起來像是傳統方法和MAML結合的產物。作者還從數學的角度上,證明了Reptile與FOMAML在本質上是相同的,但是Reptile的計算效率和內存佔用明顯要優於FOMAML,原諒我才疏學淺,並沒有看懂證明過程,有興趣的讀者請閱讀原文。

創新點

  • 本文在MAML的基礎上提出一種更爲簡單的進行參數初始化的元學習算法,並從數學上證明了其與一階近似MAML的等價性

算法評價

  本文是一篇充滿學術氣息的文章,包含大量的數學證明,但其提出的算法卻是非常簡單的——直接用向量差作爲梯度,而且通過數學和實驗兩種方式證明了,本文提出的算法Reptile性能與MAML非常接近。但是作者同樣也發現,本文的算法雖然在分類任務中取得了較好的結果,但是在強化學習中,卻沒有MAML表現的那樣好,這也是一個值得探究的方向。這裏推薦臺灣大學李宏毅教授的講解視頻,他生動形象地介紹了MAML和Reptile算法,給了我很大的幫助和啓迪,B站視頻鏈接

如果大家對於深度學習與計算機視覺領域感興趣,希望獲得更多的知識分享與最新的論文解讀,歡迎關注我的個人公衆號“深視”。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章