【筆記】Reptile-一階元學習算法

目錄html

論文信息算法

Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018.數組

1、摘要

本文主要考慮元學習問題,即存在一個任務分佈(a distribution of tasks),從這個分佈中抽取許多任務來訓練元學習模型(或代理),使其在處理從這個分佈中抽取的之前從未遇到過的任務時能更快的學習(即表現得更好)。網絡

本文經過分析一系列僅在元學習更新(meta-learning update)過程當中使用一階微分(first-order derivation)就能在新任務上實現快速微調的關於參數初始化的算法,驗證了一階元學習算法在一些完善的few-shot分類基準上的有效性,同時還對這些算法的可行性進行了理論分析。數據結構

這些一階元學習算法主要包括MAML的近似表示(忽略二階微分)——first-order MAML(簡記:FOMAML)以及本文提出的Reptile算法。機器學習

2、背景

2.1 雅可比矩陣(Jacobi Matrix)

是函數的一階偏導數以必定方式排列成的矩陣,其體現了一個可微方程與給出點的最優線性逼近。ide

  • 假設\(F:\mathbb{R}_\mathrm{n}\rightarrow \mathbb{R}_\mathrm{m}\)是一個從n維歐氏空間映射到到m維歐氏空間的函數。這個函數由m個實函數組成:

\[ F=\begin{cases} f_1(x_1,\cdots,x_n)\\ f_2(x_1,\cdots,x_n)\\ \cdots\\ f_m(x_1,\cdots,x_n)\\ \end{cases} \]函數

  • 這些函數的偏導數(若是存在)能夠組成一個m行n列的矩陣,這個矩陣就是所謂的雅可比矩陣:

\[ J = [\frac{\partial f}{\partial x_1} \cdots \frac{\partial f}{\partial x_n}] =\begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \]性能

2.2 泰勒公式

\[ \begin{array}{*{20}{l}} {f{ \left( {x} \right) }{\begin{array}{*{20}{l}} {=f{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }+{f \prime }{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }+\frac{{f '' { \left( {\mathop{{x}}\nolimits_{{0}}} \right) }}}{{2!}}\mathop{{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }}\nolimits^{{2}}+ \cdots +\frac{{\mathop{{f}}\nolimits^{{ \left( {n} \right) }}{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }}}{{n!}}\mathop{{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }}\nolimits^{{n}}+\mathop{{R}}\nolimits_{{n}}{ \left( {x} \right) }}\\ \end{array}}}\\ \end{array} \]學習

2.3 領頭階(Leading Order)

一個解析表達式按照泰勒公式成無窮級數(或者多項式),根據所研究的定義域,每個展開項所貢獻的大小是不會都相同的,根據它們對解析表達式精確值的貢獻大小將這些項分門別類地叫作領頭階、次領頭階、次次領頭階…

2.4 轉導與概括

