当前位置:网站首页>深度理解RNN的梯度消失和LSTM为什么能解决梯度消失

深度理解RNN的梯度消失和LSTM为什么能解决梯度消失

2022-06-21 05:57:00 前行_的路上

一、RNN的梯度消失有什么不同之处

 

先说结论:RNN的梯度等于近距离梯度与远距离梯度的和,RNN的梯度消失是远距离梯度的消失,而近距离梯度不会消失,同时总的梯度不会消失,从而导致总的梯度由近距离梯度占主导。

提到梯度消失,你肯定会说是因为网络层次太深,导致导数连乘项太多,所以梯度很小。这种回答适用于深度神经网络,但不适用于RNN。

因为RNN的梯度是一个和!!而且RNN的是共享一套参数的!

但我们在理解RNN的时候,经常喜欢把RNN按时间序列展开,可能会误解RNN是多套参数的,但其实是共用一套参数。

假设时间序列为3,将RNN展开就如上图所示,每一个时刻的隐状态和输出分别如下式:

假设我们现在处理的任务只需要用t=3时刻的输出去训练模型:

lloss = \frac{1}{2}(Y3-O3)^{2}

对Wx,Ws,Wo求偏导:

根据公式可以看出:时间序列越长,梯度连乘就越多,这就导致远距离梯度越小

二、LSTM为什么能解决RNN的梯度消失问题

LSTM有三个门:分别是遗忘门、输入门和输出门。

遗忘门:f(t) = \sigma (W_{f}[h_{t-1}, x_{t}]+b_{f})

输入门:i(t) = \sigma(W_i[h_{t-1}, x_t]+b_i))

输出门:o(t) = \sigma(W_o[h_{t-1}, x_t]+b_o)

细胞状态:c_t = f(t)\odot{c_{t-1}} + i(t)\odot tanh(W_c[h_{t-1}, x_t]+b_c)

隐状态:h_t = o(t) \odot tanh(c_t)

在前面的文章中,我们知道RNN梯度消失或梯度爆炸的原因是由于\prod_{i}^{n} \frac{\partial{S_i}}{\partial{S_{i-1}}},如果我们想办法将这一大坨去掉,就可以解决梯度问题了,而LSTM通过门机制解决了这个问题:

\frac{\partial{c_t}}{\partial{c_{t-1}}} = f(t)\frac{\partial{h_t}}{\partial{h_{t-1}}} = o(t)

我们知道,f(t)和o(t)是用sigmoid函数激励的,而sigmoid函数长这样:

 经过sigmoid函数映射之后的值非常容易趋近于0或者1,因此\prod_{i}^{n} \frac{\partial{S_i}}{\partial{S_{i-1}}}的这种一大坨问题就可以顺利解决。即当门为1时,梯度可以顺畅的在LSTM中传播,当门为0时,上一时刻的信息对当前时刻没有影响,也就没必要传递梯度回去更新参数了。

原网站

版权声明
本文为[前行_的路上]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ZhaoLinke1998/article/details/124975648