读书笔记 - 《深度学习之美》(更新中...)

这本书已经读了好几章,忽然以为有必要在阅读的过程当中作一些笔记或记录一些问题什么的,故如今有了此篇文章。算法

 

14.循环递归RNN,序列建模套路深网络

 

问题:函数

(1)RNN中的“深度”与传统的深度神经网络里的“深度”有何不一样?blog

答:RNN中的深度主要是指时间和空间(如网络中的隐含层个数)特性上的深度。递归

(2)RNN为何会有梯度弥散或梯度爆炸的问题?ip

答:若是用到sigmoid激活函数(末尾推荐的两个回答是基于tanh激活函数),则它会将+∞~-∞之间的输入压缩到0~1之间,当input的值更新时,output会有很小的更新。又由于上一层的输出将做为后一层的输入,而输出通过sigmoid后更新速率会逐步衰减,直到输出层只会有微乎其微的更新。从数学的角度出发,可知sigmoid导数在0的位置取最大值1/4。当使用均值为0,方差为1的高斯分布及初始化参数w,有|w|<1. 随网络层数加深,w的变化幅度会呈1/4的指数衰减,使得最后学不到东西,形成梯度弥散。一样,当|w|>1,w变化幅度会指数递增,最后形成梯度爆炸。get

【另外,推荐知乎高赞回答(RNN梯度消失与梯度爆炸的缘由:https://zhuanlan.zhihu.com/p/28687529https://zhuanlan.zhihu.com/p/28687529)】input

(3)梯度弥散或爆炸问题在必定程度上阻碍了RNN的进一步发展,有什么策略能够在必定程度上抑制这个问题吗?数学

答:下图展现了RNN网络损失函数对权重和偏置的关系:cli

上图中存在一个很是陡峭的面,在更新参数的过程当中,若是当前参数所处的位置恰好位于这个高高的“偏差墙”上,因为这个面上的梯度很是大,那么采用梯度降低法更新后的参数可能就跑得很远,如图中蓝色的实线所示。所以,为了解决这个问题,gradient clipping算法为梯度的范数设置了一个阈值,当梯度的范数大于某个值的时候,将梯度设置为这个阈值,算法描述以下:

可是这个方法只可以解决梯度爆炸的问题,要解决梯度弥散的问题,能够从下面两点入手:

  • 对于隐层态的权重矩阵Whh使用单位矩阵进行初始化而不是随机初始化;
  • 使用RELU激活函数而不是Sigmoid激活函数,由于RELU函数的导数为0或者1,在反向传播的过程当中不会衰减至0。

除此以外,还能够更改内部结构来解决梯度消失和梯度爆炸问题,那就是LSTM,请见下回分解!

(4)除了梯度弥散或爆炸问题,RNN还存在什么问题?如何解决?

答:

(5)你能将RNN预测正弦序列的实现范例用Eager执行模式进行改写吗?

相关文章
相关标签/搜索