LSTM用於元學習-"Learning to learn by gradient descent by gradient descent"-筆記詳解

Andrychowicz, Marcin, et al. “Learning to learn by gradient descent by gradient descent.” Advances in neural information processing systems. 2016.

1 簡介

這篇文章主要講用一個額外的LSTM學習出優化算法中以前需要手工設置的超參數。相比於MAML元學習的是模型的初始參數表示,這篇文章則着眼於元學習出一個優化算法。 現在很多方法是針對特定任務來設計優化算法,比如:RMSprop, Adagrad, ADAM等等。但是根據世上沒有免費的午餐定律,沒有一個特定的優化算法適用於所有的情形。而這篇文章則設計了一個optimizer gg (本文中使用LSTM)來學習出不同的優化方法。因此參數的更新方法如下:
θt+1=θt+gt(f(θt),ϕ) \theta_{t+1}=\theta_t + g_t(\nabla f(\theta_t),\phi)
其中,ϕ\phi是模型gg自身的參數,f(θt)\nabla f(\theta_t)是optimizee ff的loss值。

在這裏插入圖片描述

圖1:optimizee與optimizer之間的關係

上圖展示了optimizer和optimee的關係。optimizer在本文中就是一個LSTM,它爲optimizee學習出一個優化方法。而optimizee可以是任意一種使用梯度更新的模型。以下將使用θ\theta來表示optimizee中的參數,使用ϕ\phi來表示optimizer中的參數。

2 如何對optimizee進行參數更新?

簡單來說就是,一開始,optimizee有一個初始的θ0\theta_0,然後我們會從一系列任務中取出一個任務作爲一個batch,然後根據這個batch和初始參數θ0\theta_0,optimizee根據每一個輸入的**(x,y)(x,y)**計算出梯度L(x,y,θ)\nabla L(x,y,\theta),然後將梯度傳遞給optimizer。optimizer將會輸出一個值,記作g(L,ϕ)g(\nabla L,\phi),這個值將被返回給optimizee用於更新梯度(如式(1)所示)。

在這裏插入圖片描述

圖2:計算圖

所以optimizer其實就是一個梯度更新方法的“學習器”,通過訓練,optimizer將會告訴optimizee如何進行梯度更新。所以optimizer自身的參數更新方法其實就很關鍵了。

3 如何對optimizer進行參數更新?

在這篇文章中optimizer其實是一個LSTM,一個典型的LSTM有兩個輸入一個是每個batch的數據xtx^t,另一個是前一個單元的隱張量ht1h^{t-1} 。圖4展示了經典的LSTM模型中的一個子單元。將其中的xtx_t替換成爲L(x,y,θ)\nabla L(x,y,\theta)就構成了本文中optimizer的輸入。

在這裏插入圖片描述

圖3:經典的LSTM

不妨問自己一個問題:什麼樣的optimizer算是“好”的optimizer呢?當然是讓optimizee的loss值越最小的optimizer最好。所以optimizer的loss值應該是基於optimizee的loss值的。L(ϕ)L(\phi)可以記爲:
L(ϕ)=Ef[t=1Twtf(θt)] L(\phi)=E_f [\sum^{T}_{t=1}{w_t f(\theta_t)}]
其中T是時間步數,一般情況下wtw_t均取1。

本文中L(ϕ)L(\phi)取的是optimizee的loss之和。optimizer自身也需要一個優化方法來優化自身的參數,在本文中作者採用的是ADAM。然後我們就可以利用L(ϕ)\nabla L(\phi)和ADAM方法進行反向傳播來更新自身的參數。

對於一個輸入的參數張量θ=θ1,θ2,θ3,...,θm\theta=(\theta^1,\theta^2,\theta^3,...,\theta^m),對於其中每一個維度的θi\theta^i都會有一個對應的LSTM來學習出它的最佳梯度更新值。一般情況下一個模型可能有十萬百萬個參數,如果我們爲每一個參數都配備一個獨有的LSTM,那整個網絡顯然會變得非常龐大,以致於完全無法訓練。所以optimizer中的LSTM是全部共享參數ϕ\phi的。如圖4所示,所有的LSTM均共享參數ϕ\phi,但是它們各自的隱狀態hth_t是不共享的。由於每個維度上的LSTM輸入的hth_tL(θ)\nabla L(\theta)是不同的,所以即使它們的ϕ\phi相同,但是它們的輸出卻是不一樣的。實際上這也與常規的優化方法相似,比如ADAM,SGD等,它們也是爲每個維度的參數施行同樣的梯度更新規則。

在這裏插入圖片描述

圖4:所有的LSTM均共享參數,但是它們都有各自獨有的隱狀態

我一直比較困惑的是:我到底應該如何更新optimizer的ϕ\phi值?難道我需要利用所有維度的loss值來更新我optimizer的參數麼?如果這樣做的話顯然行不通,因爲每一輪訓練,我可能需要對ϕ\phi更新上萬次。後來我終於弄清楚了,其實這篇文章每次訓練只取optmizee中一個維度的loss值來更新optimizer的參數。

4 實驗

4.1 二次函數

這個實驗擬合一個10維的二次函數。其中有一句話是這樣的:

Each function was optimized for 100 steps and the trained optimizers were unrolled for 20 steps.

這句話容易讓人困惑,但是有人覺得這句話實際表達的是:optimizee會經過100次的優化,而optimizer每20步更新一次參數,也就是說optimizer每次接收20個loss值,構成自己(LSTM)20個時間步的輸入。以下引用@Adrien Lucas Ecoffet對這句話的解釋:

I assume this means that each epoch is made up of trying to optimize a new random function for 100 steps, but we are doing an update of the optimizer every 20 steps. The number of epochs is thus unspecified, but according to the graphs it seems to be 100 too.

在這裏插入圖片描述

4.2 Minist數據集

在這裏插入圖片描述

4.3-4.4 CIFAR-10數據集和Neural Art

略,見原文。

5 總結

這篇文章寫得不怎麼規範,文章結構不太清晰。這篇文章在引言部分對trasfer learning和generalization做了重點介紹,然後整篇文章的重點其實是meta-learning。本文的方法於2016年提出,比MAML要早一年。但它專注於優化方法的meta-learning,而MAML專注於初始權重的Meta-Learning,所以此方法完全可以跟MAML結合在一起使用。

Reference

1. From zero to research — An introduction to Meta-learning

2. Learning to learn by gradient descent by gradient descent

3. The pdf of Hong-yi Lee’s courses

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章