文章目录
摘要
进一步学习了循环神经网络(RNN)原理、种类、优缺点,使用Pytorch中所提供的RNN模型,并根据公式进行了手写实现RNN的计算原理。继续补充学习pytorch中其他函数的使用
Abstract
I further learn the principle, types, advantages and disadvantages of recurrent neural network (RNN), use the RNN model provided in Pytorch, and implement the calculation principle of RNN by hand according to the formula. Continue to supplement the use of other functions in pytorch
1 RNN
优点:
- 可以处理变长序列
- 模型大小与序列长度无关
- 计算量与序列长度呈线性增长
- 考虑历史信息
- 便于流氏输出
- 权重在每一时刻都不改变
缺点:
- 串行计算比较慢
- 无法获取太长的历史信息
1. one to n
还有一种结构是把输入信息X作为每个阶段的输入:
这种 one-to-n 的结构可以处理的问题有:
- 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子,就像看图说话等
- AI诗歌(歌词)生成
2. n to one
要处理的问题输入是一个序列,输出是一个单独的值而不是序列,
这种结构通常用来处理序列分类问题,如:文本情感分类;输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等
3. n to n
最经典的RNN结构,输入、输出都是等长的序列数据。
该结构可用于词法识别等问题领域
4. n to m
输入、输出为不等长的序列。
这种结构是Encoder-Decoder模型,也叫Seq2Seq模型,是RNN的一个重要变种
机器翻译
该结构可应用于:
- 机器翻译:Encoder-Decoder的最经典应用,事实上这结构就是在机器翻译领域最先提出的。
- 文本摘要:输入是一段文本序列,输出是这段文本序列的摘要序列。
- 阅读理解:将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
- 语音识别:输入是语音信号序列,输出是文字序列。
1.1 使用pytorch RNN
隐含状态计算函数:
x t x_t xt当前时刻的输入
w i h w_{ih} wih对当前时刻输入 x t x_t xt的权重
b i h b_{ih} bih对当前舒克输入 x t x_t xt的偏置值
h t − 1 h_{t-1} ht−1上一时刻的输出(隐含状态)
w h h w_{hh} whh对上一时刻输出的权重
b h h b_{hh} bhh对上一时刻输出的偏置值
每一时刻的输出(隐含状态) h t h_t ht,不仅和当前的输入 x t x_t