Conditional Generation by RNN & Attention
這裡目的是要產生一個structured object。假設這個structured obj可以拆成很多component的話,可以用RNN把這些component一個一個產生出來
若要讓機器產生一段句子,其component為character(英文就是a-z,中文就是任一字)或word(英文就是一個單字,中文就是一個以上有意義的字),而使用RNN可以一個一個產生出word/character
只要一個language model (RNN-based),就可以輸入一個字,他會告訴你可能的下一個字
一開始會給一個特殊token: <BOS>
,代表Begin Of Sentence,他會輸出給你一個character distribution,然後從裡面sample出一個字,例如:床
再把 床
****丟掉RNN,他就會根據這個input,算出接下來要接的character的distribution,在從中sample出一個character:前
再把 前
丟掉RNN裡面,RNN會知道input是床前
,output的機率可能就是:明
同樣也可以用RNN來generate影像(component為pixel)
先把image看成一個sentence,一個pixel看成一個word
然後用language model來tra in image了
接這就可以用這個train好的RNN language model來產生image了,丟一個<BOS>
,他可能sample出一個紅色
的pixel,再把紅色
丟進去,產生藍色
pixel,RNN會知道已經產生了紅色
與藍色
,於是可能會產生一個粉色
pixel,依此類推
不過這樣乍看之下可能會有點怪怪的,因為我們是把整當圖片拉成一個像素的序列,沒考慮到像素間的幾何關係,如圖中,左上藍色跟下面的灰色比較近,他們關係應該要比右上的黃色還強
不過,因為RNN可以記住前面學過的所有東西,所以如果RNN train的夠好,他理論上自己可以知道灰色應該要跟三個位置前的藍色有較強的關係,只是比較困難
因此,如果把模型改成,如果要產生灰色
,要根據藍色
。要產生黑色
,要根據灰色跟黑色
可以用 3-dimensional read LSTM: 他可以 input 3組東西,output另外3組東西,這樣就可以讓output直接是我們要的image了
參考:https://youtu.be/f1KUUz7v8g4?t=575