您的位置:首页 > 理论基础 > 计算机网络

递归神经网络问题整理

2017-05-03 16:11 176 查看

问题一:LSTM如何避免梯度弥散和梯度爆炸

LSTM只能避免RNN的梯度消失(gradient vanishing);梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。下面简单说说LSTM如何避免梯度消失.

RNN的本质是在网络内部维护了一个状态

,其中

表示时间且

可递归计算。

传统的RNN总是用“覆写”的方式计算状态:

,其中

表示仿射变换外面在套一个Sigmoid,

表示输入序列在时刻

的值。根据求导的链式法则,这种形式直接导致梯度被表示为连成积的形式,以致于造成梯度消失——粗略的说,很多个小于1的项连乘就很快的逼近零。

现代的RNN(包括但不限于使用LSTM单元的RNN)使用“累加”的形式计算状态:

,其中的

显示依赖序列输入

.
稍加推导即可发现,这种累加形式导致导数也是累加形式,因此避免了梯度消失。

以上解释来自于文献[1]的第2节以及文献[2]的3.3节,希望对题主有帮助。

参考文献:

[1] Rafa Jozefowicz et al. An Empirical Exploration of Recurrent Network Architectures.

[2] Junyoung Chung et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling.

问题二:LSTM中为什么不推荐使用relu

lstm使用relu可能intuitively
doesn't make sense. lstm中非线性单元的输出在[0,1]之间,然后会与其它信号做乘积,模拟“cut off”信号和“let go”信号这两种状态,起到开关的作用;如果改用relu做非线性单元,输出 [0, +inf],这除了能"cut off"信号,还能"scale/expand"信号(梯度爆炸)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: