1. 程式人生 > >【論文筆記07】End-To-End Memory Networks

【論文筆記07】End-To-End Memory Networks

1 背景

(1)在記憶網路中,主要由4個模組組成:I、G、O、R,前面也提到I和G模組其實並沒有進行多複雜的操作,只是將原始文字進行向量表示後直接儲存在記憶槽中。而主要工作集中在O和R模組,O用來選擇與問題相關的記憶,R用來回答,而這兩部分都需要監督,也就是需要知道O模組中選擇的記憶是否正確,R生成的答案是否正確,這種模型多處需要監督,而且不太容易使用常見的BP演算法進行訓練,這就限制了模型的推廣。
(2)而這篇論文就是在前一篇Memory networks的基礎上提出來的,針對其中出現的問題,採用了端到端的模型結構(End-to-End),因此模型需要的監督更少,能夠更好的訓練模型。

2 具體內容

論文中提出了單層和多層兩種結構,多層就是將單層網路進行堆疊起來的。
(1)單層結構
單層結構
如圖所示,模型主要包含了A、B、C、W四個矩陣,其中,B是用來對問題進行向量編碼,W是最終輸出的權重矩陣,而A和C都是將輸入的文字編碼成詞向量,然後分別存入Input和Output模組,這兩個模組的值是對應的。
其具體內容如下:
輸入模組:輸入模組主要是對文字進行編碼,這裡採用了文章表示法模型二的思想(具體見張俊林博士關於深度學習解決機器閱讀理解任務研究進展的相關介紹),用一個向量來表示句子的整體語義資訊(根據一句話中各單詞的詞向量,將其壓縮成一個句向量)。論文中提出了兩種編碼方式,bow和位置編碼。bow就是直接將一個句子中所有單詞的詞向量求和表示成一個向量的形式(表示法模型2中權重係數為1的情況),這種表示方法最明顯的缺點就是不能捕獲一句話中單詞之間的位置資訊。對於位置編碼的方法,給不同位置的單詞設定不同的權重(即模型二中的權重係數是由該單詞所在位置決定的,而不全部是1),然後對各個單詞的詞向量按照不同的權重加權求和得到句子的整體表示,位置編碼方法的公式如下:
位置編碼方式


此外為了引入時序資訊,在上面mi的基礎上又加上了每句話出現順序的矩陣,所以最後每句話對應的記憶mi的表示式如下:
記憶單元Mi
記憶模組:主要由兩部分組成,input和output模組,統稱為記憶槽,矩陣A和C都是將輸入的文字編碼成詞向量,然後分別存入Input和Output模組。
輸出模組:輸入的文字資訊通過編碼成向量儲存在記憶槽(input和outpu)中,input用來和question編碼得到的向量相乘得到每句話和問題的相關性(這裡可以看成是注意力權重),output模組則是通過相關性進行加權求和得到輸出向量o。

  • **step1:**將問題經過輸入模組編碼成一個向量u,然後將其與每個mi點積得到兩個向量之間的相似度,再通過一個softmax函式進行歸一化處理:
    相似度計算
  • ** step2:**通過上述的相關性指標,對output中的各個記憶ci按照pi進行加權求和得到模型的輸出向量o,公式如下:
    輸出向量o計算公式

Response模組:該模組主要根據輸入資訊產生最終的答案,具體是其結合o和q兩個向量的和與W相乘再經過一個softmax函式產生各個單詞是答案的概率,使用交叉熵損失函式作為目標函式進行訓練。預測答案

(2)多層結構
多層結構其實就是將多個單層模型堆疊起來,其結構圖如下:多層結構
整體來說還是比較好理解的,上面幾層的問題輸入就是下層o與u的和,公式為:上層問題輸入
至於對文字語義表示中的矩陣Ai和Ci,為了減少引數量,論文中提出了兩種方法:

  • Adjacent:這種方法讓相鄰層之間的A=C。也就是說Ak+1=Ck,此外W等於頂層的C,B等於底層的A,這樣就減少了一半的引數量。
  • Layer-wise(RNN-like):與RNN相似,採用完全共享引數的方法,即各層之間引數均相等。Ak=…=A2=A1,Ck=…=C2=C1。由於這樣會大大的減少引數量導致模型效果變差,所以提出一種改進方法,即令uk+1=Huk+ok,也就是在每一層之間加一個線性對映矩陣H。

對於最後的輸出,其計算公式如下:
預測答案

3 小結

(1)看了最開始的Memory network那篇論文,雖然還是能夠看懂,但是至於怎麼將其很好的用起來,還是很模糊,於是這篇端到端的記憶網路就提供了很好的使用範例,論文中也設計了兩個實驗任務(問答和語言模型),看了實驗程式碼清楚多了。
(2)其實在這個結構上還是有很多改進的地方,當初看這篇論文的時候也想到一些,比如在記憶模組引入混沌概念,動態表示記憶。後面才發現這一系列的最後一篇論文中就是動態記憶-_-||

資料來源

(1)論文地址
(2)論文程式碼
(3)參考筆記