一、不同类型的RNN
在序列化问题中,有很多类型,比如:输入输出等长,输入输出不等长,输出为整型值等等。那么就有不同的RNN结构来处理不同的问题,这里参考了一篇文章《The Unreasonable Effectiveness of Recurrent Neural Networks》。
-
多对多结构(输入长度 = 输出长度)
-
多对多结构(输入长度 不等于 输出长度)
Machine translation
从这里开始,就引入了编码器encoder和解码器decoder,在编码阶段输入,在解码阶段输出 -
多对一结构
比如读入评论文本“这部电影太催泪了”,给出整数评分1~5
-
一对一结构
这就是一个非常简单的结构了
-
一对多结构
Music generation
多种RNN网络结构的总结
二、语言模型和序列生成
语言模型就是计算每个序列出现的可能性大小,最终输出最接近的答案。
构建语言模型,首先需要有一个训练集,包含大量的英文文本,然后对文本进行标记(tokenize)。
我们拥有一个词库,然后对每个单词进行one-hot编码,注意句子结尾需要定义,用< EOS >来表示。如果出现的单词不在词库中,则统一用< UNK >表示。
然后构建RNN模型如下:
注意这是在训练,初始的输入为0向量,后面每一个时间步的输入都是前一个时间步的输出。
损失函数如下:
求概率的过程如下: