1700538743
百面机器学习:算法工程师带你去面试 02 循环神经网络的梯度消失问题
1700538744
1700538745
1700538746
1700538747
场景描述
1700538748
1700538749
细究深度学习的发展历史,其实早在1989年,深度学习先驱Lecun就已经提出了基于反向传播算法的卷积神经网络LeNet,将其用于数字识别任务,并取得了良好的效果。但Lenet在当时并没有取得广泛的关注与重视,也少有人接着这项工作继续研究,提出更新颖、突出的模型。另外深度神经网络模型由于缺乏严格的数学理论支持,在20世纪80年代末,这股浪潮便渐渐退去,走向平淡。
1700538750
1700538751
1991年,深度学习的发展达到了一个冰点。在这一年,反向传播算法被指出存在梯度消失(Gradient Vanishing)问题,即在梯度的反向传播过程中,后层的梯度以连乘方式叠加到前层。由于当时神经网络中的激活函数一般都使用Sigmoid函数,而它具有饱和特性,在输入达到一定值的情况下,输出就不会发生明显变化了。而后层梯度本来就比较小,误差梯度反传到前层时几乎会衰减为0,因此无法对前层的参数进行有效的学习,这个问题使得本就不景气的深度学习领域雪上加霜。在循环神经网络中,是否同样存在梯度消失的问题呢?
1700538752
1700538753
知识点
1700538754
1700538755
梯度消失,梯度爆炸(Gradient Explosion)
1700538756
1700538757
问题 循环神经网络为什么会出现梯度消失或梯度爆炸?有哪些改进方案?
1700538758
1700538759
难度:★★☆☆☆
1700538760
1700538761
分析与解答
1700538762
1700538763
循环神经网络模型的求解可以采用BPTT(Back Propagation Through Time,基于时间的反向传播)算法实现,BPTT实际上是反向传播算法的简单变种。如果将循环神经网络按时间展开成T层的前馈神经网络来理解,就和普通的反向传播算法没有什么区别了。循环神经网络的设计初衷之一就是能够捕获长距离输入之间的依赖。从结构上来看,循环神经网络也理应能够做到这一点。然而实践发现,使用BPTT算法学习的循环神经网络并不能成功捕捉到长距离的依赖关系,这一现象主要源于深度神经网络中的梯度消失。传统的循环神经网络梯度可以表示成连乘的形式
1700538764
1700538765
1700538766
,
1700538767
1700538768
(10.4)
1700538769
1700538770
其中
1700538771
1700538772
nett=Uxt+Wht−1,
1700538773
1700538774
(10.5)
1700538775
1700538776
ht=f(nett) ,
1700538777
1700538778
(10.6)
1700538779
1700538780
y=g(Vht) ,
1700538781
1700538782
(10.7)
1700538783
1700538784
1700538785
1700538786
1700538787
1700538788
,
1700538789
1700538790
(10.8)
1700538791
[
上一页 ]
[ :1.700538742e+09 ]
[
下一页 ]