参考
史上最详细循环神经网络讲解(RNN/LSTM/GRU)
零基础入门深度学习(6) - 长短时记忆网络(LSTM)
Understanding LSTM Networks 最经典的一篇,那些文章基本都是解释这篇的,但是不容易看
大名鼎鼎的LSTM详解
如何从RNN起步,一步一步通俗理解LSTM 有动图,非常好的一篇很推荐阅读

长短时记忆神经网络(Long Short-term Memory Networks,LSTM)是一种 RNN 特殊的类型,可以学习长期依赖信息。

为什么LSTM比普通RNN效果好?
这里牵扯到梯度消失和爆炸的问题,由于最基础版本的RNN每一时刻的隐藏状态都不仅由该时刻的输入决定,还取决于上一时刻的隐藏层的值,受梯度消失的影响,如果一个句子很长,到句子末尾时,它将记不住这个句子的开头的内容详细内容,

RNN什么信息都存下来,因为它没有选择性地更新隐藏状态的能力,而LSTM不一样,它会选择性的存储信息,它有门控装置可以选择遗忘不重要的信息,选择性地写入新的信息,控制隐藏状态的输出。
但是LSTM依然受到梯度消失的影响,不能彻底消除。

  1. Input Gate:输入门,在每一时刻从输入层输入的信息会首先经过输入门,输入门的开关会决定这一时刻是否会有信息输入到Memory Cell。
  2. Output Gate:输出门,每一时刻是否有信息从Memory Cell输出取决于这一道门。
  3. Forget Gate:遗忘门,每一时刻Memory Cell里的值都会经历一个是否被遗忘的过程,就是由该门控制的,如果打卡,那么将会把Memory Cell里的值清除,也就是遗忘掉。
    按照上图的顺序,信息在传递的顺序,是这样的:

先经过输入门,看是否有信息输入,再判断遗忘门是否选择遗忘Memory Cell里的信息,最后再经过输出门,判断是否将这一时刻的信息进行输出。

所有RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层。
激活函数最主要的作用就是突破线性约束,引入非线性能力,使神经网络能拟合复杂的函数关系。

激活函数 Tanh 作用在于帮助调节流经网络的值,使得数值始终限制在 -1 和 1 之间。

LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。具体来说,RNN是重复单一的神经网络层,LSTM中的重复模块则包含四个交互的层,三个Sigmoid 和一个tanh层,并以一种非常特殊的方式进行交互。

因记忆能力有限,记住重要的,忘记无关紧要的。
把C视作长期记忆(细胞记忆)把h视作短期记忆(隐层记忆)方便理解。

遗忘门控制的是保留上一时刻细胞状态的程度,而的加工后版本的信息。

输入门的sigmoid层决定什么值将要更新,tanh层创建一个新的候选值向量Cₜ ,会被加入到状态中。把旧状态与相乘,丢弃不需要的信息,接着加上候选记忆就是新细胞记忆,根据我们决定更新每个状态的程度进行变化。

输出门sigmoid层确定输出细胞状态哪个部分出去,把细胞状态通过tanh进行处理并将它和sigmoid门的输出相乘,最终输出需要输出的部分(并非需要全部输出)。

具体公式如下,下标是对应门的英文首字母

  • 遗忘门:

$$
f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)
$$

  • 输入门:

$$
i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)
$$

  • 候选状态:

$$
\tilde{c}t = \tanh(W_c x_t + U_c h{t-1} + b_c)
$$

  • 状态更新:

$$
c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t
$$

  • 输出门和隐藏状态:

$$
o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)
$$

$$
h_t = o_t \odot \tanh(c_t)
$$

其实学进去了还是很好懂的,越想越佩服前人的智慧
下面是和gpt的交流真假不一定但是思路开阔一下可以看看