摘自:維基百科(https://en.wikipedia.org/wiki/Transduction_(machine_learning)

  • 轉導(Transduction):從觀察到的特定(訓練)案例到特定(測試)案例的推理。
  • 概括(Induction):從觀察到的訓練案例到通常規則的推理,而後將其應用於測試案例。
  • 示例:

    給出一個點的集合,其中一些點被標記了爲A,B或C,可是大多數點沒有被標記,用?表示。訓練的目的是預測全部未標記點的「最佳」標籤。

    • 採用概括的思想,是使用有標記的點來訓練監督學習算法,而後讓其預測全部未標記的點的標籤。可是,對於這個問題,監督學習算法將僅具備五個標記點,創建捕獲該數據結構的模型確定會很困難。例如,若是使用最近鄰居算法,則即便很明顯能夠看到中間附近的點與標記爲「 B」的點屬於同一個羣集,也有可能會被標記爲「 A」或「 C」。

    • 轉導在執行標記任務時,可以考慮全部點,而不只僅是標記點。在這種狀況下,轉導算法將根據它們本來所屬的簇來標記未標記的點。所以,中間的點極可能會標記爲「 B」,由於它們的位置很是靠近該羣集。
      • 轉導的一個優點是,它可使用較少的標記點來進行更好的預測,由於它使用了未標記點中的天然隔斷(Break)
      • 轉導的一個缺點是它沒有創建預測模型。若是將先前未知的點添加到集合中,則須要對全部點重複整個轉換算法,以預測標籤。若是數據在流式的數據中逐漸可用,則在計算上可能會很昂貴。此外,這可能會致使某些舊點的預測發生變化(取決於應用程序多是好是壞)。另外一方面,有監督的學習算法能夠當即標記新點,而計算成本卻不多。

3、介紹

3.1 算法動機
  • 人類在進行一項新的任務時,一般使用了大量編碼於人類大腦和DNA中的先驗知識。得益於此,人類具備快速學習的能力,在數學上這種能力的得到能夠解釋爲貝葉斯推斷(Bayesian Inference)過程,這也正是開發出能達到人類水平的學習速度的算法的關鍵。但實際上使用深度神經網絡開發出計算上可行的貝葉斯機器學習算法是極具挑戰的。
  • 與此不一樣,元學習算法並無嘗試去模擬貝葉斯推斷過程,而是試圖使用任務數據集直接優化快速學習算法,這種算法做爲一種「代理」,可以在新任務上快速適應並學習。兩類常見的元學習方法:
    • 基於模型:將學習算法編碼爲循環網絡模型中的權重,從而在訓練過程當中對元學習模型的參數進行更新。
    • 基於初始化:
      • pre-training:在大量數據上(ImageNet)上學習網絡的初始化參數,而後在新任務上進行測試時對這些參數進行微調。這種方法沒法保證得出的參數便於調整,爲了達到良好的性能有時還須要一些特殊的技巧(ad-hoc tricks)
      • MAML:在優化過程當中對初始化參數進行微分更新,以得到一個敏感的基於梯度的學習算法。可是這種算法使用了二階微分計算,增大了計算開銷。
      • FOMAML:做爲MAML的變種,忽略了二階微分項,節省了計算開銷,但損失了部分梯度信息。
  • 針對某些問題使用依賴於高階梯度的技術可能出現的複雜性,本文探討了基於一階梯度信息的元學習算法。
3.2 本文貢獻
  • 指出FOMAML的實現相比之前的認知更加容易。
  • 提出了Reptile算法。這種算法與聯合訓練(joint training,經過訓練來最小化在一系列訓練任務上指望損失)很是類似,而且與FOMAML緊密相關,可是與FOMAML不一樣,Reptile無需對每個任務進行訓練-測試(training-testing)劃分
  • 對FOMAML和Reptile進行了理論分析,代表二者都對任務內泛化進行了優化。
  • 在對Mini-ImageNet和Omniglot數據集進行實證評價的基礎上,提出了實施最佳實踐的一些看法。

4、實現

4.1 FOMAML簡化實現
  • MAML優化過程的公式化表示:
    \[ \min_{\phi}\mathbb{E}_{\mathcal{T}}[L_{\mathcal{T},B}(U_{\mathcal{T},A}(\phi))] \]

    對於給定的任務\(\mathcal{T}\),內循環中使用訓練樣本\(A\) 進行優化,而後使用測試樣本 \(B\) 計算獲得損失,外循環使用損失對初始化參數求梯度,便可得出新任務上參數的優化方向。

    \[ g_{MAML}=\frac{\partial L_{\mathcal{T},B}(U_{\mathcal{T},A}(\phi))}{\partial \phi}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi})U^{\prime}_{\mathcal{T},A}(\phi), \qquad where \quad \tilde{\phi}=U_{\mathcal{T},A}(\phi)) \]

    其中 \(U^{\prime}_{\mathcal{T},A}(\phi)\) 能夠視爲是關於 \(U_{\mathcal{T},A}(\phi)\) 的雅可比矩陣,而 \(U_{\mathcal{T},A}(\phi)\) 能夠視爲是對初始化參數向量累加了一系列的梯度向量, \(U_{\mathcal{T},A}(\phi)=\phi+ g_1 + g_2 + \dots +g_k\)

  • FOMAML的簡化:

    將梯度向量視爲常量,便可將雅可比矩陣轉化爲恆等操做(identity operation),因此能夠簡化外循環優化過程當中所使用的梯度公式。

    \[ g_{FOMAML}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi}) \]

    具體流程以下:

    1. 採樣任務\(\mathcal{T}\)
    2. 對初始化參數執行更新操做,獲得\(\tilde{\phi}=U_{\mathcal{T},A}(\phi))\)
    3. 利用 \(\tilde{\phi}\) 計算對 \(\phi\) 的梯度,獲得 \(g_{FOMAML}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi})\)
    4. \(g_{FOMAML}\) 應用到外部循環優化中。
