RNN总结

循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN 就能够很好地解决这类问题。

RNN基本结构

RNN总结

这里:

img

为当前状态下数据的输入,

img

表示接收到的上一个节点的输入。

img

为当前节点状态下的输出,而

img

为传递到下一个节点的输出。

通过上图的公式可以看到,输出 h' 与 x 和 h 的值都相关。而 y 则常常使用 h' 投入到一个线性层(主要是进行维度映射)然后使用softmax进行分类得到需要的数据,一般情况下不适用y。

RNN总结

RNN的缺点

使用Rnn会出现长文本处理时候效果很差,是因为Rnn只能记忆最近的序列,记性太差,而且会出现梯度消失、梯度爆炸的情况。

这篇文章已经总结的挺好。

https://www.cnblogs.com/jiangxinyang/p/9362922.html

RNN的分类

sequence-to-sequence:输入输出都是一个序列。例如股票预测中的RNN,输入是前N天价格,输出明天的股市价格。

RNN总结

sequence-to-vector:输入是一个序列,输出单一向量。

  例如,输入一个电影评价序列,输出一个分数表示情感趋势(喜欢还是讨厌)。

RNN总结

vector-to-sequence:输入单一向量,输出一个序列。

RNN总结

4.Encoder-Decoder:输入sequence-to-vector,称作encoder,输出vector-to-sequence,称作decoder。

这是一个delay模型,经过一段延迟,即把所有输入都读取后,在decoder中获取输入并输出一个序列。这个模型在机器翻译中使用较广泛,源语言输在入放入encoder,浓缩在状态信息中,生成目标语言时,可以生成一个不长度的目标语言序列。

RNN总结

Pytorch实现RNN class torch.nn.RNN(args,*kwargs)[source]

RNN总结

注意:

batch_first这个参数为True时候,输入Tensor的shape是[batch_size,seq_length,feature],关于这个shape问题是,初学者可能对[batch_size,time_step,feature]更为理解,但是在处理序列的时候,应该是[seq_length,batch_size,feature],因为在训练时候是x0,x1,x2,x3....这样输入的,如果是按照[seq_length,batch_size,feature]这种形式,就可以根据序列长度,每次送入batch_size个字符。

rnn的输入

RNN总结

其中,h_0如果初始值为0,那么可以直接省略

rnn的输出

RNN总结

rnn的模型参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzjwx.html