當前位置:
首頁 > 知識 > 解析:學習如何梯度下降與學習新的演算法

解析:學習如何梯度下降與學習新的演算法

AI 研習社:本文作者 Cody Marie Wild,她是一位機器學習領域的數據科學家,在生活中還是名貓咪鏟屎官,她鍾愛語言和簡潔優美的系統。在這篇文章中,Cody 介紹了元學習的基本概念和方法類別,討論了「元學習」到底在學什麼、又有哪些限制。AI 研習社把全文編譯如下。

當我第一次聽到「元學習」的時候,它的概念是如此地令我沉醉:這個項目要構建不僅能夠進行學習的機器,這些機器還能學習「如何學習」的方法。理想的元學習演算法應該能夠根據反應其性能的信號去修改它們的基本結構、參數空間,或者能夠在它們面對新的環境時利用它們之前積累起來的經驗。簡而言之:當未來主義者憧憬著通用強人工智慧時,符合這種描述的組件就是這個願景必不可少的組成部分。

本文的目的在於從這些高屋建瓴的概念慢慢落到實處,從我們所想像的那些抽象的能夠自我修改的智能體可以做的事開始,一直到這個領域的現狀,來討論這個領域的成功、它的局限性,以及我們距離魯棒的多任務人工智慧還有多遠。

為什麼人類可以做到我們習以為常的事?

具體而言:在許多強化學習任務中,相對於人類而言,演算法需要花費長得多的時間去學習任務;目前最先進的能夠玩 Atari 遊戲的演算法需要花 83 個小時(或 1800萬幀)的遊戲時間才能達到人類的平均表現,大多數人在玩了幾個小時遊戲之後就能達到這個水平。

圖1 該圖來自最近的 Rainbow RL 的論文

這種差異導致機器學習研究人員提出這樣的一個問題:人類大腦在這樣的任務體現了什麼樣的工具和能力,我們如何能夠用統計學和資訊理論的方式理解這些工具呢?具體來說,元學習的研究人員所追求的策略似乎可以分為兩類,它們大致可以和下面兩種人類認知「什麼是工具」的理論相對應。

學到的先驗知識:從這一點看,人類可以很快地學習新的任務,因為我們可以重複使用我們已經在之前的任務中學到的信息。比如直覺上物體如何在空間中移動的物理特徵,或者在一個電子遊戲中死掉會降低獎勵的元知識。

學到的策略:這種思路是,在我們的生活中(或許在進化的過程中),我們不僅僅收集對象級別的關於世界的知識,而且還建立了一個更高效的神經結構,這種結構使得我們即使在非常新的環境中也能接受輸入,並且準確地將其轉化為輸出或者策略。

現如今,很明顯,這兩個觀點並不是相互排斥的,而且這兩者之間甚至並沒有一個硬性的、快速區分它們的邊界:我們與世界互動的一些硬編碼策略可能是基於對世界的深刻的先驗知識,正如事實上(至少對於所有與這篇博文相關的目的而言)世界有一個因果結構。即便如此,我覺得這兩個想法的區別足夠大,值得我們將它們分到這兩個標籤之下,並且將他們看作一個平面上的 x 和 y 坐標。


別忘了我們的小(單)樣本學習(one-shot learning)

在正式研究元學習之前,了解一些與單樣本學習相關的概念基礎是十分有用的。如果說元學習的問題在於「如何建立一個能快速學習新任務的模型」,那麼單樣本學習的問題則是:我們如何建立一個模型,它能夠在只看到某個類別的一個示例後,就能夠學習如何去對這個類別進行分類。

現在,我們不妨思考一下,從概念層面上說,是什麼讓單樣本學習如此困難。如果我們試著只用某一個類別的一個樣本數據上訓練一般性的模型,這幾乎必然會產生過擬合。如果一個模型僅僅能得到一個手寫數字的數據,比方說「3」,它不會知道一張圖片可以經過怎樣的像素變化之後還能在本質上是一個「3」。例如,如果這個這個模型僅僅看到了一組數字中的第一個「3」,他如何能知道第二個「3」也是同種數字這樣的先驗呢?從理論上講,我們感興趣的類別標籤在網路學習中與構成它的線條的粗細情況可能相關嗎?對於人類來說,這似乎是很愚蠢的想法,但是由於我們只有一個「3」的示例,網路需要進行的推斷並不簡單,所以這也不失為一種有效的嘗試。

