参考:https://zhuanlan.zhihu.com/p/518848475
一、RNN
RNN简单来说就是循环卷积网络。
简而言之,在计算下一次的信息的时候,会将上一次计算的信息加入这一次的计算,这就是循环的意思。这样的卷积方式可以充分的运用上一层信息,这样就让RNN网络十分符合语言处理的环境(语言也是依赖上下文语义的)。
下图也可以看出来整个循环卷积的思路。
二、LSTM
(1)模型结构
RNN随着信息量的提高,会出现梯度消失,梯度爆炸,长距离依赖性差等问题。所以提出了LSTM,长短期记忆(Long short-term memory, LSTM)也是一种RNN网络。从网络结构而言, LSTM在网络中加入了许多模块。
在LSTM有两条道路,分别是C(细胞层),H(隐藏层)。
整个网络有3个输入分别是:当前输入X(t),上一层的隐藏层h(t-1),上一层的细胞层C(t-1)。整个网络有2个输出分别当前网络计算后的隐藏层h(t)和细胞层C(t)。
通俗来说,C层是控制参数,它决定了什么样的信息会被保留,什么样的信息会被遗忘。在LSTM中C层和H层通过“门”进行了交互。可以看到h(t)不光光是由上一个状态,和本次的输入所决定,还有一个细胞状态C(t-1),这是其与RNN最大的不用。
(2)门的结构
①遗忘门
σ的输出在0到1之间,可以看到ft与c(t-1)做逐位乘法,这样如果ft对应的位置为0,那么细胞层对应位置的信息也会被清楚,这样就达到遗忘的目的。
②更新门
更新门会输入it和Ct两个参数,他们相乘后再与出入过来的更新后的Ct-1进行加法。
it这个信息等于遗忘门中的过σ,也就是哪些信息需要保留,tanh是将内容归一化到-1,1。
这里就是将细胞层通过以往后的信息与得到的新信息拼贴起来就是更新后的细胞层信息了。
③输出门
在pytorch中公式有差别,但是思想是类似的,将相同的网络拼贴起来就是大致的总网络结构了,总之LSTM记住需要长时间记忆的,忘记不重要的信息。
三、BI-LSTM
BI-LSTM,双向长短期记忆。将上一个细胞状态同时引入到输入门、遗忘门以及新信息的计算当中。对于序列建模的任务来说,每一个时刻的未来信息和历史信息同等重要,标准的LSTM模型按其顺序并不能捕获未来的信息。双向LSTM模型,在原有的正向LSTM网络层上增加一层反向的LSTM层。也就是说BI-LSTM既能往前计算,也能往后计算。
参考https://blog.csdn.net/m0_59749089/article/details/128754246中的图解,实际上就是两个单独的LSTM,再将结果进行拼贴后处理,就是一种优化的LSTM。其中两个LSTM的参数不共享,知识共享一个词向量列表。