实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

        我们都知道RNN到迭代后期会出现“梯度消失”的问题;

        我们也知道LSTM是RNN的变形和改进,它解决了RNN中的“梯度消失”问题;

        我们还知道LSTM的各种门(遗忘门、输入门、输出门)。

        但是,我们不知道究竟LSTM是如何通过这些门解决“梯度消失”的,反正之前我一直很含糊,现在,我们就一探究竟。

      1.初识RNN与LSTM:

         为了更好的直观上比较二者的不同,我决定直接上图:

         普通RNN:

                                  实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

          LSTM:

                                  实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

      2.梯度消失的缘由:

        RNN中一般会用tanh()函数作为**函数,而tanh函数如下图所示,在迭代后期,会逐渐收敛,导致梯度趋于0,于是,出现了“梯度下降”的问题。

                                                                       实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

      3.LSTM如何解决:

        遗忘门:

                                                                             实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

         输入门:

                                                                          实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

         状态更新:

                                                                             实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

         输出门:

                                                                             实习点滴(9)--LSTM是如何解决RNN中的“梯度消失”

        现在我们看看它是如何解决的。

        我们可以看到,最后我们输出是两部分的“同或”运算,第一部分与RNN的运算相同,第二部分是通过三个门新增加的,这一部分正是LSTM的特别之处,在反向传播的过程中,不仅仅由o(t)起作用(因为,如果只有o起作用,那么还是会出现梯度消失),从而解决了梯度消失的问题