李宏毅機器學習課程筆記-14.1 Seq2Seq:Conditional Generation

基於RNN的Generation

可以用RNN生成一個word、sentence、圖片等等。

一個word有多個character組成,因此RNN每次生成一個character。一個sentence由多個word組成,因此RNN每次生成一個word。一張圖片由多個像素組成,因此RNN每次生成一個像素。

img

從上到下、從左到右逐個生成像素這種方法(上圖右上角)並沒有充分考慮pixel之間的位置關係,有一種更充分地考慮了pixel之間位置關係的方法(上圖右下角)叫做PixelRNN,PixelRNN根據多個鄰居生成一個像素,這可以通過3維LSTM單元(上圖左上角)實現。如上圖左上角所示,3維LSTM單元有3組輸入和3組輸出,將幾層(每層9個)3維LSTM單元排列在一起,就可以生成一張3×3的圖片。

以下爲一些使用RNN進行Generation的論文。

img

Conditional Generation

只使用RNN進行Generation的話是不夠的,因爲我們希望生成的結果並不是隨機的,比如我們希望機器生成的sentence是合乎情境的,假如我說了“Hello”,那機器就應該說“Nice to meet you”之類的內容,這就是Conditional Generation

爲了實現Conditional Generation,我們可以將condition轉換成vector輸入到RNN中。在Chat-bot和Machine Translation任務中,condition就是一個sentence;在Image Caption任務中,condition就是一張圖片。

在實現Conditional Generation時通常使用Encoder-Decoder框架,其中Encoder負責將condition轉換爲一個vector、Decoder負責將condition vector轉換成最後的輸出。Encoder和Decoder通常是一起訓練(jointly train)的,兩者的參數可以相同也可以不同。

在Chat-bot和Machine Translation任務中,輸入和輸出都是sequence,所以這類任務都是一種Sequence-to-sequence Learning,簡稱Seq2Seq

在Chat-bot任務中,機器應該要考慮聊天記錄,比如機器說“Hello”然後我回復“Hi”,如果這時機器也回覆“Hi”之類的就很智障了,所以機器需要考慮更長的context,如果用戶說過了“我叫臭鹹魚”,機器就不應該再問“你的名字是什麼/你叫什麼”了。因此有一種做法可以是我們有一個雙層的Encoder,首先用Encoder的第一層講聊天記錄作爲condition表示爲vector,然後輸入到Encoder的第二層。


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章