1. 程式人生 > >吳恩達Deeplearning.ai 第五課 Sequence Model 第一週------Sampling novel sequence

吳恩達Deeplearning.ai 第五課 Sequence Model 第一週------Sampling novel sequence

這一節主要講了如何從一個訓練好的RNN中進行取樣得到序列

這裡寫圖片描述

從訓練好的RNN中取樣出一個序列

之前在序列產生中講到,首先RNN輸入a<0>(0向量)和x<1>(0向量),通過一個RNN cell產生一個輸出y。

y = softmax(np.dot(Wya, a) + by),可以知道y是一個向量,向量每個entry表示對應index單詞的概率。之前直接選擇概率最大的那個作為y,在這裡利用取樣的方法,根據每個entry的概率值來產生y(np.random.choice)

再將這樣產生的y作為下一個輸入,即x<2> = y<1>,x = y

這裡寫圖片描述

採用這樣的方法直到最後y輸出<EOS>或者句子達到之前設定的長度才停下,這樣就利用RNN產生了一個序列

這樣有可能會sample得到<UNK>,可以採用兩種處理方法:一種就是如果產生<UNK>就重新進行取樣,另一種就是將<UNK>保留在句子中

字母級語言模型

這裡寫圖片描述

這裡將一個字母作為一個x<t>

好處是不會產生<UNK>,例如可以產生Mau這種可能不在字典中的名字,而不是用<UNK>來代替

缺點是序列過長,如果序列前後存在一定關聯,則字母級的模型可能難以捕捉到這種關聯,同時由於序列更長了,計算量也比之前更大一些

這裡寫圖片描述

序列生成的例子,利用RNN來產生一段新聞風格和莎士比亞風格的文字