4.2 Reptile實現
  • 算法描述

  • 算法最後一步的模型參數更新的batch版本,能夠寫爲以下形式:
    \[ \phi \leftarrow \phi +\epsilon \frac{1}{n} \sum_{i=1}^{n}(\tilde{\phi_i}-\phi) \]

    其中\(\tilde{\phi_i}=U^{k}_{\mathcal{T}_i} \left\{ \phi \right\}\) ,表示在第i個任務上對參數的更新操做。

  • 這個算法與在損失指望上進行的聯合訓練十分類似。

  • 當k=1時,算法對應於指望損失的隨機梯度降低(SGD)
    \[ \begin{align} g_{Reptile,k=1} & =\mathbb{E}_{\mathcal{T}}\mathrm{[\phi-U_{\mathcal{T}}(\phi)]/\alpha}\\ & =\mathbb{E}_{\mathcal{T}}\mathrm{[\nabla_{\phi}L_{\mathcal{T}}(\phi)]} \end{align} \]

  • 當k>1時,更新過程包含了\(L_{\mathcal{T}}\) 的二階乃至更高階的微分項。

4.3 理論分析
  • 更新過程當中的領頭階(Leading Order)展開

    直覺是:

    • 使用泰勒序列展開來近似表示Reptile與MAML的更新過程,發現二者具備相同的領頭項(leading-order terms)——領頭階(第一項)起着最小化指望損失的做用;次領頭項(第二項)及後續項最大化任務內的泛化性

    • 最大化同一任務中不一樣minibatch之間梯度的內積,對其中一個batch進行梯度更新會顯著改善另外一個batch的的表現。

    • 表達式定義(\(i\in[1,k]\) 指代不一樣的batch)
      \[ \begin{align} &g_i=L^{\prime}_i(\phi_{i})\quad(在SGD過程當中得到的梯度)\\ &\phi_{i+1}=\phi_i-\alpha g_i\quad(參數更新序列)\\ &\bar{g_i}=L^{\prime}_i(\phi_1)\quad (起始點梯度)\\ &\bar{H_i}=L^{\prime \prime}_i(\phi_1)\quad (起始點Hessian矩陣,即二階梯度) \end{align} \]

    • 將SGD過程當中得到的梯度,按照泰勒公式展開

    • 近似表示MAML梯度(\(U_i\) 表示在第\(i\)個minibatch上對參數向量的更新操做)

    • 領頭階展開

    • 當k=2時,三者的通常表示形式爲:
      \[ \begin{align} &g_{MAML}=\bar{g_2}-\alpha\bar{H_2}\bar{g_1}-\alpha\bar{H_1}\bar{g_2}+O(\alpha^2)\\ &g_{MAML}=g_2=\bar{g_2}-\alpha\bar{H_2}\bar{g_1}+O(\alpha^2)\\ &g_{Reptile}=g_1+g_2=\bar{g_1}+\bar{g_2}-\alpha\bar{H_2}\bar{g_1}+O(\alpha^2)\\ \end{align} \]

      其中:

      • 相似於\(\bar{g_1}\quad \bar{g_2}\)的項就是領頭項,用於最小化聯合訓練損失;
      • 相似於\(\bar{H_2}\bar{g_1}\)的項就是次領頭項,做用是最大化不一樣批次數據上獲得的梯度的內積。
    • 在進行minibatch採樣,取三種梯度的指望時,上述兩種領頭項分別用AvgGradAvgGradInner表示(k=2):

    • 三種算法梯度的指望表示形式能夠化爲:

    • 擴展到k>2的狀況有:

      • 能夠看到三者AvgGradInner與AvgGrad之間的係數比的關係是:MAML > FOMAML > Retile
      • 這個比例與步長\(\alpha\),迭代次數\(k\) 正相關。
  • 找到一個接近全部解流形(Solution Manifolds)的點

    直覺:

    • Reptile收斂於一個解,這個解在歐式空間上與每一個任務的最優解的流形接近。

    • \(\phi\) 表示網絡初始化,\(\mathcal{W_{T}}\) 表示任務\(\mathcal{T}\)上的最優參數集。優化過程的最終目標是找到一個\(\phi\)使得其與全部任務的\(\mathcal{W_{T}}\) 之間的距離最小。
      \[ \min_{\phi}\mathbb{E}_{\mathcal{T}}[\frac{1}{2} D(\phi,\mathcal{W_T})^2] \]

    • 對參數\(\phi\)的梯度爲:

    • 在Reptile中每一次迭代至關於採樣一個任務而後在上面執行一側SGD更新。

    • 實際狀況下,很難直接計算出\(P_{\mathcal{W_T}}(\phi)\),即便得\(L_T\) 取得最小值的p。所以在Reptile中,用初始化參數\(\phi\)\(L_T\) 上執行k步梯度降低後獲得的結果來代替最優化參數\(\mathcal{W^{\star}_{T}(\phi)}\)

