1、Generation
生成句子或者文章。
在生成好的RNN模型里,我们输入开头,模型可以输出一系列的输出,如下图,我们根据输出得到了“床”,然后把“床”作为下一个时间点的输入,得到“前”,依次类推。这是测试时的一种做法,并不是唯一做法。在训练RNN模型的时候,并不是拿上一时刻的输出当作下一时刻的输入,而是拿句子真正的序列当作输入的。
2、condition generation
我们希望根据一些情景来生成我们的句子而不是随机生成一些句子,比如对话系统,需要根据问题来生成我们的答案,再比如翻译系统,我们要根据给出的句子得到对应的翻译。
比如下图:input一个image,通过CNN得到image的vector,把vector当做input丢给RNN,丢进去的input(image)不一样的话,它的output也会不一样,可能你的input影响不够大,网络在后面会遗忘之前看到的东西,我们需要在每次RNN output之前的时间点丢一个image(vector),RNN就会反复的复习看到的这张image。就不会让句子忘记自己要说什么了。
再比如下面的机器翻译:
首先,我们把问题或者需要被翻译的句子通过一个RNN或者LSTM进行Encoder,最后一个的输出就包含了这个句子的全部信息,然后把这个句子当作初始输入丢到另一个RNN或者LSTM中,然后通过这个得到对应的输出。encoder和decoder的LSTM或者RNN里的参数可以一样也可以不一样。
3、attention(dynamic(动态) conditional generation)
当使用attention的时候,它只会关注“机器”这一个词的vector,在decoder中能更好地学习到“机器”这一个词的特征,输出会更加准确。
下图中的match是一个function,可以自己设计,“机”,“器”,“学”,“习”通过RNN得到各自的vector,z0是一个parameter。α10,上标1表示z0和h1到底有多match,下标0表示时间是0这个时间点,α表示相匹配程度。
z1可以是c0丢到RNN以后,hidden layer的output,也可以是其他,z1再去算一次match的分数