天天看點

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

MEMORY NETWORKS

摘要

作者說自己提出了一個新的學習模型叫做“memory networks”,模型将推理與“長記憶”元件相結合。使用長記憶元件,可以用其進行推理預測,作者将該模型用于問答系統QA(Question Answering)。

介紹——為什麼要提出這個模型

作者說目前的大多數的機器學習系統,無法自由的對記憶元件進行讀寫。如果可以無縫的自由讀寫,那麼将大大提高模型的預測、推理能力。比如說,對于問答系統、文章推理,此類問題都會涉及大量的上下文内容,隻有通過對上文内容的分析,才能獲得較優的回答或推理。但是,目前包括RNN或LSTM等模型在内,雖然存在記憶功能,但并不理想,或者說是記憶單元太小了,不足以對上文的資訊進行存儲。是以作者就想将目前優秀的機器學習算法同“記憶”子產品向組合,這樣記憶子產品的存儲以及讀寫就彌補了原始算法的缺陷。

模型概述

既然知道了模型的想法和要解決的問題,那麼該怎麼解決呢?

作者也是簡單粗暴,你不是存儲記憶單元小嗎?好,我給你一個單獨的存儲單元,并且空間很大,記為Memory M。這個M是什麼呢?其實它就是一個數組對象, mi 代表數組的第i個對象。除此之外,memory networks還有其他四個元件,分别是 I,G,O,R 。

1. I(Input) 代表的是輸入特征映射,作用是将原始輸入轉換成模型的内部表示。比如說文章中作者以VSM(Vector Space Model) 作為輸入的模型内部表示,當然還可以有很多其他的表示,如詞嵌入(word2vect)表示。

2. G(Generalization) 的作用是對于給定的輸入,對M進行更新。這個元件其實作者并沒有向文章中提出的完全使用起來,而是将其作為未來可能将使用到的子產品。

3. O(OutputFeatureMap) 根據目前給定的輸入以及M的狀态,給出輸出。本文中主要用于 擷取與問題最相關的M的下标。

o1=O1(x,m)=argmaxi=1,...Nso(x,mi)

4. R(Response) 響應元件。将産生的輸出轉換成想要的對應的格式。例如,可以将輸出作為RNN的輸入,用于sequence-to-sequence任務。

由這個四大元件,作者就提出了該模型Memory Neural Networks(MemNNs)。

整個模型對于輸入就産生了一個流過程:

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS
讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

從給出的架構可以看出,作者認為本次提出的更是一種想法,在這種架構下,可以完成任何你想幹的事情。例如說,内部特征表示文章中使用VSM,你可以使用word embedding;文中響應是根據 output 的輸出,将其映射到單一的詞上,這裡也可以換成RNN、SVM或更加複雜的模型;是以說MeMNNS具有較大的潛力。

案例分析

文章中作者給出了一個樣例,樣例給出一段文章,文章之後緊跟上提問,模型的任務就是通過學習文章,對于提問給出解答。

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

下面看一下模型的四大元件是如何互相合作,完成這項任務的。

1. Input 輸入映射子產品,首先要做的就是上文中的小短文(story)轉換成内部特征表示 I(x) 。文章中使用的向量空間模型(VSM),每個次元以該詞的詞頻為大小。

2. Generation 将 I(x) 更新M的“卡槽”(slot)。

mH(x)=I(x)

其中函數 H(x) 是用于選擇M的卡槽的,其實可以簡單的認為是數組的下标。作者在文章對G元件進行了簡化,僅對輸入的特征表示進行了存儲,對于更新等更複雜的任務并太涉及,将其作為了G的潛力。如更新時不僅對指定下标 mi 進行更新,同時還可以根據上文或更久前的曆史資訊對多個下标進行更新。

是以在基礎模型中,作者直接将輸入存入到了M中。

3. 第1,第2步進行了簡化,那麼3,4步的任務就較重,同時也是該模型的核心部分。 Output 輸出元件要做的就是根據目前輸入問題,也就是“Where is the milk now?/Where is Joe?/Where was Joe before the office?”其中之一,查找M中與其關系最接近的上下文,也就是文中所說的k個候選支援記憶(candidate supporting memory),其中k可以手動設定,文中設定k=2.

- k=1 最相關的 mi