更多的數字「3」的示例有助於解決這個問題,因為我們可以了解圖像的什麼特性決定了它是「3」:主要是垂直方向上存在的兩個凸形。以及了解什麼樣的修改是無關緊要的:線條的粗細、角度的銳度。為了成功地進行單樣本學習,我們必須激勵網路去學習什麼樣的屬性能夠在不給出每個數字所允許的具體的變化的情況下,泛化性地將一個數字和另外的數字區分開來。

在單樣本學習中,一個常見的技巧是學習一個嵌入空間,在這個空間中計算兩個樣本的表示之間的歐式距離,這是一種很好的計算兩個樣本是否屬於同一類的方法。從直覺上來說,這需要學習在這個分布中總體來講可以使得類別間的差異最強的內部維度,並且學習如何將輸入壓縮、轉化成最相關的維度。

我發現,首先考慮這樣的問題是一個很有用的基礎。我們並非試圖學習如何總結各種不同的類之間共通的信息和模式,而是試圖學習一組任務中的總會存在的規律,並且每個任務都有自己的內部結構或者目標。

如果要我以從低到高的抽象程度為標準對神經網路的元參數進行排序,排序結果應該如下:

一個能夠通過超參數梯度下降法學習到完整的任務分布上的數據表示的網路。MAML 和 Reptile 就是一個這樣做的很通俗易懂的例子。而共享層次的元學習也是一種有趣的方法,它將學習數據表示作為被一個主策略控制的顯式子策略去學習。

