ICLR 2017 | Attention 和 Memory Networks
ICLR 2017 | Attention 和?Memory Networks
2016-11-09小?S程序媛的日常
今天分享 ICLR 2017,主題是 Attention 和 Memory。這兩者作為2014年到2016年最火的 Neural Network Mechanism 和 Architecture,將非常多的 Vision 和 NLP 任務的 performance 都提高到了不少。尤其是 Attention,已經成為了新的 state-of-the-art,不加 Attention 的 NN 幾乎無法再和 attention-based models 抗衡。
然而,Attention 和 Memory 這兩者之間其實也有著密不可分的關系,以及其兩者都有各自的不足。ICLR 2017 中便有許多對于它們兩者的討論與改進工作。于是乎,今天會分享的論文如下(仍然只是部分,剩下的下次分享):
1. Structured Attention Networks
2. Hierarchical Memory Networks
3. Generating Long and Diverse Responses with Neural Conversation Models
4. Sequence to Sequence Transduction with Hard Monotonic Attention
5. Memory-Augmented Attention Modeling For Videos
第一篇[1] 是今天推薦的重中之重吧,它將我們經典的 attention mechanism 和他們提出的新的兩種(兩個 attention layer)統一在一個框架里,使得 attention mechanism 從普通的 soft annonation 變成了既能 internally modeling structure 信息又不破壞 end-to-end training 的新機制。
具體來講,我們以往的 attention 機制的作用方式是,encoder 端的 input x_1,..., x_n,這個被作者稱為 x,decoder 端已經解碼產生的序列 y_1, ..., y_n,這個被作者稱為 q(query)。那么,attention 機制就可以看做是一個 attention position 基于 x, q 的分布,如下式:
有了這樣一個框架,我們就可以將一系列獨立的 z 變成了互相之間有關聯,有依賴——從而也就有了 structure 信息的 z 的分布表達——也就是一種 structured attention networks。為了實現這個,作者使用了 CRF 來建模,并給出了兩種具體的例子。
第一個例子叫,segmentation attention layer,它可以用于選擇源句子中的 sub-sequence(而不再是經典 attention 中以 word 為單位了)。它的設計也十分簡單直觀,就是我們把 z 像 gate 機制一樣,變成 z=[z_1, ..., z_n],并且 z_i \in {0,1}。這樣的話,對于我們之前的 annonation 就可以得到如下的表達:
這個表達使得我們可以同時選擇多個 z+i,并且 z_i 與 z_j 之間是有依賴關系的,而這個依賴關系就是通過上式中的 p(z_i | x,q) 來建模的:
那么第二個例子,則在這種雖然是 seb-sequence 上但仍然是 continuous、順序進行的基礎上,又改進了一些,被叫做 syntactic attention layer。它的 motivation 是直接去建模我們 NLP 中的語法樹結構。這一次,我們要從 z_i 變成 z_{ij},用它來表示一對語法樹中的父結點和子結點。于是乎,類似的,我們就可以得到如下這個建模表達:
用這兩種新的 attention layer,作者在多個任務上都取得了比經典 attention layer 更好的結果。
而 soft attention 的計算量其實是非常龐大的,hard attention 又不夠 stable——分別取其二者之精華后,這第二篇論文[2] 的作者便想出了 hierarchical memory networks(HMN)。HMN 是利用層次化結構,將 soft attention 每次需要計算的量縮小。那么如何“找到”這種層次化結構呢?它們提出使用一種叫 Maximum Inner Product Search(MIPS)的方法。MIPS 不僅可以建立這種層次化形式的 memory,還能通過計算這個 maximum inner product 的值,找到和 query 最相關的 memory 子集。最后,因為這種 MIPS 的精確計算也很難,它們又提出了幾種近似的計算方法。最后,它們在 SimpleQuestions(SQ)這個數據集上做了實驗,實驗結果如下:
第三篇[3] 要介紹的論文我也比較推薦。它來自 Google Research 和 Google Brain 團隊。乍一看 Abstract 會覺得并沒有什么新技術(research point),但其實整篇文章對于當前 sequence-to-sequence conversation models 中存在的問題和背后的原因,分析得相當清楚。雖然最后提出的 solution 都有些偏工程化,但不妨礙是一篇值得我們也去嘗試的好工作。并且,在這篇文章[3]中,作者也修改了 attention 機制,使得以前只依賴于 input(source-side) 的 attention 能融合進已經產生的 output(target-side)的信息——所以被他們成為 target-side attention。
因為今天重點是介紹 attention 和 memory,所以這篇文章中的其他 point 先不提了。只說這個 target-side attention。作者指出,我們經典的 attention 機制在計算的時候,它的 attended pool 只包含了 C,也就是只包含了 source-side encoder 中的信息——這個模型也就只能 attend 這些 candidates(比如說 input words)。這個本來,在機器翻譯這種任務上是沒問題的,因為畢竟我們的 source sentence 已經包含了我們要產生的全部信息了;但是在對話這種任務上就有問題了。問題是啥呢,我們很多時候,source sentence,也就是用戶說的那句話,是不夠 informative 的,比較短——這個時候反而是 decoder 中已經產生的 output 可能會對我們更有幫助。于是乎,直接的解決辦法就是把 decoder 中已經產生的序列也扔到 attention candidate pool 里去。就像這樣:
這樣做還有啥好處呢,好處就是我們的 decoder 的 hidden states 就可以少“記”一些已經生成的信息了,也就能更好的去做整體的語義建模和表達。
這篇論文[4] 的二作是 NLP 里良心出品的 Yoav Goldberg,所以第一時間找來讀了。本文[4] 設計的 attention mechanism,也和第三篇論文[3] 有相似之處——比如都考慮了 decoder 端已經產生的 input。更獨特的是,它融入了一種 hard attention 的思想,使得在 decoder 的過程中,decoder 并不是一直在 output(不是每個 step 都產生輸出),而是像被一個 gate 控制一樣,有的時候需要輸出,有的時候則需要重新修改 attention 值(在 encoder 端進行 move)。那么這樣的機制,比以往的經典的 soft attention 的好處在哪里呢?這是因為,soft attention 是比較依賴于 training data 才能自動學好這種 alignments 的,然而很多時候我們的小語料不存在足夠多的能產生好 alignments 的數據 pair——這時候 hard attention 就能發揮出更好的作用了。
那么具體來講,他們的主要改造其實就在于那個 control mechanism。這個模型不再只由 decoder 的 output 作為唯一 action,而是增加了 encoder 端 hard attention 的第二種 action:
所以,當在進行 training 的時候,就會在 step/write 兩種 action 之間進行交替(不是穩定交替),只由當當前 action 是 write 的時候,output 才會輸出;否則,當 action 是 step 的時候,encoder 端的 hard attention head 就會 move 一個位置,并且將新的 encoded representation 計算出來:
最后,為了對比這種他們提出的 hard attention 機制和經典 soft attention 機制的效果與作用,作者[4] 也畫了如下的圖:
可以看到 legte->lege 和 flog->fliege 在 hard attention 機制(也就是作者[4] 提出的 model 上)都是如何被學出來的。
今天最后一篇要推薦的論文[5] 從題目就可以看出,把 attention 和 memory 結合在了一起。但其實我個人覺得,它主要結合上的貢獻還是在于像論文[3] 一樣,指出了 decoder 一邊需要考慮 encoder端的 attention,一邊還需要考慮自己的 language model generation,是很難 balance 的事情。更糟糕的是,因為他們[5] 做的是 video caption generation,這種多幀圖片和每張圖片中不同的 attention location 更加劇了這種 decoder 的困難。
于是乎,他們不僅提出了一種 temporal modeler(TEM)去選擇每一幀(each frame)的 attention location,也繼續提出了一種在 TEM 和 decoder language modeling 之間的建模函數,被他們稱為 Hierarchical Attention/Memory(HAM):
這里的 f_m 就可以實現一種 multi-layer 的 attention,然后這個 f_m 就可以傳給 decoder 作為一種 balance 后的 attention。最終效果:
依舊好累……依舊明天再繼續!
總結
以上是生活随笔為你收集整理的ICLR 2017 | Attention 和 Memory Networks的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ICLR 2017 | GAN Miss
- 下一篇: NIPS 2016 | Best Pap