網絡輸入是一個序列,一句話,圖像的某一行,都可以認為是一個序列,
網絡輸出的也是一個序列。
RNN的架構
我們把所有的輸出o連起來,就成了一個序列。
rnn有一些缺點,lstm可以加入一個遺忘單元,然后控制哪些需要記住,哪些需要忘記。
機器翻譯:
現在的機器翻譯已經達到了非常高的水平。最早的時候,就是逐字翻譯。
逐字翻譯不准確,而且不連貫,現在已經被淘汰了。
然后使用統計學,使用轉移矩陣,選擇最可能的轉接方式,可以做的不錯,但依然有問題。
現在我們使用的是循環神經網絡。
首先我們進行RNN編碼,就是把輸入的句子轉成一個向量(比如300維),然后通過另一個RNN進行解碼,得到最后的結果。
seq2seq網絡架構
左邊輸入:are you free tomorrow?
右邊輸出:yes, what's up?
END或者用EDS表示最終的結束字符。因為我們要防止它無限制的解碼下去,我們需要一個終止字符。
這樣的網絡架構可以構造一個聊天機器人的。但是這樣的對話數據不好找。
文本摘要
S表示輸入數據。
T表示文本摘要。
S的序列不一樣長,我們可以采用補全的方式,讓他們一樣的輸出長度。
rnn輸入字符是不認識的,我們一般是使用word2vec進行映射操作的。
seq2seq存在的問題:
壓縮損失了信息,因為在進行編碼的過程中,最后一個詞可能占比比較大一些,因為編碼過程損失了信息,所以會導致在解碼的過程中,得不到損失的那些信息。這是seq2seq中比較嚴重的缺點。
序列長度一般10-20左右最好的。
解決辦法:加入attentation機制。
我們認為knowledge就是和知識有關,和后邊的幾個詞關系不大,或者說,我們可以引入一個概率分布,讓它知道這個詞和哪些輸入的關系大一些。
舉例子:
加入了attentation機制,然后改變了C的結果。從論文中可以看到,加入attentation機制之后,效果變好。
attentation實際上是做了一個加權的工作。
Bucket機制
每次mini—batch都是固定大小。我們可以分組,然后保證內部一致就可以了。