Attention模型


 

李宏毅深度學習

https://www.bilibili.com/video/av9770302/?p=8

 

Generation

生成模型基本結構是這樣的, 

 

這個生成模型有個問題是我不能干預數據生成,這里是隨機的,

 

Conditional Generation

這里我們通過初始輸入來增加條件,

比如要根據圖片來深層文字,這里以image作為輸入

當然首先要用cnn將圖片生成embeding

為了防止RNN在進行的過程中forget這個輸入,可以把圖片作為每一步的輸入傳給網絡 

在NLP中,就是Sequence to Sequence模型,

seq2seq可以用作機器翻譯或chatbot應用,

和上面的image case不同在於,

首先sentence的編碼需要用rnn,而不是cnn,並且這里encoder和decoder是可以jointly train的,即同時train出encoder和decoder的參數

 

如果做的是chatbot,那么會有下面的問題,

會出現Hi,Hi,Hi........的對話

因為在沒有上下文的情況下,對Hi的回答會一直是Hi

直覺的解法,要讓網絡知道上下文,就把歷史encoder的結果級聯起來,輸出給decoder,讓他知道之前說過什么

Attention

attention模型如其名,就是注意力模型

傳統的情況,會把整個數據,比如整張圖片,或者整段話,作為輸入給網絡

但這樣也許是不合理的,比如下面的例子,在翻譯machine的時候,我只需要看機器兩個字就好,這樣可以更加專注

那么怎么達到這個效果了

對於網絡的設計而言,直覺上,我們可以通過一組參數來選擇輸入中的那一部分對網絡可見

這組參數可稱為attention,如何產生這些參數,

可以看到,我們可以用decode的輸出z0和每個輸入,用match function算一個attention

match function,這里給出多種選擇

Attention模型的整個過程如下,

算出一組attention向量a,然后這里加上一個softmax是為了normalization,讓向量的和為1

然后用attention和輸入笛卡爾積,得到c0,把c0作為輸入給到decoder

可以看到這里,c0是根據attention產生的,這里只包含‘機器’

然后這個過程可以這么一直做下去,

 

 同樣對於圖片,我們也可以用attention模型,

用attention去選擇每次激活哪些filter

最終得到效果如下,高亮部分表示下面划線的詞,所attention的部分

 

 Memory Network

個人理解,這個是attention network的一種,

比如下面的例子,是一個智能問答系統,

通過query和document來計算attention,從而選擇相應的文檔子集,傳給深度網絡,得到answer 

這個模型是可以整個joinit訓練的,包含document產生embedding的參數,query embedding的參數,Match的參數等

更復雜的模型,

這里產生attention和抽象文檔內容,分別使用不同的embedding,這樣就需要把document做兩次encoding,參數會比較多

還加上Hopping過程,即得到Extracted Informatica后,不立刻傳給DNN做為輸入

而是循環做多次,attention生成和內容抽取的工作,過程如下,

 

Nenual Turing Machine

這種網絡的區別在於,前面的attention網絡都是在不斷的變化attention,但是不會修改內容

這種網絡每次會去改變memory本身的內容

 

這一部分和attention一樣,先更加memory和attention生成抽樣內容r0,將r0輸入網絡后,產生3個輸出,k,e,a

這里k是用來更新attention的,和之前一樣,

而e和a是用來改變內容的,e用於清空內容,a用於填充內容,具體公式如下,

級聯起來就是這樣,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM