【笔记】Reptile-一阶元学习算法
目錄一、摘要二、背景2.1 雅可比矩陣(Jacobi Matrix)2.2 泰勒公式2.3 領(lǐng)頭階(Leading Order)2.4 轉(zhuǎn)導(dǎo)與歸納三、介紹3.1 算法動(dòng)機(jī)3.2 本文貢獻(xiàn)四、實(shí)現(xiàn)4.1 FOMAML簡(jiǎn)化實(shí)現(xiàn)4.2 Reptile實(shí)現(xiàn)4.3 理論分析五、實(shí)驗(yàn)5.1 少樣本分類5.2 不同的內(nèi)循環(huán)梯度組合比較5.3 內(nèi)循環(huán)中Mini-Batch 重合比較六、總結(jié)
論文信息
Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018.
一、摘要
本文主要考慮元學(xué)習(xí)問題,即存在一個(gè)任務(wù)分布(a distribution of tasks),從這個(gè)分布中抽取許多任務(wù)來訓(xùn)練元學(xué)習(xí)模型(或代理),使其在處理從這個(gè)分布中抽取的以前從未遇到過的任務(wù)時(shí)能更快的學(xué)習(xí)(即表現(xiàn)得更好)。
本文通過分析一系列僅在元學(xué)習(xí)更新(meta-learning update)過程中使用一階微分(first-order derivation)就能在新任務(wù)上實(shí)現(xiàn)快速微調(diào)的關(guān)于參數(shù)初始化的算法,驗(yàn)證了一階元學(xué)習(xí)算法在一些完善的few-shot分類基準(zhǔn)上的有效性,同時(shí)還對(duì)這些算法的可行性進(jìn)行了理論分析。
這些一階元學(xué)習(xí)算法主要包括MAML的近似表示(忽略二階微分)——first-order MAML(簡(jiǎn)記:FOMAML)以及本文提出的Reptile算法。
二、背景
2.1 雅可比矩陣(Jacobi Matrix)
是函數(shù)的一階偏導(dǎo)數(shù)以一定方式排列成的矩陣,其體現(xiàn)了一個(gè)可微方程與給出點(diǎn)的最優(yōu)線性逼近。
假設(shè)(F:mathbb{R}_mathrm{n}ightarrow mathbb{R}_mathrm{m})是一個(gè)從n維歐氏空間映射到到m維歐氏空間的函數(shù)。這個(gè)函數(shù)由m個(gè)實(shí)函數(shù)組成:
[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}
]
這些函數(shù)的偏導(dǎo)數(shù)(如果存在)可以組成一個(gè)m行n列的矩陣,這個(gè)矩陣就是所謂的雅可比矩陣:
[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 領(lǐng)頭階(Leading Order)
一個(gè)解析表達(dá)式按照泰勒公式成無窮級(jí)數(shù)(或者多項(xiàng)式),根據(jù)所研究的定義域,每一個(gè)展開項(xiàng)所貢獻(xiàn)的大小是不會(huì)都相同的,根據(jù)它們對(duì)解析表達(dá)式精確值的貢獻(xiàn)大小將這些項(xiàng)分門別類地叫做領(lǐng)頭階、次領(lǐng)頭階、次次領(lǐng)頭階…
2.4 轉(zhuǎn)導(dǎo)與歸納
摘自:維基百科(https://en.wikipedia.org/wiki/Transduction_(machine_learning))
轉(zhuǎn)導(dǎo)(Transduction):從觀察到的特定(訓(xùn)練)案例到特定(測(cè)試)案例的推理。
歸納(Induction):從觀察到的訓(xùn)練案例到一般規(guī)則的推理,然后將其應(yīng)用于測(cè)試案例。
示例:
給出一個(gè)點(diǎn)的集合,其中一些點(diǎn)被標(biāo)記了為A,B或C,但是大多數(shù)點(diǎn)沒有被標(biāo)記,用?表示。訓(xùn)練的目的是預(yù)測(cè)所有未標(biāo)記點(diǎn)的“最佳”標(biāo)簽。
采用歸納的思想,是使用有標(biāo)記的點(diǎn)來訓(xùn)練監(jiān)督學(xué)習(xí)算法,然后讓其預(yù)測(cè)所有未標(biāo)記的點(diǎn)的標(biāo)簽。但是,對(duì)于這個(gè)問題,監(jiān)督學(xué)習(xí)算法將僅具有五個(gè)標(biāo)記點(diǎn),建立捕獲該數(shù)據(jù)結(jié)構(gòu)的模型肯定會(huì)很困難。例如,如果使用最近鄰居算法,則即使很明顯可以看到中間附近的點(diǎn)與標(biāo)記為“ B”的點(diǎn)屬于同一個(gè)群集,也有可能會(huì)被標(biāo)記為“ A”或“ C”。
轉(zhuǎn)導(dǎo)在執(zhí)行標(biāo)記任務(wù)時(shí),能夠考慮所有點(diǎn),而不僅僅是標(biāo)記點(diǎn)。在這種情況下,轉(zhuǎn)導(dǎo)算法將根據(jù)它們?cè)舅鶎俚拇貋順?biāo)記未標(biāo)記的點(diǎn)。因此,中間的點(diǎn)很可能會(huì)標(biāo)記為“ B”,因?yàn)樗鼈兊奈恢梅浅?拷撊杭?/p>
轉(zhuǎn)導(dǎo)的一個(gè)優(yōu)勢(shì)是,它可以使用較少的標(biāo)記點(diǎn)來進(jìn)行更好的預(yù)測(cè),因?yàn)樗褂昧宋礃?biāo)記點(diǎn)中的自然隔斷(Break)。
轉(zhuǎn)導(dǎo)的一個(gè)缺點(diǎn)是它沒有建立預(yù)測(cè)模型。如果將先前未知的點(diǎn)添加到集合中,則需要對(duì)所有點(diǎn)重復(fù)整個(gè)轉(zhuǎn)換算法,以預(yù)測(cè)標(biāo)簽。如果數(shù)據(jù)在流式的數(shù)據(jù)中逐漸可用,則在計(jì)算上可能會(huì)很昂貴。此外,這可能會(huì)導(dǎo)致某些舊點(diǎn)的預(yù)測(cè)發(fā)生變化(取決于應(yīng)用程序可能是好是壞)。另一方面,有監(jiān)督的學(xué)習(xí)算法可以立即標(biāo)記新點(diǎn),而計(jì)算成本卻很少。
三、介紹
3.1 算法動(dòng)機(jī)
人類在進(jìn)行一項(xiàng)新的任務(wù)時(shí),通常使用了大量編碼于人類大腦和DNA中的先驗(yàn)知識(shí)。得益于此,人類具有快速學(xué)習(xí)的能力,在數(shù)學(xué)上這種能力的獲得可以解釋為貝葉斯推斷(Bayesian Inference)過程,這也正是開發(fā)出能達(dá)到人類水平的學(xué)習(xí)速度的算法的關(guān)鍵。但實(shí)際上使用深度神經(jīng)網(wǎng)絡(luò)開發(fā)出計(jì)算上可行的貝葉斯機(jī)器學(xué)習(xí)算法是極具挑戰(zhàn)的。
與此不同,元學(xué)習(xí)算法并沒有嘗試去模擬貝葉斯推斷過程,而是試圖使用任務(wù)數(shù)據(jù)集直接優(yōu)化快速學(xué)習(xí)算法,這種算法作為一種“代理”,能夠在新任務(wù)上快速適應(yīng)并學(xué)習(xí)。兩類常見的元學(xué)習(xí)方法:
基于模型:將學(xué)習(xí)算法編碼為循環(huán)網(wǎng)絡(luò)模型中的權(quán)重,從而在訓(xùn)練過程中對(duì)元學(xué)習(xí)模型的參數(shù)進(jìn)行更新。
基于初始化:
pre-training:在大量數(shù)據(jù)上(ImageNet)上學(xué)習(xí)網(wǎng)絡(luò)的初始化參數(shù),然后在新任務(wù)上進(jìn)行測(cè)試時(shí)對(duì)這些參數(shù)進(jìn)行微調(diào)。這種方法無法保證得出的參數(shù)便于調(diào)整,為了達(dá)到良好的性能有時(shí)還需要一些特殊的技巧(ad-hoc tricks)。
MAML:在優(yōu)化過程中對(duì)初始化參數(shù)進(jìn)行微分更新,以獲得一個(gè)敏感的基于梯度的學(xué)習(xí)算法。但是這種算法使用了二階微分計(jì)算,增大了計(jì)算開銷。
FOMAML:作為MAML的變種,忽略了二階微分項(xiàng),節(jié)省了計(jì)算開銷,但損失了部分梯度信息。
針對(duì)某些問題使用依賴于高階梯度的技術(shù)可能出現(xiàn)的復(fù)雜性,本文探討了基于一階梯度信息的元學(xué)習(xí)算法。
3.2 本文貢獻(xiàn)
指出FOMAML的實(shí)現(xiàn)相比以前的認(rèn)知更加容易。
提出了Reptile算法。這種算法與聯(lián)合訓(xùn)練(joint training,通過訓(xùn)練來最小化在一系列訓(xùn)練任務(wù)上期望損失)非常相似,并且與FOMAML緊密相關(guān),但是與FOMAML不同,Reptile無需對(duì)每一個(gè)任務(wù)進(jìn)行訓(xùn)練-測(cè)試(training-testing)劃分。
對(duì)FOMAML和Reptile進(jìn)行了理論分析,表明兩者都對(duì)任務(wù)內(nèi)泛化進(jìn)行了優(yōu)化。
在對(duì)Mini-ImageNet和Omniglot數(shù)據(jù)集進(jìn)行實(shí)證評(píng)價(jià)的基礎(chǔ)上,提出了實(shí)施最佳實(shí)踐的一些見解。
四、實(shí)現(xiàn)
4.1 FOMAML簡(jiǎn)化實(shí)現(xiàn)
MAML優(yōu)化過程的公式化表示:
[min_{phi}mathbb{E}_{mathcal{T}}[L_{mathcal{T},B}(U_{mathcal{T},A}(phi))]
]
對(duì)于給定的任務(wù)(mathcal{T}),內(nèi)循環(huán)中使用訓(xùn)練樣本(A) 進(jìn)行優(yōu)化,然后使用測(cè)試樣本 (B) 計(jì)算得到損失,外循環(huán)使用損失對(duì)初始化參數(shù)求梯度,即可得出新任務(wù)上參數(shù)的優(yōu)化方向。
[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)) 可以視為是關(guān)于 (U_{mathcal{T},A}(phi)) 的雅可比矩陣,而 (U_{mathcal{T},A}(phi)) 可以視為是對(duì)初始化參數(shù)向量累加了一系列的梯度向量, (U_{mathcal{T},A}(phi)=phi+ g_1 + g_2 + dots +g_k) 。
FOMAML的簡(jiǎn)化:
將梯度向量視為常量,即可將雅可比矩陣轉(zhuǎn)化為恒等操作(identity operation),所以可以簡(jiǎn)化外循環(huán)優(yōu)化過程中所使用的梯度公式。
[g_{FOMAML}=L^{prime}_{mathcal{T},B}( ilde{phi})
]
具體流程如下:
采樣任務(wù)(mathcal{T}) ;
對(duì)初始化參數(shù)執(zhí)行更新操作,得到( ilde{phi}=U_{mathcal{T},A}(phi)));
利用 ( ilde{phi}) 計(jì)算對(duì) (phi) 的梯度,得到 (g_{FOMAML}=L^{prime}_{mathcal{T},B}( ilde{phi}))
將(g_{FOMAML}) 應(yīng)用到外部循環(huán)優(yōu)化中。
4.2 Reptile實(shí)現(xiàn)
算法描述
算法最后一步的模型參數(shù)更新的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個(gè)任務(wù)上對(duì)參數(shù)的更新操作。
這個(gè)算法與在損失期望上進(jìn)行的聯(lián)合訓(xùn)練十分相似。
當(dāng)k=1時(shí),算法對(duì)應(yīng)于期望損失的隨機(jī)梯度下降(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}
]
當(dāng)k>1時(shí),更新過程包含了(L_{mathcal{T}}) 的二階乃至更高階的微分項(xiàng)。
4.3 理論分析
更新過程中的領(lǐng)頭階(Leading Order)展開
直覺是:
使用泰勒序列展開來近似表示Reptile與MAML的更新過程,發(fā)現(xiàn)兩者具有相同的領(lǐng)頭項(xiàng)(leading-order terms)——領(lǐng)頭階(第一項(xiàng))起著最小化期望損失的作用;次領(lǐng)頭項(xiàng)(第二項(xiàng))及后續(xù)項(xiàng)最大化任務(wù)內(nèi)的泛化性。
最大化同一任務(wù)中不同minibatch之間梯度的內(nèi)積,對(duì)其中一個(gè)batch進(jìn)行梯度更新會(huì)顯著改善另一個(gè)batch的的表現(xiàn)。
表達(dá)式定義((iin[1,k]) 指代不同的batch)
[egin{align}
&g_i=L^{prime}_i(phi_{i})quad(在SGD過程中獲得的梯度)\
&phi_{i+1}=phi_i-alpha g_iquad(參數(shù)更新序列)\
&ar{g_i}=L^{prime}_i(phi_1)quad (起始點(diǎn)梯度)\
&ar{H_i}=L^{prime prime}_i(phi_1)quad (起始點(diǎn)Hessian矩陣,即二階梯度)
end{align}
]
將SGD過程中獲得的梯度,按照泰勒公式展開
近似表示MAML梯度((U_i) 表示在第(i)個(gè)minibatch上對(duì)參數(shù)向量的更新操作)
領(lǐng)頭階展開
當(dāng)k=2時(shí),三者的一般表示形式為:
[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})的項(xiàng)就是領(lǐng)頭項(xiàng),用于最小化聯(lián)合訓(xùn)練損失;
類似于(ar{H_2}ar{g_1})的項(xiàng)就是次領(lǐng)頭項(xiàng),作用是最大化不同批次數(shù)據(jù)上得到的梯度的內(nèi)積。
在進(jìn)行minibatch采樣,取三種梯度的期望時(shí),上述兩種領(lǐng)頭項(xiàng)分別用AvgGrad和AvgGradInner表示(k=2):
三種算法梯度的期望表示形式可以化為:
擴(kuò)展到k>2的情況有:
可以看到三者AvgGradInner與AvgGrad之間的系數(shù)比的關(guān)系是:MAML > FOMAML > Retile。
這個(gè)比例與步長(alpha),迭代次數(shù)(k) 正相關(guān)。
找到一個(gè)接近所有解流形(Solution Manifolds)的點(diǎn)
直覺:
Reptile收斂于一個(gè)解,這個(gè)解在歐式空間上與每個(gè)任務(wù)的最優(yōu)解的流形接近。
用 (phi) 表示網(wǎng)絡(luò)初始化,(mathcal{W_{T}}) 表示任務(wù)(mathcal{T})上的最優(yōu)參數(shù)集。優(yōu)化過程的最終目標(biāo)是找到一個(gè)(phi)使得其與所有任務(wù)的(mathcal{W_{T}}) 之間的距離最小。
[min_{phi}mathbb{E}_{mathcal{T}}[frac{1}{2} D(phi,mathcal{W_T})^2]
]
對(duì)參數(shù)(phi)的梯度為:
在Reptile中每一次迭代相當(dāng)于采樣一個(gè)任務(wù)然后在上面執(zhí)行一側(cè)SGD更新。
實(shí)際情況下,很難直接計(jì)算出(P_{mathcal{W_T}}(phi)),即使得(L_T) 取得最小值的p。因此在Reptile中,用初始化參數(shù)(phi)在(L_T) 上執(zhí)行k步梯度下降后得到的結(jié)果來代替最優(yōu)化參數(shù)(mathcal{W^{star}_{T}(phi)})。
五、實(shí)驗(yàn)
5.1 少樣本分類
Few-Shot Classification(少樣本分類)是少樣本學(xué)習(xí)中的一類任務(wù),在這類任務(wù)中,存在一個(gè)元數(shù)據(jù)集(Meta-Data Set),包含了許多類的數(shù)據(jù),每類數(shù)據(jù)由若干個(gè)樣本組成,這種任務(wù)的訓(xùn)練通常與K-Shot N-way分類任務(wù)綁定在一起,具體理解參見《關(guān)于N-Way K-Shot 分類問題的理解》。
建立與MAML一樣的CNN訓(xùn)練模型,在Ominglot和MiniImageNet數(shù)據(jù)集上進(jìn)行訓(xùn)練與測(cè)試,實(shí)驗(yàn)結(jié)果如下:
從兩個(gè)表格中的數(shù)據(jù)可以看出,MAML與Reptile在加入了轉(zhuǎn)導(dǎo)(Transduction)后,在Mini-ImageNet上進(jìn)行實(shí)驗(yàn),Reptile的表現(xiàn)要更好一些,而Omniglot數(shù)據(jù)集上正好相反。
5.2 不同的內(nèi)循環(huán)梯度組合比較
通過在內(nèi)循環(huán)中使用四個(gè)不重合的Mini-Batch,產(chǎn)生梯度數(shù)據(jù)(g_1,g_2,g_3,g_4) ,然后將它們以不同的方式進(jìn)行線性組合(等價(jià)于執(zhí)行多次梯度更新)用于外部循環(huán)的更新,進(jìn)而比較它們之間的性能表現(xiàn),實(shí)驗(yàn)結(jié)果如下圖:
從曲線可以看出:
僅使用一個(gè)批次的數(shù)據(jù)產(chǎn)生的梯度的效果并不顯著,因?yàn)橄喈?dāng)于讓模型用見到過的少量的數(shù)據(jù)去優(yōu)化所有任務(wù)。
進(jìn)行了兩步更新的Reptile(綠線)的效果要明顯不如進(jìn)行了兩步更新的FOMAML(紅線),因?yàn)镽eptile在AvgGradInner上的權(quán)重要小于FOMAML。
隨著mini-batch數(shù)量的增多,所有算法的性能也在提升。通過同時(shí)利用多步的梯度更新,Reptile的表現(xiàn)要比僅使用最后一步梯度更新的FOMAML的表現(xiàn)好。
5.3 內(nèi)循環(huán)中Mini-Batch 重合比較
Reptile和FOMAML在內(nèi)循環(huán)過程中都是使用的SGD進(jìn)行的優(yōu)化,在這個(gè)優(yōu)化過程中任何微小的變化都將導(dǎo)致最終模型性能的巨大變化,因此這部分的實(shí)驗(yàn)主要是探究兩者對(duì)于內(nèi)循環(huán)中的超數(shù)的敏感性,同時(shí)也驗(yàn)證了FOMAML在minibatch以錯(cuò)誤的方式選取時(shí)會(huì)出現(xiàn)顯著的性能下降情況。
mini-batch的選擇有兩種方式:
shared-tail(共尾):最后一個(gè)內(nèi)循環(huán)的數(shù)據(jù)來自以前內(nèi)循環(huán)批次的數(shù)據(jù)
separate-tail(分尾):最后一個(gè)內(nèi)循環(huán)的數(shù)據(jù)與以前內(nèi)循環(huán)批次的數(shù)據(jù)不同
采用不同的mini-batch選取方式在FOMAML上進(jìn)行實(shí)驗(yàn),發(fā)現(xiàn)隨著內(nèi)循環(huán)迭代次數(shù)的增多,采用分尾方式的FOMAML模型的測(cè)試準(zhǔn)確率要高一些,因?yàn)樵谶@種情況下,測(cè)試的數(shù)據(jù)選取方式與訓(xùn)練過程中的數(shù)據(jù)選取方式更為接近。
當(dāng)采用不同的批次大小時(shí),采用共尾方式選取數(shù)據(jù)的FOMAML的準(zhǔn)確性會(huì)隨著批次大小的增加而顯著減小。當(dāng)采用full-batch時(shí),共尾FOMAML的表現(xiàn)會(huì)隨著外循環(huán)步長的加大而變差。
共尾FOMAML的表現(xiàn)如此敏感的原因可能是最初的幾次SGD更新讓模型達(dá)到了局部最優(yōu),以后的梯度更新就會(huì)使參數(shù)在這個(gè)局部最優(yōu)附近波動(dòng)。
六、總結(jié)
Reptile有效的原因有二:
通過用泰勒級(jí)數(shù)近似表示更新過程,發(fā)現(xiàn)SGD自動(dòng)給出了與MAML計(jì)算的二階項(xiàng)相同的項(xiàng)。這一項(xiàng)調(diào)整初始權(quán)重,以最大限度地增加同一任務(wù)中不同小批量梯度之間的點(diǎn)積,從而增大模型的泛化能力。
Reptile通過利用多次梯度更新,找到了一個(gè)接近所有最優(yōu)解流形的點(diǎn)。
當(dāng)執(zhí)行SGD更新時(shí),MAML形式的更新過程就已經(jīng)被自動(dòng)包含在其中了,通過最大化模型在不同批次數(shù)據(jù)之間的泛化能力,從而使得模型在微調(diào)(fine-tune)時(shí)能取得顯著的效果。
總結(jié)
以上是生活随笔為你收集整理的【笔记】Reptile-一阶元学习算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开My Lead detail pag
- 下一篇: 为什么Fiori客户主数据的头像在异步模