1
雷鋒網(wǎng) AI 科技評論按:本文作者 Cody Marie Wild,她是一位機器學習領域的數(shù)據(jù)科學家,在生活中還是名貓咪鏟屎官,她鐘愛語言和簡潔優(yōu)美的系統(tǒng)。在這篇文章中,Cody 介紹了元學習的基本概念和方法類別,討論了「元學習」到底在學什么、又有哪些限制。雷鋒網(wǎng) AI 科技評論把全文編譯如下。
當我第一次聽到「元學習」的時候,它的概念是如此地令我沉醉:這個項目要構建不僅能夠進行學習的機器,這些機器還能學習「如何學習」的方法。理想的元學習算法應該能夠根據(jù)反應其性能的信號去修改它們的基本結構、參數(shù)空間,或者能夠在它們面對新的環(huán)境時利用它們之前積累起來的經(jīng)驗。簡而言之:當未來主義者憧憬著通用強人工智能時,符合這種描述的組件就是這個愿景必不可少的組成部分。
本文的目的在于從這些高屋建瓴的概念慢慢落到實處,從我們所想象的那些抽象的能夠自我修改的智能體可以做的事開始,一直到這個領域的現(xiàn)狀,來討論這個領域的成功、它的局限性,以及我們距離魯棒的多任務人工智能還有多遠。
具體而言:在許多強化學習任務中,相對于人類而言,算法需要花費長得多的時間去學習任務;目前最先進的能夠玩 Atari 游戲的算法需要花 83 個小時(或 1800萬幀)的游戲時間才能達到人類的平均表現(xiàn),大多數(shù)人在玩了幾個小時游戲之后就能達到這個水平。
這種差異導致機器學習研究人員提出這樣的一個問題:人類大腦在這樣的任務體現(xiàn)了什么樣的工具和能力,我們?nèi)绾文軌蛴媒y(tǒng)計學和信息論的方式理解這些工具呢?具體來說,元學習的研究人員所追求的策略似乎可以分為兩類,它們大致可以和下面兩種人類認知「什么是工具」的理論相對應。
學到的先驗知識:從這一點看,人類可以很快地學習新的任務,因為我們可以重復使用我們已經(jīng)在之前的任務中學到的信息。比如直覺上物體如何在空間中移動的物理特征,或者在一個電子游戲中死掉會降低獎勵的元知識。
學到的策略:這種思路是,在我們的生活中(或許在進化的過程中),我們不僅僅收集對象級別的關于世界的知識,而且還建立了一個更高效的神經(jīng)結構,這種結構使得我們即使在非常新的環(huán)境中也能接受輸入,并且準確地將其轉化為輸出或者策略。
現(xiàn)如今,很明顯,這兩個觀點并不是相互排斥的,而且這兩者之間甚至并沒有一個硬性的、快速區(qū)分它們的邊界:我們與世界互動的一些硬編碼策略可能是基于對世界的深刻的先驗知識,正如事實上(至少對于所有與這篇博文相關的目的而言)世界有一個因果結構。即便如此,我覺得這兩個想法的區(qū)別足夠大,值得我們將它們分到這兩個標簽之下,并且將他們看作一個平面上的 x 和 y 坐標。
在正式研究元學習之前,了解一些與單樣本學習相關的概念基礎是十分有用的。如果說元學習的問題在于「如何建立一個能快速學習新任務的模型」,那么單樣本學習的問題則是:我們?nèi)绾谓⒁粋€模型,它能夠在只看到某個類別的一個示例后,就能夠學習如何去對這個類別進行分類。
現(xiàn)在,我們不妨思考一下,從概念層面上說,是什么讓單樣本學習如此困難。如果我們試著只用某一個類別的一個樣本數(shù)據(jù)上訓練一般性的模型,這幾乎必然會產(chǎn)生過擬合。如果一個模型僅僅能得到一個手寫數(shù)字的數(shù)據(jù),比方說「3」,它不會知道一張圖片可以經(jīng)過怎樣的像素變化之后還能在本質上是一個「3」。例如,如果這個這個模型僅僅看到了一組數(shù)字中的第一個「3」,他如何能知道第二個「3」也是同種數(shù)字這樣的先驗呢?從理論上講,我們感興趣的類別標簽在網(wǎng)絡學習中與構成它的線條的粗細情況可能相關嗎?對于人類來說,這似乎是很愚蠢的想法,但是由于我們只有一個「3」的示例,網(wǎng)絡需要進行的推斷并不簡單,所以這也不失為一種有效的嘗試。
更多的數(shù)字「3」的示例有助于解決這個問題,因為我們可以了解圖像的什么特性決定了它是「3」:主要是垂直方向上存在的兩個凸形。以及了解什么樣的修改是無關緊要的:線條的粗細、角度的銳度。為了成功地進行單樣本學習,我們必須激勵網(wǎng)絡去學習什么樣的屬性能夠在不給出每個數(shù)字所允許的具體的變化的情況下,泛化性地將一個數(shù)字和另外的數(shù)字區(qū)分開來。
在單樣本學習中,一個常見的技巧是學習一個嵌入空間,在這個空間中計算兩個樣本的表示之間的歐式距離,這是一種很好的計算兩個樣本是否屬于同一類的方法。從直覺上來說,這需要學習在這個分布中總體來講可以使得類別間的差異最強的內(nèi)部維度,并且學習如何將輸入壓縮、轉化成最相關的維度。
我發(fā)現(xiàn),首先考慮這樣的問題是一個很有用的基礎。我們并非試圖學習如何總結各種不同的類之間共通的信息和模式,而是試圖學習一組任務中的總會存在的規(guī)律,并且每個任務都有自己的內(nèi)部結構或者目標。
如果要我以從低到高的抽象程度為標準對神經(jīng)網(wǎng)絡的元參數(shù)進行排序,排序結果應該如下:
一個能夠通過超參數(shù)梯度下降法學習到完整的任務分布上的數(shù)據(jù)表示的網(wǎng)絡。MAML 和 Reptile 就是一個這樣做的很通俗易懂的例子。而共享層次的元學習也是一種有趣的方法,它將學習數(shù)據(jù)表示作為被一個主策略控制的顯式子策略去學習。
一個能夠學著去優(yōu)化自己的梯度下降操作的參數(shù)的網(wǎng)絡。這些參數(shù)包括:學習率、動量、自適應學習率算法的權重。在這里,我們開始沿著修改學習算法本身的道路前進,但是我們的方法是有限的、參數(shù)化的。這就是《Learning to Learn by Gradient Descent by Gradient Descent》(https://arxiv.org/abs/1606.04474)一文所做的工作。
一個能夠學到本身就是神經(jīng)網(wǎng)絡的內(nèi)循環(huán)優(yōu)化器的網(wǎng)絡。也就是說:在這里,梯度下降算法被應用于更新神經(jīng)優(yōu)化器網(wǎng)絡的參數(shù),使其在各項任務中運行良好,但是每個任務中輸入數(shù)據(jù)到輸出預測的映射是完全由網(wǎng)絡進行的,沒有任何顯式的損失或者梯度計算。這就是 RL2(https://arxiv.org/abs/1611.02779)和 A simple neural attentive meta learner (https://openreview.net/forum?id=B1DmUzWAW) 的工作方式。
為了使本文不那么龐大,我將主要關注 1 和 3,以說明這個連續(xù)的概念譜的兩端。
此外還有一個小問題,最后一個......我保證!我希望能夠澄清一個令人困惑的話題。通常,在關于元學習的討論中,你常常會看到「任務分布」的概念。你可能會注意到這是一個定義不明確的概念,是的,你是對的!似乎沒有一個明確的標準來判斷什么時候一個問題是一個任務,或者一個任務分布。例如:我們是否應該把 ImageNet 看作一個任務——物體識別——或者多項任務:在一個任務中區(qū)分狗,在另一個任務中區(qū)分貓。為什么將玩 Atari 游戲視為一個單獨的任務,而不是將游戲中的各個關卡分別作為多個任務?
我已經(jīng)能從這一切描述中總結出來的是:
「任務」的概念與「我們建立了什么樣的數(shù)據(jù)集」這兩個概念是糾纏在一起的,因為我們會很自然地把學習一個數(shù)據(jù)集作為一個單一的任務
對于任何給定的任務分布,其中的任務之間的差異可以是非常明顯的(例如:任務分布中的每個任務都在學習一個不同振幅的正弦波 vs 任務分布中的每個任務都在玩不同的 Atari 游戲)
因此,我們不應該直接說「噢!這個方法可以泛化到<這個任務分布的樣本上>,這說明它能夠泛化運行在一些任意的不同的任務分布上?!箯姆椒ǖ挠行陨险f,這當然不是一個不好的證據(jù),但是我們確實需要批判性思考,去考慮:為了在所有的任務上表現(xiàn)出色,網(wǎng)絡需要多大的靈活性。
在 2017 年初,Chelsea Finn 和來自加州大學伯克利分校的團隊發(fā)布了一項被稱為「MAML:模型無關的元學習」的技術(https://arxiv.org/abs/1703.03400 )。
在學習策略和學習先驗之間,這種方法傾向于后者。這個網(wǎng)絡的目標是訓練一個模型,對于一個新任務只需要做單步梯度更新,就可以很好地在這個任務上進行泛化。偽代碼大概長這個樣子:
隨機初始化一個網(wǎng)絡的參數(shù),把這組參數(shù)記為 theta。
在一個任務分布 T 中選擇一些任務 t。使用訓練集中的 k 個(k通常在 10 左右)樣本,在當前參數(shù)集所在的位置執(zhí)行一個梯度步,你將得到一組最終的參數(shù)。
在測試集上評估使用最終這組參數(shù)的模型性能。
然后,求模型執(zhí)行任務集 t 的性能關于初始參數(shù) theta 的梯度。然后根據(jù)這個梯度更新參數(shù),接下來回到第一步,使用剛剛更新的 theta 作為這一輪的初始 theta 值。
這是在做什么呢?從一個非常抽象的層面上講,這是在尋找參數(shù)空間中的一個點,這個點對于任務分布中的許多任務來說,在期望上是泛化最好的那個點。你也可以認為這就像迫使模型在對參數(shù)空間的探索中維持了一定的不確定性和保守性。簡而言之:一個認為它的梯度能完全表示整體分布的網(wǎng)絡,可能會陷入一個損失特別低的區(qū)域,MAML 更容易被激勵去找到一個靠近多個損失函數(shù)的「峽谷」尖點的區(qū)域,這些「峽谷」在所有的任務上的期望損失都相當?shù)?。正是這種對于保守性的激勵使 MAML 不會像那些一般通過少量來自新任務的樣本訓練的模型一樣過擬合。
2018 年初,OpenAI 又發(fā)表了一篇名為 Reptile 的論文(https://arxiv.org/abs/1803.02999,雷鋒網(wǎng) AI 科技評論往期文章點這里)。正如你可能從它的名字中猜到的那樣——使用了早先的 MAML 的方法起名。Reptile 以 MAML 為前提,但是找到了一種更高效的循環(huán)計算更新初始參數(shù)的方法。MAML 需要顯式地計算在初始化參數(shù) theta 下運行的測試集損失的梯度,Reptile 則僅在每項任務中執(zhí)行了幾步 SGD 更新,然后用更新結束時的權重和初始權重的差異,作為用于更新初始權重的「梯度」。
從直觀上說,這項研究能運行出任何結果都非常奇怪,因為簡單的說,這看起來和在將所有任務合并而成的一個任務上對模型進行訓練沒有任何不同。然而,作者認為,由于對每個任務都使用了 SGD 的多個步驟,每個任務損失函數(shù)的二階導數(shù)都被影響了。為了做到這一點,他們將更新工作分解為兩部分:
第一項:促使結果趨向「聯(lián)合訓練損失」,也就是說,如果你僅僅使用合并的任務作為數(shù)據(jù)集,訓練會得到什么樣的結果。
第二項:促使初始化參數(shù)趨向于一個點,在這一點,后續(xù)的 SGD mini-batch 的梯度都是接近的:也就是說,各個 mini-batch 之間的梯度差異很小。作者推測,這一項能夠使得訓練時間更快,因為它促使模型在每個任務上都處于一個穩(wěn)定、低反差的訓練區(qū)域。
我選擇 MAML/Reptile 的組合代表事物的「學習到的先驗」,因為從理論上講,這個網(wǎng)絡通過對學習內(nèi)部數(shù)據(jù)表示取得了成功,這些數(shù)據(jù)表示要么有助于對全部的任務分布進行分類,要么在參數(shù)空間中與普遍使用的數(shù)據(jù)表示相接近。
為了進一步明確這一點,請看上圖。上圖對 MAML 和一個預訓練網(wǎng)絡進行了比較,這兩個網(wǎng)絡都用一組由不同相位與振幅組成的正弦曲線組成的回歸任務進行訓練。這之后,兩個網(wǎng)絡都針對新的具體任務進行了精細調節(jié)(fine-tune):如紅色曲線所示。紫色三角的代表寥寥幾步梯度步中使用的數(shù)據(jù)點。與預訓練網(wǎng)絡相比,MAML 學到了例如——正弦曲線具有周期性結構:在 K=5 時,它可以在沒有真正從空間的這一區(qū)域觀察到數(shù)據(jù)的情況下快得多地將左邊的峰值移到正確的地方。雖然說很難判斷我們的解釋是不是與底層發(fā)生的情況完美地相匹配,但我們不妨推測: MAML 在算出兩個相關正弦曲線不同之處——相位和振幅——方面做得更好,同時也能更好地從給定的數(shù)據(jù)中學到它們的數(shù)據(jù)表示。
對一些人來說,他們使用已有的、像梯度下降這樣的算法,來對全局先驗進行學習。但誰說我們以往設計的算法就是最高效的呢?難道我們不能學到更好的方法嗎?
這就是 RL2(通過慢速增強學習進行快速增強學習)所采用的方法。這個模型的基礎結構是循環(huán)神經(jīng)網(wǎng)絡(具體來說,是一個 LTSM 網(wǎng)絡)。因為 RNN 有儲存狀態(tài)信息的能力,并且給出不同輸出,這些輸是該狀態(tài)的函數(shù),所以理論上它們可以學到任意可計算的算法:換而言之,它們都具有圖靈完備的潛力。以此為基礎,RL2 的作者設計了一個 RNN,每一個用于訓練 RNN 的「序列」事實上都是一組具有特定 MDP(MDP = Markov Decision Process,馬爾科夫決策過程?;谶@個解釋,你只需將每次 MDP 看作定義一系列可能動作并且在環(huán)境中對這些動作產(chǎn)生獎勵)的經(jīng)驗片段。接著,會在許多序列上訓練這個 RNN,像一般的 RNN 一樣,這樣就會對應多個不同的 MDP,并且 RNN 的參數(shù)會被優(yōu)化,使得找所有序列或試驗集合中產(chǎn)生的負反饋(regret)較低。負反饋(regret)是一個可以捕獲你一組事件中所有獎勵的度量,所以除了激勵網(wǎng)絡在試驗結束時得到更好的策略之外,它還可以激勵網(wǎng)絡更快地進行學習,以致于網(wǎng)絡會在低回報的策略中更少地使用探索性動作。
在試驗中的每一個點,網(wǎng)絡采取的動作都是一個以從都個任務中學到的權重和隱含狀態(tài)的內(nèi)容為常數(shù)的函數(shù),隱藏狀態(tài)的內(nèi)容是作為數(shù)據(jù)的函數(shù)進行更新并用作動態(tài)參數(shù)集合。因此,RNN 在多個任務中學習到了如何更新隱含狀態(tài)的權重,以及控制如何利用隱含狀態(tài)的權重。然后,在一個給定的任務中,隱藏狀態(tài)可以描述網(wǎng)絡的確定性、當前應該繼續(xù)探索還是利用學到的信息,等等,作為它在這個特定任務中看到的數(shù)據(jù)的函數(shù)。從這個意義上講,RNN 這種學習算法決定了如何最好地探索空間、把什么樣的策略看作最佳策略,而且通過學習使該算法在一組任務分布上得到很好的效果。該作者把 RL2 的架構和專門對任務進行過漸進優(yōu)化的算法進行了對比,RL2 取得了與其相當?shù)男阅堋?/p>
本文只是對該領域一個非常精煉的簡介,我確信我忽略了一些想法或者概念。如果你需要其它(更明智的)的觀點,我強烈推薦這篇 Chelsea Finn 的博客(http://bair.berkeley.edu/blog/2017/07/18/learning-to-learn/,雷鋒網(wǎng) AI 科技評論譯文見這里),Chelsea Finn 是 MAML 論文的第一作者。
過去的幾周中,我試著從概念上對這些文章進行壓縮,并產(chǎn)生一個能夠普遍解釋這些文章的理解,在這個過程中我想到了一系列一般性的問題:
這些方法該如何被擴展到更多樣的任務?這些文章大多是在多樣性較低的任務分布中對概念進行了驗證:具有不同參數(shù)的正弦曲線、參數(shù)不同的吃角子老虎機、不同語言的字符識別。我認為,在這些任務上性能好并不是顯然能在復雜程度不同、模態(tài)不同的任務上得以泛化,例如圖像識別、問答和邏輯謎題結合的任務。然而,人類的大腦確實從這些高度多樣化的任務中形成了先驗,可以在不同的任務中來回傳遞關于世界的信息。我主要的問題是:只要你投入更多的單元計算它們,這些方法在這些更多樣的任務中是否會像作者們宣稱的一樣有效?或者,在任務多樣性曲線上的某一點上,是否存在一種非線性效應,使得在這些低多樣性的情況下起作用的方法在高多樣性問題中并不有效。
這些方法在多大程度上依賴于大量計算?這些文章中的大部分都使用小型簡單的數(shù)據(jù)集的部分原因是,當你每訓練一次,就會涉及一個內(nèi)部循環(huán),這個內(nèi)部循環(huán)則包含(有效地)用元參數(shù)效果相關的數(shù)據(jù)點訓練模型,以及測試,這都是需要耗費相當大時間和計算量的。由于現(xiàn)在摩爾定律似乎漸漸失效,在 Google 以外的地方研究這些算法的實用版本的可能性有多大?在這種情況下,每個內(nèi)部循環(huán)對一個難題進行迭代可能要花費數(shù)百個小時的 GPU 時間。
這些方法與尋找能顯式地對這個世界的先驗進行編碼的思路相比如何呢?語言是人類世界的百寶箱中一個十分有價值的工具。以機器學習的話來說,基本上是是將高度壓縮的信息嵌入我們知道該如何在概念上進行操作的空間中,我們可以將這些信息從一個人傳遞給另一個人。沒人可以獨立地從經(jīng)驗中提取出所有這些知識,所以除非我們弄清楚如何做出與這些學習算法相似的事,不然我懷疑我們是否真的可以整合關于世界的知識,建立解決問題的模型。
via towardsdatascience,雷鋒網(wǎng) AI 科技評論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉載。詳情見轉載須知。