循环神经网络(RNN)模型与前向反向传播算法

本文介绍了循环神经网络(RNN)的基础知识,包括其在处理序列数据上的优势,模型结构,以及前向传播和反向传播算法。RNN的隐藏状态依赖于先前时间步的输出,使其适合处理时间序列数据。文章还简要提到了RNN在梯度消失问题上存在的挑战,并指出在实际应用中更常使用LSTM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系。今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写识别以及机器翻译等领域。

1. RNN概述

在前面讲到的DNN和CNN中,训练样本的输入和输出是比较的确定的。但是有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN/CNN进行训练。

而对于这类问题,RNN则比较的擅长。那么RNN是怎么做到的呢?RNN假设我们的样本是基于序列的。比如是从序列索引1到序列索引τ的。对于这其中的任意序列索引号t,它对应的输入是对应的样本序列中的x(t)。而模型在序列索引号t位置的隐藏状态h(t),则由x(t)和在t−1位置的隐藏状态h(t−1)共同决定。在任意序列索引号t,我们也有对应的模型预测输出o(t)。通过预测输出o(t)和训练序列真实输出y(t),以及损失函数L(t),我们就可以用DNN类似的方法来训练模型,接着用来预测测试序列中的一些位置的输出。

下面我们来看看RNN的模型。

2. RNN模型

RNN模型有比较多的变种,这里介绍最主流的RNN模型结构如下:
在这里插入图片描述
上图中左边是RNN模型没有按时间展开的图,如果按时间序列展开,则是上图中的右边部分。我们重点观察右边部分的图。

这幅图描述了在序列索引号t附近RNN的模型。其中:

1)x(t)代表在序列索引号t时训练样本的输入。同样的,x(t−1)和x(t+1)代表在序列索引号t−1和t+1时训练样本的输入。

2)h(t)代表在序列索引号t时模型的隐藏状态。h(t)由x(t)和h(t−1)共同决定。

3)o(t)代表在序列索引号t时模型的输出。o(t)只由模型当前的隐藏状态h(t)决定。

4)L(t)代表在序列索引号t时模型的损失函数。

5)y(t)代表在序列索引号t时训练样本序列的真实输出。

6)U,W,V这三个矩阵是我们的模型的线性关系参数,它在整个RNN网络中是共享的,这点和DNN很不相同。 也正因为是共享了,它体现了RNN的模型的“循环反馈”的思想。

3. RNN前向传播算法

有了上面的模型,RNN的前向传播算法就很容易得到了。

对于任意一个序列索引号t,我们隐藏状态h(t)由x(t)和h(t−1)得到:
h(t)=σ(z(t))=σ(Ux(t)+Wh(t−1)+b)
其中σ为RNN的激活函数,一般为tanh, b为线性关系的偏置。

序列索引号t时模型的输出o(t)的表达式比较简单:
o(t)=Vh(t)+c
在最终在序列索引号t时我们的预测输出为:
y ^ \hat{y} y^(t)=σ(o(t))
通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax。

通过损失函数L(t),比如对数似然损失函数,我们可以量化模型在当前位置的损失,即 y ^ \hat{y} y^(t)和y(t)的差距。

4. RNN反向传播算法推导

有了RNN前向传播算法的基础,就容易推导出RNN反向传播算法的流程了。RNN反向传播算法的思路和DNN是一样的,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。当然这里的BPTT和DNN也有很大的不同点,即这里所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时我们更新的是相同的参数。

为了简化描述,这里的损失函数我们为交叉熵损失函数,输出的激活函数为softmax函数,隐藏层的激活函数为tanh函数。

对于RNN,由于我们在序列的每个位置都有损失函数,因此最终的损失L为:
                     L = ∑ t = 1 Γ L ( t )                     \begin{aligned}     L=\sum_{t=1}^\Gamma{L^{(t)}}     \end{aligned}              L=t=1ΓL(t)        

其中V,c,的梯度计算是比较简单的:
∂ L ∂ c = ∑ t = 1 Γ ∂ L ( t ) ∂ c = ∑ t = 1 Γ y ^ ( t ) − y t \begin{aligned} \frac{\partial{L}}{\partial{c}}=\sum_{t=1}^\Gamma\frac{\partial{L^{(t)}}}{\partial{c}}=\sum_{t=1}^\Gamma{\hat{y}}^{(t)}-{y^{t}} \end{aligned} cL=t=1ΓcL(t)=t=1Γy^(t)yt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值