吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇) (3)

吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

 

双向RNN

 

如果我们输入以下句子:

He said, “Teddy bears are on sale!”

模型可能会判断‘Teddy’是一个人名,是因为模型没有考虑之后句子的含义,所以,这时候又要考虑前面又要考虑后面,就需要双向的RNN,它的结构是这样的: 

吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

 

梯度消失/爆炸问题

 

我们看这样一个例子:

The cat,which already ate ...(中间省略很长很长), was(预测这个单词) full

The cats,which ate ...(中间省略很长很长), were(预测这个单词) full

当预测一个很长的句子,而预测的值依赖于很前面的信息(cat/cats),RNN就难以预测,这就是RNN不擅长处理的长依赖关系。为什么呢?

 

关键问题就在于向后传播。

向后传播的目的是在每一层更新权重,为了更新权重,我们将计算损失函数的梯度,并且因为链式法则,会把多个梯度相乘。试想一下,如果梯度大于1,那么多个梯度相乘将会使得数值比较大,用它来更新优化权重会比较大,这种情况我们叫做梯度爆炸(exploding gradients),这还不是大问题,因为我们可以做个梯度修剪,如果大于某个值就缩放就行了;真正的问题是,如果梯度小于1,那么连乘梯度将使得结果非常的小,这样它就不能更新权重,输出的结果就没有什么不同,这样的情况我们叫梯度消失(vanishing gradients),这就表明向后传播是不能影响很前面层的。

 

这就是人们说RNN的记忆不好,如果输入长度太长,我们就不能预测实际的值,造成这样结果最根本原因就是神经网络中的权重更新。

 

那么我们怎么解决这个问题呢?

一个思想就是,与其记住所有的过去,不如选择性的记住重要的信息而忽略其它信息。

 

GRU模型结构

 

如何做到选择性的记忆之前的信息?关键思想是提出了一个门控循环单元(Units Gated Recurrent Units),用它来控制重要信息。

吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

注: 图中的tanh就是上面图中激活函数g的具体化函数。

 

GRU相对于RNN,多了一个绿色的框框,这个框框就是门控制器,我们把它叫做更新门,用来决定记住过去的信息多少的,提供模型的记忆能力。

 

吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

 

GRU第一步也是和RNN第一步一样,用激活函数激活,但是它不会马上被使用,而是作为候选值静静等待。接着计算GRU更新门的值,由于它采用的是sigmoid函数,所以它的输出值范围是在0到1之间的。所以将第2步的值乘以第1步的值实际上就是在做"选择性记忆",如果是0,那么就是“不记忆/不更新/不使用”,如果是1,那么就是"记忆/更新/使用",就像一个打开关闭的门。GRU第三步就是用更新门的值来决定当前是用新的计算值还是用之前的值。

 

它比接下来讲的LSTM要简单,参数要少,更少的参数就意味着减少过拟合,减少训练时间。

 

LSTM的模型结构

 

LSTM背后的关键思想

 

LSTM的全称是Long Short Term Memory networks,LSTM被明确设计为避免长期依赖问题。长时间记住信息是它的默认行为,而不是它努力学习的东西。LSTM的关键是单元状态(cell state),最上面那条水平线。图中C表示,它将包含放在隐藏状态值之外的记忆值。它有点像是传送带,仅仅在一些微小的线性变换下贯穿整个链条,信息不加改变地流动非常容易。

吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxgx.html