深度学习基本单元-序列篇

RNN-simple-cell-versus-LSTM-cell-4

RNN

原理

RNN用于处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。形式上如下:

è¿éåå¾çæè¿°

RNN几种形式有:

RNN

  1. 对于one-to-one即为基本的RNN单元:

one to one

  1. one to many:

img

同时下图将输入作为多个单元输入等效为一种one to many 形式:

img

  1. many to many.最经典的RNN结构,输入、输出都是等长的序列数据。可用于翻译等任务.

img

  1. many to one.可以看出主要用于分类等任务.

img

  1. 由此引出的encoder-decoder机制(seq2seq),如图:

img

左边encoder部分计算出一个中间变量,这个中间变量可以浓缩左边输入信息,在右边decoder做信息展开,根据不同任务做调整.这种模型架构在很多其他CV任务均有运用.下图是上图模型一种变体.

img

  1. 注意力机制,注意力机制本身可以理解为一种加权求和形式,为每个序列元素赋权重,体现序列元素重要性的不同.

代码

pytorch官方示例:

rnn = nn.RNN(10, 20, 2)
input = torch.randn(5, 3, 10)
h0 = torch.randn(2, 3, 20)
output, hn = rnn(input, h0)

参数含义:

image-20220727171027225

博客引用

  1. https://blog.csdn.net/bestrivern/article/details/90723524
最后修改:2022 年 07 月 27 日
如果觉得我的文章对你有用,请随意赞赏