小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.
小樣本論文筆記5:Model Based - [6] One-shot learning with memory-augmented neural networks
文章目錄
- 小樣本論文筆記5:Model Based - [6] One-shot learning with memory-augmented neural networks
- 0. 前言
- 1. 要解決什么問題
- 2. 用了什么方法
- 2.1 模型結構
- 2.2 NTM&MANN
- 2.3 Least Recently Used Access 最少最近使用原則
- 3. 效果如何
- 3.1 數據集
- 3.2 Omniglot 分類
- 3.3 回歸-擬合從未見過的函數
- 4. 還存在什么問題&有什么可以借鑒
0. 前言
- 相關資料:
- 論文地址
- github
- 筆記參考
- 論文基本信息
- 領域:小樣本學習
- 作者單位:Google DeepMind
- 發表期刊和時間:ICML2016
- 一句話總結
- 提出了 Memory-Augmented Neural Network(MANN)結構,達到了,,,效果。
1. 要解決什么問題
使用帶有記憶功能的神經網絡Memory-Augmented Neural Network(MANN)元學習算法解決小樣本學習問題。一個尺度可變的網絡需要符合兩點需求:
1、信息必須以特征方式存儲在內存中,且具有穩定和易以元素形式訪問的性質;
2、參數數量不應該與內存大小綁定
而Neurak Turing Machines(NTM)和內存網絡符合這種要求。因此,作者采用MANN進行長期和短期記憶的元學習任務。
2. 用了什么方法
2.1 模型結構
- 如圖(a)所示,整個訓練過程分成多個Episode,每個Episode中包含若干個樣本 x x x和對應的標簽 y y y,將所有的樣本組合成一個序列, x t x_t xt?表示在 t t t時刻輸入的樣本, y t y_t yt?表示與之對應的標記,但要注意的是輸入時 x t x_t xt?和 y t y_t yt?并不是一一對應的,而是錯位對應,即 ( x t , y t ? 1 ) (x_t,y_{t-1}) (xt?,yt?1?)為tt時刻的輸入,這樣做的目的是讓網絡有目的的記住先前輸入的信息,因為只有保留有效的信息在下次再遇到同類樣本才能計算得到對應的損失。在每個Episode之間樣本序列都是被打亂的,這是為了避免網絡在訓練過程中慢慢記住了每個樣本對應的位置,這不是我們希望的。可以看到對于每個單元(圖中灰色的矩形塊)他的輸入信息既有前一個單元輸出的信息,又有當前輸入的信息,而輸出一方面要預測當前輸入樣本的類別,又要將信息傳遞給下個時刻的單元,這與LSTM或RNN很相似。
- 在此基礎上作者增加了一個外部記憶模塊(如圖(b)中的藍色方框),他用來儲存在當前Eposide中所有"看過"的樣本的特征信息。怎樣去理解他呢?比如網絡第一次看到一張狗的照片,他并不能識別出它是什么,但是他把一些關鍵的特征信息記錄下來了,而且在下個時刻網絡得知了它的類別標簽是狗,此時網絡將特征信息與對應的標簽緊緊地聯系起來(Bind),當網絡下次看到狗的照片時,他用此時的特征信息與記憶模塊中儲存的特征信息進行匹配(Retrieve,真實的實現過程并不是匹配,而是通過回歸的方式獲取信息,此處只是方便大家理解),這樣就很容易知道這是一只狗了。這一過程其實與人類的學習模式非常接近了,但作者是如何利用神經網絡實現這一過程的呢?作者引入了神經圖靈機(NTM),為了方便下面的講解此處需要先介紹一下NTM。
2.2 NTM&MANN
-
神經圖靈機的結構如上圖所示,它由控制器(Controller)和記憶模塊(Memory)構成,控制器利用寫頭(Write Heads)向記憶模塊中寫入信息,利用讀頭(Read Heads)從記憶模塊中讀取信息。
-
回到本文的模型中(如上圖),作者用一個LSTM或前向神經網絡作為控制器,用一個矩陣 M t M_t Mt?作為記憶模塊。給定一個輸入 x t x_t xt?,控制器輸出一個對應的鍵(Key) k t k_t kt?,可以理解為是一個特征向量,這個特征向量一方面要通過寫頭寫入記憶模塊,一方面又要通過讀頭匹配記憶模塊中的信息,用于完成分類任務或回歸任務。我們先介紹讀的過程,假設記憶模塊中已經儲存了許多的特征信息了,每個特征信息就是矩陣中的一行(特別注意,此處一行不是代表一個特征向量,而是某種抽象的特征。寫入的過程并不是將特征向量一行一行地堆放到記憶模塊中,寫入的過程遠比這個復雜),此時我們要計算當前特征向量 k t k_t kt?與記憶模塊 M t M_t Mt?中的各個向量之間的余弦距離 D ( k t , M t ( i ) ) D(k_t,M_t(i)) D(kt?,Mt?(i))(原文中用 K K K表示,為了避免與 k t k_t kt?混淆,特此改為 D D D),然后利用softmax函數將其轉化為讀取權重 w t r ( i ) w^r_t(i) wtr?(i),最后利用回歸的方式(加權求和)計算得到提取出來的記憶 r t = ∑ i w t r ( i ) M t ( i ) r_t=\sum_iw^r_t(i)M_t(i) rt?=∑i?wtr?(i)Mt?(i)。控制器一方面將 r t r_t rt?輸入到分類器(如softmax輸出層)中獲取當前樣本的類別,另一方面將其作為下一時刻控制器的一個輸入。
2.3 Least Recently Used Access 最少最近使用原則
- 寫的過程就是描述如何合理有效的將當前提取的特征信息存儲到記憶模塊中。作者采用了最少最近使用方法(Least Recently Used Access,LRUA),具體而言就是傾向于將特征信息存儲到使用次數較少的記憶矩陣位置,為了保護最近寫入的信息;或者寫入最近剛剛讀取過的記憶矩陣位置,因為相鄰兩個樣本之間可能存在一些相關信息。寫入的方法也是為記憶模塊中的每一行計算一個寫入權重 w t w ( i ) w^w_t(i) wtw?(i),然后將特征向量 k t k_t kt?乘以對應權重,在加上先前該位置保存的信息 M t ? 1 ( i ) M_{t-1}(i) Mt?1?(i)得到當前時刻的記憶矩陣 M t ( i ) = M t ? 1 ( i ) + w t w ( i ) k t M_t(i)=M_{t-1}(i)+w^w_t(i)k_t Mt?(i)=Mt?1?(i)+wtw?(i)kt?。而寫入權重 w t w w^w_t wtw?計算過程如下:
w t w ← σ ( α ) w t ? 1 r + ( 1 ? σ ( α ) ) w t ? 1 l u \mathbf{w}_{t}^{w} \leftarrow \sigma(\alpha) \mathbf{w}_{t-1}^{r}+(1-\sigma(\alpha)) \mathbf{w}_{t-1}^{l u} wtw?←σ(α)wt?1r?+(1?σ(α))wt?1lu?
w t ? 1 r \mathbf{w}_{t-1}^{r} wt?1r? 表示上一時刻的讀取權重,該值由讀的過程計算得到,權重越大表示上一時刻剛剛讀取過這一位置儲存的信息; σ ( ) \sigma() σ()表示sigmoid函數, α \alpha α表示一個門參數,用于控制兩個權重的比例。 w t ? 1 l u w^{lu}_{t-1} wt?1lu?表示上一時刻最少使用權重,其計算過程如下:
w t l u ( i ) = { 0 if? w t u ( i ) > m ( w t u , n ) 1 if? w t u ( i ) ≤ m ( w t u , n ) w_{t}^{l u}(i)=\left\{\begin{array}{ll} 0 & \text { if } w_{t}^{u}(i)>m\left(\mathbf{w}_{t}^{u}, n\right) \\ 1 & \text { if } w_{t}^{u}(i) \leq m\left(\mathbf{w}_{t}^{u}, n\right) \end{array}\right. wtlu?(i)={01??if?wtu?(i)>m(wtu?,n)?if?wtu?(i)≤m(wtu?,n)?
其中, m ( w t u , n ) m(w_t^u,n) m(wtu?,n)表示向量 w t u w_t^u wtu?中第 n n n個最小的值, n n n表示內存讀取次數, w t u w_t^u wtu?表示使用權重,其計算過程如下
w t u ← γ w t ? 1 u + w t r + w t w \mathbf{w}_{t}^{u} \leftarrow \gamma \mathbf{w}_{t-1}^{u}+\mathbf{w}_{t}^{r}+\mathbf{w}_{t}^{w} wtu?←γwt?1u?+wtr?+wtw?
包含三個部分,上個時刻的使用權重 w t ? 1 u w_{t-1}^u wt?1u?, γ \gamma γ是衰減系數,讀取權重 w t r w^r_t wtr?和寫入權重 w t w w^w_t wtw?,當 w t u ( i ) w_t^u(i) wtu?(i)小于 m ( w t u , n ) m(w_t^u,n) m(wtu?,n)時表示位置 i i i是使用次數最少的位置之一,那么在下次寫入時,使用該位置的概率就更高。
根據寫入權重更新記憶矩陣:
M t ( i ) ← M t ? 1 ( i ) + w t w ( i ) k t , ? i \mathbf{M}_{t}(i) \leftarrow \mathbf{M}_{t-1}(i)+w_{t}^{w}(i) \mathbf{k}_{t}, \forall i Mt?(i)←Mt?1?(i)+wtw?(i)kt?,?i
因此,內存可以寫入零內存槽或先前使用的槽;如果是后者,那么最少使用的內存就會被刪除。
3. 效果如何
3.1 數據集
- 數據集有兩種:
- 用于分類任務和Omniglot;
- 從固定參數的高斯過程采樣函數,用于回歸;
對Omniglot數據集進行了旋轉和變換等數據增強操作,利用旋轉新增了一些類別;最終1200類用于訓練,423類用于測試。并且對圖片縮放到20*20.
3.2 Omniglot 分類
-
在訓練10萬個Episode(包括5個隨機選取的類別和5個隨機選取的標簽???類別和標簽對應嗎?),對模型用一系列的測試episode進行測試。在該過程中,沒有進行更多的訓練,并且模型從未見過Omniglot測試集中的類別。模型表現出了高分類精度:在樣本第二次被輸入模型時,就獲得了在每個episode上82.8%的準確率,第五次出現時,精度94.9%,第10次出現時則表現出98.1%的精度(所以,在測試過程中記憶矩陣也是會改變的?所以才能記住測試集中樣本的特征,從而在下次“看見”同類樣本時才能“認出來”嗎?)
與人類表現相比,模型效果要優于人類對新樣本的識別能力。具體對人類的測試過程如下。參與者的任務細節:- 1、對于一張圖片,他們必須從1到5選擇一個合適的數字標簽。
- 2、然后,那張圖片再次出現,參與者需要根據圖片的類別標簽做一個不計時的預測。
- 3、然后,圖片消失,受試者被給予關于圖片標簽正確性與否的反饋。
- 4、正確的標簽會被展示無論預測結果準確度高低,目的是讓受試者進一步確認正確的預測內容。
- 5、在一個短期的2s延時之后,一個新的圖片會出現,然后重復這個過程。
并且,有趣的是,即使是MANN第一次碰到新樣本,它的分類效果也好于“隨機瞎猜”。因為,它會根據“記憶”排斥一些確定的錯誤選項。這個過程也跟人類參與者的思考過程類似。
-
表2是分別使用5類和15類分類時,MANN與其他結構對比的分類效果。KNN的效果其實還不錯。無參,并且對記憶空間無限制。但MANN使用LRUA效果還是有效的,并且隨著次數的增多,精度逐步上升。
3.3 回歸-擬合從未見過的函數
- x值固定,是數據樣本,y值是函數值;(a)是MANN經過20個樣本之后對x的預測值;(b)是GP產生的函數值。
4. 還存在什么問題&有什么可以借鑒
- 該算法巧妙的將NTM應用于小樣本學習任務中,采用顯示的外部記憶模塊保留樣本特征信息,并利用元學習算法優化NTM的讀取和寫入過程,最終實現有效的小樣本分類和回歸。文中提到的長期記憶是通過控制器網絡權重參數的更新實現的,因為采用了錯位配對的方式,因此要到第二次見到該類別的圖像時才能得到相應的損失,并進行反向傳遞,因此權重更新過程是非常緩慢的,能夠保留很久之前的信息(如果權重更新速度很快,可能為了識別新的圖片類別,就迅速忘記之前識別過的圖片了)。短期記憶是由外部記憶模塊實現的,有人可能會覺得這個記憶模塊不是隨著訓練過程不斷儲存各個時刻的信息嗎?為什么叫做短期記憶呢?這是因為作者在兩個Eposide之間會清除記憶模塊,以避免兩個Eposide記憶之間相互干擾,而一個Eposide只是有若干個類別的少量樣本構成的,相對于整個學習過程他仍然屬于短期記憶。該算法整個思想都非常的新穎,NTM模型也十分的巧妙,作者自己也認為非常接近人類學習認知的模式了,**但不知道是不是因為訓練比較困難的原因,該方法并沒有大規模的推廣。**在學習該文章時,有必要提前了解一下NTM模型的原理,否則學習起來會比較困難。
總結
以上是生活随笔為你收集整理的小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python开发部署时新增数据库中表的方
- 下一篇: RPG Maker