概念

什么是RNN?

RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种’记忆’功能.

RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

RNN的主要应用领域有哪些呢?

① 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理

② 机器翻译, 机器写小说

③ 语音识别

④ 图像描述生成

⑤ 文本相似度计算

⑥ 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域.

RNN(循环神经网络)

RNN模型结构
循环神经网络RNN详解
如图所示, 我们可以看到RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成.
并且会发现在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法.

如果到这里你还是没有搞懂RNN到底是什么意思,那么请继续往下看!

Hidden Layer的层级展开图:
循环神经网络RNN详解
如图所示为Hidden Layer的层级展开图. t-1, t, t+1表示时间序列. X表示输入的样本. St表示样本在时间t处的的记忆。

St =f(W * St-1 +U * Xt + b). W表示输入的权重, U表示此刻输入的样本的权重, V表示输出的样本权重.f:为**函数,b为偏置。

注意
1. 这里的W,U,V在每个时刻都是相等的(权重共享).
2. 隐藏状态可以理解为: S=f(现有的输入+过去记忆总结)

标准RNN的前向输出流程

循环神经网络RNN详解
再来介绍一下各个符号的含义:x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,因为·h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。

有了上面的理解,前向传播算法其实非常简单,对于t时刻:
循环神经网络RNN详解
其中ϕ()为**函数,一般来说会选择tanh函数,b为偏置。

t时刻的输出就更为简单:
循环神经网络RNN详解
最终模型的预测输出为:
循环神经网络RNN详解
其中σ为**函数,通常RNN用于分类,故这里一般用softmax函数。

参考资料:
https://blog.csdn.net/weiwei9363/article/details/78902455
https://blog.csdn.net/zhaojc1995/article/details/80572098
https://blog.csdn.net/qq_32241189/article/details/80461635
https://blog.csdn.net/prom1201/article/details/52221822