一個能夠學著去優化自己的梯度下降操作的參數的網路。這些參數包括:學習率、動量、自適應學習率演算法的權重。在這裡,我們開始沿著修改學習演算法本身的道路前進,但是我們的方法是有限的、參數化的。這就是《Learning to Learn by Gradient Descent by Gradient Descent》(https://arxiv.org/abs/1606.04474)一文所做的工作。

一個能夠學到本身就是神經網路的內循環優化器的網路。也就是說:在這裡,梯度下降演算法被應用於更新神經優化器網路的參數,使其在各項任務中運行良好,但是每個任務中輸入數據到輸出預測的映射是完全由網路進行的,沒有任何顯式的損失或者梯度計算。這就是 RL2(https://arxiv.org/abs/1611.02779)和 A simple neural attentive meta learner (https://openreview.net/forum?id=B1DmUzWAW) 的工作方式。

為了使本文不那麼龐大,我將主要關注 1 和 3,以說明這個連續的概念譜的兩端。


其它名稱的任務

此外還有一個小問題,最後一個......我保證!我希望能夠澄清一個令人困惑的話題。通常,在關於元學習的討論中,你常常會看到「任務分布」的概念。你可能會注意到這是一個定義不明確的概念,是的,你是對的!似乎沒有一個明確的標準來判斷什麼時候一個問題是一個任務,或者一個任務分布。例如:我們是否應該把 ImageNet 看作一個任務——物體識別——或者多項任務:在一個任務中區分狗,在另一個任務中區分貓。為什麼將玩 Atari 遊戲視為一個單獨的任務,而不是將遊戲中的各個關卡分別作為多個任務?

我已經能從這一切描述中總結出來的是:

「任務」的概念與「我們建立了什麼樣的數據集」這兩個概念是糾纏在一起的,因為我們會很自然地把學習一個數據集作為一個單一的任務

對於任何給定的任務分布,其中的任務之間的差異可以是非常明顯的(例如:任務分布中的每個任務都在學習一個不同振幅的正弦波 vs 任務分布中的每個任務都在玩不同的 Atari 遊戲)

因此,我們不應該直接說「噢!這個方法可以泛化到,這說明它能夠泛化運行在一些任意的不同的任務分布上。」從方法的有效性上說,這當然不是一個不好的證據,但是我們確實需要批判性思考,去考慮:為了在所有的任務上表現出色,網路需要多大的靈活性。


那些以動物命名的令人費解的名字

在 2017 年初,Chelsea Finn 和來自加州大學伯克利分校的團隊發布了一項被稱為「MAML:模型無關的元學習」的技術(https://arxiv.org/abs/1703.03400 )。

如果你認為這個笑話不是有意為之的,那麼請看一下論文中的「MAML 物種」一節。

在學習策略和學習先驗之間,這種方法傾向於後者。這個網路的目標是訓練一個模型,對於一個新任務只需要做單步梯度更新,就可以很好地在這個任務上進行泛化。偽代碼大概長這個樣子:

1.隨機初始化一個網路的參數,把這組參數記為 theta。

在一個任務分布 T 中選擇一些任務 t。使用訓練集中的 k 個(k通常在 10 左右)樣本,在當前參數集所在的位置執行一個梯度步,你將得到一組最終的參數。

2.在測試集上評估使用最終這組參數的模型性能。

3.然後,求模型執行任務集 t 的性能關於初始參數 theta 的梯度。然後根據這個梯度更新參數,接下來回到第一步,使用剛剛更新的 theta 作為這一輪的初始 theta 值。

4.這是在做什麼呢?從一個非常抽象的層面上講,這是在尋找參數空間中的一個點,這個點對於任務分布中的許多任務來說,在期望上是泛化最好的那個點。你也可以認為這就像迫使模型在對參數空間的探索中維持了一定的不確定性和保守性。簡而言之:一個認為它的梯度能完全表示整體分布的網路,可能會陷入一個損失特別低的區域,MAML 更容易被激勵去找到一個靠近多個損失函數的「峽谷」尖點的區域,這些「峽谷」在所有的任務上的期望損失都相當低。正是這種對於保守性的激勵使 MAML 不會像那些一般通過少量來自新任務的樣本訓練的模型一樣過擬合。

2018 年初,OpenAI 又發表了一篇名為 Reptile 的論文(https://arxiv.org/abs/1803.02999,AI 科技評論往期文章點這裡)。正如你可能從它的名字中猜到的那樣——使用了早先的 MAML 的方法起名。Reptile 以 MAML 為前提,但是找到了一種更高效的循環計算更新初始參數的方法。MAML 需要顯式地計算在初始化參數 theta 下運行的測試集損失的梯度,Reptile 則僅在每項任務中執行了幾步 SGD 更新,然後用更新結束時的權重和初始權重的差異,作為用於更新初始權重的「梯度」。

這裡的 g_1 代表了為每個任務只執行一次梯度下降步得到的更新後的梯度

從直觀上說,這項研究能運行出任何結果都非常奇怪,因為簡單的說,這看起來和在將所有任務合併而成的一個任務上對模型進行訓練沒有任何不同。然而,作者認為,由於對每個任務都使用了 SGD 的多個步驟,每個任務損失函數的二階導數都被影響了。為了做到這一點,他們將更新工作分解為兩部分:

第一項:促使結果趨向「聯合訓練損失」,也就是說,如果你僅僅使用合併的任務作為數據集,訓練會得到什麼樣的結果。

第二項:促使初始化參數趨向於一個點,在這一點,後續的 SGD mini-batch 的梯度都是接近的:也就是說,各個 mini-batch 之間的梯度差異很小。作者推測,這一項能夠使得訓練時間更快,因為它促使模型在每個任務上都處於一個穩定、低反差的訓練區域。

我選擇 MAML/Reptile 的組合代表事物的「學習到的先驗」,因為從理論上講,這個網路通過對學習內部數據表示取得了成功,這些數據表示要麼有助於對全部的任務分布進行分類,要麼在參數空間中與普遍使用的數據表示相接近。

為了進一步明確這一點,請看上圖。上圖對 MAML 和一個預訓練網路進行了比較,這兩個網路都用一組由不同相位與振幅組成的正弦曲線組成的回歸任務進行訓練。這之後,兩個網路都針對新的具體任務進行了精細調節(fine-tune):如紅色曲線所示。紫色三角的代表寥寥幾步梯度步中使用的數據點。與預訓練網路相比,MAML 學到了例如——正弦曲線具有周期性結構:在 K=5 時,它可以在沒有真正從空間的這一區域觀察到數據的情況下快得多地將左邊的峰值移到正確的地方。雖然說很難判斷我們的解釋是不是與底層發生的情況完美地相匹配,但我們不妨推測: MAML 在算出兩個相關正弦曲線不同之處——相位和振幅——方面做得更好,同時也能更好地從給定的數據中學到它們的數據表示。


一直下降的網路

對一些人來說,他們使用已有的、像梯度下降這樣的演算法,來對全局先驗進行學習。但誰說我們以往設計的演算法就是最高效的呢?難道我們不能學到更好的方法嗎?

這就是 RL2(通過慢速增強學習進行快速增強學習)所採用的方法。這個模型的基礎結構是循環神經網路(具體來說,是一個 LTSM 網路)。因為 RNN 有儲存狀態信息的能力,並且給出不同輸出,這些輸是該狀態的函數,所以理論上它們可以學到任意可計算的演算法:換而言之,它們都具有圖靈完備的潛力。以此為基礎,RL2 的作者設計了一個 RNN,每一個用於訓練 RNN 的「序列」事實上都是一組具有特定 MDP(MDP = Markov Decision Process,馬爾科夫決策過程。基於這個解釋,你只需將每次 MDP 看作定義一系列可能動作並且在環境中對這些動作產生獎勵)的經驗片段。接著,會在許多序列上訓練這個 RNN,像一般的 RNN 一樣,這樣就會對應多個不同的 MDP,並且 RNN 的參數會被優化,使得找所有序列或試驗集合中產生的負反饋(regret)較低。負反饋(regret)是一個可以捕獲你一組事件中所有獎勵的度量,所以除了激勵網路在試驗結束時得到更好的策略之外,它還可以激勵網路更快地進行學習,以致於網路會在低回報的策略中更少地使用探索性動作。

如圖所示,這是運行在多重試驗上的 RNN 的內部工作機制,對應多個不同的 MDP

在試驗中的每一個點,網路採取的動作都是一個以從都個任務中學到的權重和隱含狀態的內容為常數的函數,隱藏狀態的內容是作為數據的函數進行更新並用作動態參數集合。因此,RNN 在多個任務中學習到了如何更新隱含狀態的權重,以及控制如何利用隱含狀態的權重。然後,在一個給定的任務中,隱藏狀態可以描述網路的確定性、當前應該繼續探索還是利用學到的信息,等等,作為它在這個特定任務中看到的數據的函數。從這個意義上講,RNN 這種學習演算法決定了如何最好地探索空間、把什麼樣的策略看作最佳策略,而且通過學習使該演算法在一組任務分布上得到很好的效果。該作者把 RL2 的架構和專門對任務進行過漸進優化的演算法進行了對比,RL2 取得了與其相當的性能。


我們能對此進行擴展嗎?

本文只是對該領域一個非常精鍊的簡介,我確信我忽略了一些想法或者概念。如果你需要其它(更明智的)的觀點,我強烈推薦這篇 Chelsea Finn 的博客(AI 科技評論譯文見這裡),Chelsea Finn 是 MAML 論文的第一作者。

過去的幾周中,我試著從概念上對這些文章進行壓縮,併產生一個能夠普遍解釋這些文章的理解,在這個過程中我想到了一系列一般性的問題:

這些方法該如何被擴展到更多樣的任務?這些文章大多是在多樣性較低的任務分布中對概念進行了驗證:具有不同參數的正弦曲線、參數不同的吃角子老虎機、不同語言的字元識別。我認為,在這些任務上性能好並不是顯然能在複雜程度不同、模態不同的任務上得以泛化,例如圖像識別、問答和邏輯謎題結合的任務。然而,人類的大腦確實從這些高度多樣化的任務中形成了先驗,可以在不同的任務中來回傳遞關於世界的信息。我主要的問題是:只要你投入更多的單元計算它們,這些方法在這些更多樣的任務中是否會像作者們宣稱的一樣有效?或者,在任務多樣性曲線上的某一點上,是否存在一種非線性效應,使得在這些低多樣性的情況下起作用的方法在高多樣性問題中並不有效。

這些方法在多大程度上依賴於大量計算?這些文章中的大部分都使用小型簡單的數據集的部分原因是,當你每訓練一次,就會涉及一個內部循環,這個內部循環則包含(有效地)用元參數效果相關的數據點訓練模型,以及測試,這都是需要耗費相當大時間和計算量的。由於現在摩爾定律似乎漸漸失效,在 Google 以外的地方研究這些演算法的實用版本的可能性有多大?在這種情況下,每個內部循環對一個難題進行迭代可能要花費數百個小時的 GPU 時間。

這些方法與尋找能顯式地對這個世界的先驗進行編碼的思路相比如何呢?語言是人類世界的百寶箱中一個十分有價值的工具。以機器學習的話來說,基本上是是將高度壓縮的信息嵌入我們知道該如何在概念上進行操作的空間中,我們可以將這些信息從一個人傳遞給另一個人。沒人可以獨立地從經驗中提取出所有這些知識,所以除非我們弄清楚如何做出與這些學習演算法相似的事,不然我懷疑我們是否真的可以整合關於世界的知識,建立解決問題的模型。

原文地址:

https://towardsdatascience.com/learning-about-algorithms-that-learn-to-learn-9022f2fa3dd5

從Python入門-如何成為AI工程師

BAT資深演算法工程師獨家研發課程

最貼近生活與工作的好玩實操項目

班級管理助學搭配專業的助教答疑

學以致用拿offer,學完即推薦就業

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

雲從周翔:三年打磨,雲從如何成為計算機視覺國家隊
我是這樣從零開始用深度學習做狗臉識別 iOS App 的

TAG:AI研習社 |