吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence

这一节主要讲了如何从一个训练好的RNN中进行采样得到序列

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence

从训练好的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

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence

采用这样的方法直到最后y输出<EOS>或者句子达到之前设定的长度才停下,这样就利用RNN产生了一个序列

这样有可能会sample得到<UNK>,可以采用两种处理方法:一种就是如果产生<UNK>就重新进行采样,另一种就是将<UNK>保留在句子中

字母级语言模型

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence

这里将一个字母作为一个x<t>

好处是不会产生<UNK>,例如可以产生Mau这种可能不在字典中的名字,而不是用<UNK>来代替

缺点是序列过长,如果序列前后存在一定关联,则字母级的模型可能难以捕捉到这种关联,同时由于序列更长了,计算量也比之前更大一些

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence

序列生成的例子,利用RNN来产生一段新闻风格和莎士比亚风格的文字