5、實驗

5.1 少樣本分類

Few-Shot Classification(少樣本分類)是少樣本學習中的一類任務,在這類任務中,存在一個元數據集(Meta-Data Set),包含了許多類的數據,每類數據由若干個樣本組成,這種任務的訓練一般與K-Shot N-way分類任務綁定在一塊兒,具體理解參見《關於N-Way K-Shot 分類問題的理解》。

創建與MAML同樣的CNN訓練模型,在Ominglot和MiniImageNet數據集上進行訓練與測試,實驗結果以下:

從兩個表格中的數據能夠看出,MAML與Reptile在加入了轉導(Transduction)後,在Mini-ImageNet上進行實驗,Reptile的表現要更好一些,而Omniglot數據集上正好相反。

5.2 不一樣的內循環梯度組合比較

經過在內循環中使用四個不重合的Mini-Batch,產生梯度數據\(g_1,g_2,g_3,g_4\) ,而後將它們以不一樣的方式進行線性組合(等價於執行屢次梯度更新)用於外部循環的更新,進而比較它們之間的性能表現,實驗結果以下圖:

從曲線能夠看出:

  • 僅使用一個批次的數據產生的梯度的效果並不顯著,由於至關於讓模型用見到過的少許的數據去優化全部任務。
  • 進行了兩步更新的Reptile(綠線)的效果要明顯不如進行了兩步更新的FOMAML(紅線),由於Reptile在AvgGradInner上的權重要小於FOMAML。
  • 隨着mini-batch數量的增多,全部算法的性能也在提高。經過同時利用多步的梯度更新,Reptile的表現要比僅使用最後一步梯度更新的FOMAML的表現好。
5.3 內循環中Mini-Batch 重合比較

Reptile和FOMAML在內循環過程當中都是使用的SGD進行的優化,在這個優化過程當中任何微小的變化都將致使最終模型性能的巨大變化,所以這部分的實驗主要是探究二者對於內循環中的超數的敏感性,同時也驗證了FOMAML在minibatch以錯誤的方式選取時會出現顯著的性能降低狀況。

mini-batch的選擇有兩種方式:

  • shared-tail(共尾):最後一個內循環的數據來自之前內循環批次的數據
  • separate-tail(分尾):最後一個內循環的數據與之前內循環批次的數據不一樣

採用不一樣的mini-batch選取方式在FOMAML上進行實驗,發現隨着內循環迭代次數的增多,採用分尾方式的FOMAML模型的測試準確率要高一些,由於在這種狀況下,測試的數據選取方式與訓練過程當中的數據選取方式更爲接近。

當採用不一樣的批次大小時,採用共尾方式選取數據的FOMAML的準確性會隨着批次大小的增長而顯著減少。當採用full-batch時,共尾FOMAML的表現會隨着外循環步長的加大而變差。

共尾FOMAML的表現如此敏感的緣由多是最初的幾回SGD更新讓模型達到了局部最優,之後的梯度更新就會使參數在這個局部最優附近波動。

6、總結

Reptile有效的緣由有二:

  • 經過用泰勒級數近似表示更新過程,發現SGD自動給出了與MAML計算的二階項相同的項。這一項調整初始權重,以最大限度地增長同一任務中不一樣小批量梯度之間的點積,從而增大模型的泛化能力。
  • Reptile經過利用屢次梯度更新,找到了一個接近全部最優解流形的點。

當執行SGD更新時,MAML形式的更新過程就已經被自動包含在其中了,經過最大化模型在不一樣批次數據之間的泛化能力,從而使得模型在微調(fine-tune)時能取得顯著的效果。

相關文章
相關標籤/搜索