循环神经网络

本文深入介绍了循环神经网络(RNN)的基础及其变种LSTM(长短期记忆)和GRU(门控循环单元)。RNN在处理序列数据时存在梯度消失或爆炸的问题,而LSTM通过门控机制解决了这一问题,GRU则是LSTM的简化版,减少了参数,提高了训练效率。三种网络在pytorch中均有实现,常用于一对一、多对一、一对多和多对多等多种应用场景,如图像描述、文本分类和语言翻译等。
摘要由CSDN通过智能技术生成

针对有序数据,如文本、语音等,使用循环神经网络进行分析相关问题思想是,网络中不同时间的输入之间会存在顺序关系,每个输入和它之前或者之后的输入存在关联,希望通过循环神经网络在时序上找到样本之间的序列相关性。

最常见、最基本的循环神经网络有RNN、LSTM(长短期记忆)和GRU等。其中GRU可看做LSTM的简化版本,在pytorch中提供了这三种循环神经网络结构,可直接调用其函数类。下面将分别介绍这三种常用循环网络的结构和特点。

1.RNN

RNN循环神经网络用torch.nn.RNN()来构建。针对t时刻的隐状态h(t),可以由以下公式来计算:

h(t)=σ(W(ih)x(t)+b(ih)+W(hh)h(t-1)+b(hh))  【里面的括号为右下角小标】

其中,h(t)是t时刻的隐藏状态;x(t)是t时刻的输入;h(t-1)是t-1时刻的隐藏状态;W(ih)是输入到隐藏层的权重;b(ih)是输入到隐藏层的偏执。b(hh)是隐藏层到隐藏层的偏执;σ表示激活函数,在pytorch中可以使用Tanh或者ReLU激活函数。

虽然在对序列数据进行建模时,RNN对信息有一定的记忆能力,但是单纯的RNN会随着递归次数的增加,出现权重指数级爆炸或消失的问题,从而难以捕捉长时间的关联,并且导致RNN训练时收敛困难,而LSTM网络则通过引入们的机制,使网络具有更强的记忆能力,弥补了RNN网络的一些缺点。

2.LSTM

LSTM(Long Short_Term Memory)网络又叫做长短期记忆网络,是一种特殊的RNN,主要用于解决长序列训练过程中梯度丢失和梯度爆炸问题,相比普通的RNN网络,LSTM能够在更长的序列中获得更好的分析效果。

在LSTM网络中,每个LSTM单元针对输入进行下面函数的计算:

i(t)=σ(W(ii)x(t)+b(ii)+W(hi)h(t-1)+b(hi))

f(t)=σ(W(if)x(t)+b(if)+W(hf)h(t-1)+b(hf))

g(t)=tanh(W(ig)x(t)+b(ig)+W(hg)h(t-1)+b(hg))

o(t)=σ(W(io)x(t)+b(io)+W(ho)h(t-1)+b(ho))

c(t)=f(t)*c(t-1)+i(t)*g(t)

h(t)=o(t)*tanh(c(t))

其中,h(t)是t时刻的隐藏状态(hidden state);c(t)是t时刻的元组状态(cell state);x(t)是t时刻的输入;h(t-1)是t-1时刻的隐藏状态,初始时刻的隐藏状态为0;i(t),f(t),g(t),o(t)分别是输入们、遗忘门、选择门和输出门;σ表示sigmoid激活函数。在每个单元的传递过程中,通常c(t)是上一个状态传过来的c(t-1)加上一些数值,其改变的速度较慢,而h(t)的取值范围这较大,不同的节点往往会有很大的区别。

LSTM在信息处理方面主要分为三个阶段:

(1)以往阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记,会“忘记不重要的,记住重要的”。即通过f(t)的值来控制上一状态c(t-1)中哪些需要记住,哪些需要忘记。

(2)选择记忆阶段。这个阶段将输入X(t)有选择地进行“记忆”。哪些重要则着重记录,哪些不重要则少记录。当前单元的输入内容是计算得到的i(t),可以通过g(t)对其进行有选择地输出。

(3)输出阶段。这个阶段将决定哪些会被当成当前状态的输出。主要通过o(t)进行控制,并且要对c(t)使用tanh激活函数进行缩放。

LSTM网络输出y(t)通常可以通过h(t)变化得到。

3.GRU

虽然LSTM通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息,而不像普通的RNN那样只能够有一种记忆叠加,这对很多需要“长期记忆任务”来说效果显著,但是也因多哥们控状态的引入,导致需要训练更多的参数,使得训练难度大大增加。针对这种情况,循环门控单元(Gate Recurrent Unit,GRU)网络被提出,GRU通过将遗忘门和输入们组合在一起,从而减少了门的数量,并且做了一些其他的改变,在保证记忆能力的同时,提升了网络的训练效率。

在该网络中,每个GRU单元针对输入进行下面函数的计算:

r(t)=σ(W(ir)x(t)+b(ir)+W(hr)h(t-1)+b(hr))

z(t)=σ(W(iz)x(t)+b(iz)+W(hz)h(t-1)+b(hz))

n(t)=tanh(W(in)x(t)+b(in)+r(t)*(W(hn)h(t-1)+b(hn)))

h(t)=(1-z(t)*n(t)+z(t)*h(t-1))

其中,h(t)是t时刻的隐藏状态(hidden state);x(t)是t时刻的输入;h(t-1)是t-1时刻的隐藏状态,初试时刻的隐藏状态为0;r(t),z(t),n(t)分别是重置门、更新门和计算候选隐藏层;σ表示sigmoid激活函数。在每个单元的传递过程中,r(t)用来控制需要保留之前的记忆。如果r(t)为0,这n(t)=tanh(W(in)x(t)+b(in)只包含当前输入状态的信息,而z(t)则控制前一时刻的隐藏层忘记的信息量。

循环神经网络根据循环单元的输入和输出数量之间的对应关系,可以将其分为多种应用方式【一对一,多对一,一对多,多对多】。其中,一对多的网络可用于图像描述,即根据输入的一张图像,自动使用文字描述图像的内容;多对一的网络结构可用于文字分类,根据一段描述文字,自动对文本内容归类;多对多的网络结构可用于语言翻译,即针对输入的一种语言,自动翻译为另一种语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值