o1=O1(x,m)=argmaxi=1,...Nso(x,mi)

- k=2 第二相關的 mi

o2=O2(x,m)=argmaxi=1,....Nso([x,mo1],mi)

說明:

此處的 o1,o2 是M的的索引下标。

o2 公式表示中:

argmaxi=1,....Nso([x,mo1],mi)=so(x,mi)+so(mo1,mi)

4. Response 響應元件以O的輸出作為輸入,得到單一詞作為響應。

r=argmaxw∈WsR([x,mo1,mo2],w)

其中W是訓練集中所有的詞彙。

讓我們串起來看一下,首先通過 I,G 将小文章讀入,轉化并存儲在M中;然後通過 O 得到與問題x 最相關的 k=2 的 mi , O 傳回支援記憶卡槽的索引o1,o2 ;最後,将 O 輸出和問題x 作為 r 的輸入,周遊詞彙表中的詞彙,獲得最優回答。

那麼實驗中作者是如何做到這一步的呢?其中的關鍵在函數s(x,y) 的實作。

s(x,y)=Φx(x)TUTUΦy(y)

其中參數 U∈Rn×D , D代表特征的數量,n代表嵌入次元。 Φx 和 Φy 将原始的輸入文本映射到D維的特征空間。文章中 D=3|W| ,D的次元等于所有詞彙數量的3倍,為什麼要3倍呢?因為作者認為詞典中的每個詞都有3種不同的表示方式,其中一份給予 Φy ,另兩份給 Φx 。若輸入x是問題中的詞,則映射在位置1,若輸入詞是“記憶支撐”,那麼映射在位置2,y映射在位置3。若其中某個位置未映射則置0。

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

在這 O,R 中,雖然 s(x,y) 的公式相同,但其中的訓練參數U并不相同 Uo,UR 。

訓練

模型的訓練是一個監督學習的過程,使用最大距離損失和梯度下降法訓練參數,文中作者的訓練已知部分包括問題的答案和支援答案的句子索引(支援記憶索引),就是在訓練中事先知道哪句話對答案的幫助最大,而訓練的過程就是要讓(1)模型選擇支援答案的句子索引與事先知道的盡量一緻,(2)預測的答案盡量一緻。

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

可以看到,其中 f¯ 和 f′¯¯¯ 就是事先知道的“支援記憶索引”, mo1,mo2 是模型預測的; r¯ 是正确答案, r 是預測答案。

論文中作者還強調如果将R 部分替換成RNN,模型同樣适用,而對應的要講訓練部分中關于r的部分替換成對數似然損失,RNN的輸入就是 [x,o1,o2] 。

擴充

  1. 在模型中加入“segmentation”函數,以此來應對輸入是詞序列問題。
  2. 使用“hash”映射的方式替代原始直接memory存取,由此提高M的查詢速度。
  3. 通過(1)添加三個次元,(2)修改 sot 函數使模型擷取寫時間特性,主要是何時寫memory。
  4. 處理未登入詞。對于未登入詞,作者采用該詞左右兩邊的内容來代替,是以 D 的次元從3|W|−>5|W|

下面着重看一下擴充2:

作者說memory中的存入對象是何時被寫入的,該特征資訊對詢問事實的問題沒有太大幫助,如“中國的首都是哪裡?”。但對于回答基于小故事的問題至關重要,作者在原有模型D的基礎上增加了3個次元 D=3|W|+3 。

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

這三個次元的大小0/1,由公式 Φt(x,y,y′) 決定。判斷x是否晚于y,x是否晚于y’,y是否晚于y’,用不着置為0。若 sot(x,y,y′)>0 模型選擇y,否則選擇y’。

sot(x,y,y′)=Φx(x)TUTotUot(Φy(y)−Φy(y′)+Φt(x,y,y′))

由于公式的改變,原來的 o1=O1(x,m)=argmaxi=1,...Nso(x,mi) , ot 的公式:

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

周遊整個Memory,通過公式 sot(x,y,y′) 擷取最優解。

訓練方法變成:

讀論文寫論文——MEMORY NETWORKSMEMORY NETWORKS

代碼

代碼請參考(https://github.com/npow/MemNN)(感謝代碼作者的貢獻)

參考

向量空間模型

memory networks部落格

MEMORY NETWORKS原文

MemNNs源碼

繼續閱讀