我的tensorflow学习笔记(11):RNN

本文介绍了循环神经网络(RNN)及其与前馈网络的区别,强调了RNN在处理序列数据上的优势。通过展开RNN结构,解释了反向传播通过时间(BPTT)的工作原理以及可能遇到的梯度消失和爆炸问题。此外,文章还提及了为解决长时间依赖问题而提出的门控循环单元(GRU),作为简化版的LSTM,GRU在处理长时信息方面有所改进。

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

一、从前馈网络到循环神经网络(Recurrent Neural Network,RNN)

    尽管此前的前馈网络和卷积网络表现出色,但它们仍有很大的局限性。对于人类而言,输入不仅仅是离散的数据点,而是信息量巨大的序列,并且随时间变化。我们的语言、电视节目都是连续的,所以问题是,如何让我们的模型能够像人类一样处理复杂的输入序列。RNN正是为此而设计的。

    RNN与前馈网络一样由运算单元,即神经元构成,但它们在神经元连接方式上有明显的差别。在前馈网络中,信号从一个方向传递,并且不允许循环出现。而RNN与此相反,允许神经元与自己相连,这允许了计算时间信息,因为前面的神经元可以影响当前的神经元。


    人们常常用神经元与自己相连来表示RNN,但把它展开可能更便于理解。每个神经元相当于一个时间步长,有两个输入:当前输入和前一步的状态。所有神经元共享参数(因为实际上是一个神经元),极大的减少了我们需要使用的参数数量。


二、Back-propagation through time(BPTT)

    在前馈网络中,我们使用反向传播法调整系数,减小损失。在RNN中,误差由损失反向传播至每个时间步长。区别主要在于:

        1、前馈网络的每一层使用单独的参数,而RNN中每个时间步长共享相同的参数。对于每个训练样本/批,我们使用所有步长的梯度之和来更新参数。

        2、前馈网络的层数是固定的,而RNN的层数由输入序列的长度决定。

    第二个区别表明,如果你的输入序列很长,那么完整的反向传播计算开销是非常大的。另一个问题是这可能导致梯度指数级别的增长或衰减,可能导致梯度消失或爆炸。


    为了应对这些问题,我们通常需要限制时间步长的数目,即受限BPTT。这样做的好处是加快的参数更新速度,缺点是可能导致网络无法学习时间最开始的内容影响(比如一篇文章的开头)。

    在tensorflow中,RNN使用的是展开的模式,在非eager模式中,这意味着时间步长的数目在计算前就已经固定了,模型只能用这么多的神经元去处理输入。因为我们通常不知道输入的长度,这可能会产生一些问题。

 三、门控循环单元(Gated Recurrent Unit,GRU)

    在实践中,RNN对于长时间依赖关系的处理不尽人意,因此人们采用了Long Short-Term Memory(LSTM)。LSTM的概念很早就被提出,但最近才由于计算能力的增长得到了推广。

    LSTM采用了所谓的闸门机制(gating mechanism),它包含四个门,通常记作i,o,f,c~,分别代表input,output,forget,candidate/new memory gate。


    LSTM的一种图解形式如下:


    LSTM不是唯一为了提高RNN处理长时信息而被使用的门控机制,GRU(Gated Recurrent Unit)在使用类似机制的基础上作了显著的简化。它将LSTM中的forget gate与input gate合并成为一个update gate,并且融合了candidate/new cell state和hidden state。



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值