李宏毅深度學習
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用於填充內容,具體公式如下,
級聯起來就是這樣,