RNN的5种典型结构
引入
我已经在文章[1]中介绍了一些序列模型的应用,比如“中文翻译为英文”,“NER命名实体识别”,“歌词生成”,“情绪识别”。
也在文章[2]中介绍了RNN结构的基本原理。
那问题来了,要实现“中译英”和“歌词生成”,我们选用的RNN结构是一样的吗?RNN有哪些典型的结构,分别对应哪些应用场景呢?
RNN的5种典型结构
首先,直接给出RNN的5中典型结构,如下图。
然后我们依次讲解。
1. One to One
这是最简单的RNN结构,可以理解为输入一个单词(或词向量),输出一个单词(label)。
这种结构其实就是最普通的神经网络,和RNN其实没多大关系,写到这里也只是为了保持理论的完整性,实践中几乎没有这样用RNN的。
2. One to Many
可以理解为输入一个label,就能输出很多单词。
这样的应用比如“根据音乐类型(输入int型的一个x),生成一篇音乐”,或者“生成文章”。
当然这里有一个技术细节
- 当你生成序列时,通常会把第一个合成的输出,也喂给下一层
- 所以图中把第一个字符的输出y,作为了第二个字符的输入
3. Many to One
可以理解为,输入一篇文章,输出文章作者的情绪(0/1)。
这种“多对一”的结构,主要用于做“情绪识别”,或者“文章分类”。
4. Many to Many (Tx=Ty)
这就是[2]中介绍的最经典的RNN结构,这种结构的输入序列数量和输出序列数量相同,主要用于实现“NER命名实体识别”的应用。
Tx表示输入序列的长度,Ty表示输出序列的长度。
5. Many to Many (Tx!=Ty)
在某些情况中,比如做“中译英”,我们的输入中文汉字数量,和输出的英文单词数量不一样。就必须要实现输入输出不等长的RNN。
这样的RNN有两部分组成,左半部分叫做“Encoder”(编码器,获取输入),右半部分叫做“Decoder”(解码器)。
参考
- [0]. AndrewNg的《序列模型》教程
- [1]. https://blog.****.net/ybdesire/article/details/102963683
- [2]. https://blog.****.net/ybdesire/article/details/103449597