SIGAI深度学习第十三集 循环神经网络2

讲授LSTM、GRU、双向循环神经网络、序列标注问题、CTC、seq2seq、编码器解码器结构等.

大纲

面临的问题
长短期记忆模型
门控循环单元
双向循环神经网络
序列标注问题
连接主义时序分类
序列到序列学习

本集内容简介

今天主要讲RNN它面临的一些问题以及改进的措施和方案,我们会分下面几个主题进行讲述,首先介绍RNN面临的问题,主要是梯度消失问题,再接下来介绍两种典型的解决方案,即LSTM和门控循环单元GRU,这两种它解决问题的套路都是类似的,把连续的乘法转成加法来执行,然后这种思想在我们前边介绍RNN的时候已经讲过了,其实当时我们讲的高度公路网络Highway wetwork和它们是同一套思路来解决问题的。

再接下来会介绍RNN的一个重要改进,叫双向循环网络,前边我们介绍的RNN它都是输入x1,...,xT的,在处理xt的时候只用了x1~xt-1,在某些场景中未来的这些信息也是有用的,因此诞生了双向循环神经网络这种网络结构。

再接下来介绍RNN它解决了最根本性的一类问题,即序列标注问题,在RNN的基础之上出现两种非常重要的改进,已经大规模使用了,即连接主义时序分类CTC,是现在我们语音识别主流的方案,第二种是序列到序列的学习Seq2seq,这是解决诸如机器翻译、NLP问题的一种经典的手段。

梯度消失问题

前边在介绍全连接神经网络以及RNN的时候都讲过一个重要的问题是梯度消失与梯度爆炸问题,尤其是梯度消失问题更为严重,梯度消失产生的根本原因是反向传播时根据δ(l+1)算δ(l)的时候乘以激活函数的导数值f',如果这个导数值非常小的话,越乘的话这个δ越往前传就越小,最后我们参数值的梯度值根据δ来构造,因此损失函数对权重的梯度值它最后会趋向于0,这样的话用梯度下降法就没法更新了,在RNN中这个问题也非常严重,而且严格来说会更严重一些。

首先看循环层递推公式

扫描二维码关注公众号,回复: 9308268 查看本文章

 根据这个递推公式,按时间进行展开后为

 ht展开到ht-2就要乘两次Whh,即t-2时刻隐藏层状态值传到t时刻的时候它要乘两次Whh,如果要把激活函数拿掉的话,全是矩阵乘法和加法运算,最后化简以后,我们的ht展开到h1的时候

 ,这是同样一个矩阵乘这么多次,这个问题就很严重了,这就类似于乘以一个αt-1*h1一样,若α小于1,那结果会很快衰减到0上边去,因此很早时刻的隐藏层状态值h传播到很晚时刻的话它基本上就不起作用了,趋向于0了。

假设Whh可以对角化,即可以特征值分解,存在P,使得P-1AP=Λ,P是一个正交矩阵即P-1=PT,则W=QΛQT,因为W的T次方可以展开为

 如果特征值很小的话就导致Λ的T次方趋向于0了,正向传播的时候信息就传不动了,很远时刻的h传到很晚时刻的h上边的话它就趋向于0了,这样的话记录了以前的值就相当于没有记录,因为以前的值它在t时刻被利用起来的时候已经趋向于0了。

而在反向传播的时候问题也更严重了,根据δt+1算δt的时候它每次都要乘以一个WhhT,他还要乘以一个激活函数的导数值f'(ut),光f'(ut)就可以引起梯度消失问题,再加上WhhT,问题就更严重了,因此我们RNN它是很难记住长时间的一个信息的,正向传播的时候很难记忆,反向传播的时候梯度值也没法更新,这就是它的梯度消失问题。

 解决思路

 我们分析一下这个问题的原因,

猜你喜欢

转载自www.cnblogs.com/wisir/p/12341279.html