【笔记】Reptile-一阶元学习算法
目錄一、摘要二、背景2.1 雅可比矩陣(Jacobi Matrix)2.2 泰勒公式2.3 領頭階(Leading Order)2.4 轉導與歸納三、介紹3.1 算法動機3.2 本文貢獻四、實現4.1 FOMAML簡化實現4.2 Reptile實現4.3 理論分析五、實驗5.1 少樣本分類5.2 不同的內循環梯度組合比較5.3 內循環中Mini-Batch 重合比較六、總結
論文信息
Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018.
一、摘要
本文主要考慮元學習問題,即存在一個任務分布(a distribution of tasks),從這個分布中抽取許多任務來訓練元學習模型(或代理),使其在處理從這個分布中抽取的以前從未遇到過的任務時能更快的學習(即表現得更好)。
本文通過分析一系列僅在元學習更新(meta-learning update)過程中使用一階微分(first-order derivation)就能在新任務上實現快速微調的關于參數初始化的算法,驗證了一階元學習算法在一些完善的few-shot分類基準上的有效性,同時還對這些算法的可行性進行了理論分析。
這些一階元學習算法主要包括MAML的近似表示(忽略二階微分)——first-order MAML(簡記:FOMAML)以及本文提出的Reptile算法。
二、背景
2.1 雅可比矩陣(Jacobi Matrix)
是函數的一階偏導數以一定方式排列成的矩陣,其體現了一個可微方程與給出點的最優線性逼近。
假設(F:mathbb{R}_mathrm{n}ightarrow mathbb{R}_mathrm{m})是一個從n維歐氏空間映射到到m維歐氏空間的函數。這個函數由m個實函數組成:
[F=egin{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}]
=egin{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 泰勒公式
[egin{array}{*{20}{l}}
{f{ left( {x} ight) }{egin{array}{*{20}{l}}
{=f{ left( {mathop{{x}}
olimits_{{0}}} ight) }+{f prime }{ left( {mathop{{x}}
olimits_{{0}}} ight) }{ left( {x-mathop{{x}}
olimits_{{0}}} ight) }+frac{{f '' { left( {mathop{{x}}
olimits_{{0}}} ight) }}}{{2!}}mathop{{ left( {x-mathop{{x}}
olimits_{{0}}} ight) }}
olimits^{{2}}+ cdots +frac{{mathop{{f}}
olimits^{{ left( {n} ight) }}{ left( {mathop{{x}}
olimits_{{0}}} ight) }}}{{n!}}mathop{{ left( {x-mathop{{x}}
olimits_{{0}}} ight) }}
olimits^{{n}}+mathop{{R}}
olimits_{{n}}{ left( {x} ight) }}\
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.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.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}( ilde{phi})U^{prime}_{mathcal{T},A}(phi), qquad where quad ilde{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}( ilde{phi})
]
具體流程如下:
采樣任務(mathcal{T}) ;
對初始化參數執行更新操作,得到( ilde{phi}=U_{mathcal{T},A}(phi)));
利用 ( ilde{phi}) 計算對 (phi) 的梯度,得到 (g_{FOMAML}=L^{prime}_{mathcal{T},B}( ilde{phi}))
將(g_{FOMAML}) 應用到外部循環優化中。
4.2 Reptile實現
算法描述
算法最后一步的模型參數更新的batch版本,可以寫為如下形式:
[phi leftarrow phi +epsilon frac{1}{n} sum_{i=1}^{n}( ilde{phi_i}-phi)
]
其中( ilde{phi_i}=U^{k}_{mathcal{T}_i} left{ phi ight}) ,表示在第i個任務上對參數的更新操作。
這個算法與在損失期望上進行的聯合訓練十分相似。
當k=1時,算法對應于期望損失的隨機梯度下降(SGD)。
[egin{align}
g_{Reptile,k=1} & =mathbb{E}_{mathcal{T}}mathrm{[phi-U_{mathcal{T}}(phi)]/alpha}\
& =mathbb{E}_{mathcal{T}}mathrm{[
abla_{phi}L_{mathcal{T}}(phi)]}
end{align}
]
當k>1時,更新過程包含了(L_{mathcal{T}}) 的二階乃至更高階的微分項。
4.3 理論分析
更新過程中的領頭階(Leading Order)展開
直覺是:
使用泰勒序列展開來近似表示Reptile與MAML的更新過程,發現兩者具有相同的領頭項(leading-order terms)——領頭階(第一項)起著最小化期望損失的作用;次領頭項(第二項)及后續項最大化任務內的泛化性。
最大化同一任務中不同minibatch之間梯度的內積,對其中一個batch進行梯度更新會顯著改善另一個batch的的表現。
表達式定義((iin[1,k]) 指代不同的batch)
[egin{align}
&g_i=L^{prime}_i(phi_{i})quad(在SGD過程中獲得的梯度)\
&phi_{i+1}=phi_i-alpha g_iquad(參數更新序列)\
&ar{g_i}=L^{prime}_i(phi_1)quad (起始點梯度)\
&ar{H_i}=L^{prime prime}_i(phi_1)quad (起始點Hessian矩陣,即二階梯度)
end{align}
]
將SGD過程中獲得的梯度,按照泰勒公式展開
近似表示MAML梯度((U_i) 表示在第(i)個minibatch上對參數向量的更新操作)
領頭階展開
當k=2時,三者的一般表示形式為:
[egin{align}
&g_{MAML}=ar{g_2}-alphaar{H_2}ar{g_1}-alphaar{H_1}ar{g_2}+O(alpha^2)\
&g_{MAML}=g_2=ar{g_2}-alphaar{H_2}ar{g_1}+O(alpha^2)\
&g_{Reptile}=g_1+g_2=ar{g_1}+ar{g_2}-alphaar{H_2}ar{g_1}+O(alpha^2)\
end{align}
]
其中:
類似于(ar{g_1}quad ar{g_2})的項就是領頭項,用于最小化聯合訓練損失;
類似于(ar{H_2}ar{g_1})的項就是次領頭項,作用是最大化不同批次數據上得到的梯度的內積。
在進行minibatch采樣,取三種梯度的期望時,上述兩種領頭項分別用AvgGrad和AvgGradInner表示(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.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更新讓模型達到了局部最優,以后的梯度更新就會使參數在這個局部最優附近波動。
六、總結
Reptile有效的原因有二:
通過用泰勒級數近似表示更新過程,發現SGD自動給出了與MAML計算的二階項相同的項。這一項調整初始權重,以最大限度地增加同一任務中不同小批量梯度之間的點積,從而增大模型的泛化能力。
Reptile通過利用多次梯度更新,找到了一個接近所有最優解流形的點。
當執行SGD更新時,MAML形式的更新過程就已經被自動包含在其中了,通過最大化模型在不同批次數據之間的泛化能力,從而使得模型在微調(fine-tune)時能取得顯著的效果。
總結
以上是生活随笔為你收集整理的【笔记】Reptile-一阶元学习算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开My Lead detail pag
- 下一篇: LOL水鬼梗什么意思