1、回顾RNN
Xt是在t时刻的输入。
St是在实践中t时刻的“记忆”,其中St=f(UXt+WSt-1) 其中f可以是tanh这种非线性转换函数。
Ot是在时间t处的输出。
在时间t时刻输入数据X,表示为Xt,经过隐藏层S作用,得到输出ht,ht保留下来与Xt+1一起又经S作用,得到输出,如此反复循环。
S1=f(UX1+WS0)
S2=f(UX2+WS1)
……
St=f(UXt+WSt-1)
这就导致了最后一个时刻的隐藏状态依赖于前面所有的隐藏状态。
RNN对于长期依赖问题无法进行解决,由此可能会产生梯度消失和梯度爆炸问题,而RNN的变形LSTM解决了这个问题。
上图是RNN的细胞结构,会有上一刻的隐状态ht-1和t时刻的输入Xt做一个组合,组合之后经过wx+b的作用,经过sigmoid的一个转换,得到输出ht和隐状态ht。中间经过的这些作用相当于一个黑盒子,而LSTM就是在黑盒子上做的改变。
把黑盒子隐藏掉,外部可以看到的就是就如上图所示的结构。
2、RNN的改进——LSTM
这是LSTM整体的一个结构图,不看里面的一些操作,整体外部结构跟RNN相似,只是两个结构之间进行了两次隐藏状态的传递。
LSTM是通过三个“门”结构来去除或增加“细胞状态”的信息。
LSTM的三个“门”的作用
LSTM的关键:Ct–细胞状态
细胞状态类似于传送带,直接在整个链上运行,只有一些少量线性交互,信息很容易在上面流传保持不变。上一个细胞的状态不仅与ht-1有关,而且与Ct-1有关。Ct-1即我们所说的一个长时记忆,ht-1就是一个短时记忆。
忘记门
这个门的作用是决定从“细胞状态”中丢弃什么信息。
ht-1与Xt直接结合起来(例如:Xt是28位的向量,ht-1是128位的向量,那么结合起来就是156位的向量),经过sigmoid激活,因为sigmoid的值在[0,1]之间,当sigmoid的值接近0时就选择遗忘,接近1时继续进行传递。
ft=σ(Wf[ht-1,xt]+bf)
输入门
决定放什么信息到“细胞状态”,进行数据加强。
这个门可以分为两部分,一个是学习门,一个是记忆门。
首先我们来说学习门。
it=σ(Wi[ht-1,xt]+bi)
C ~t=σ(Wc[ht-1,xt]+bc)
it是忽略因子,由ht-1和xt做一个sigmoid转换,值在[0,1]范围内,决定了哪些部分删除,sigmoid决定什么值需要去除和更新。
tanh层创建了一个新的信息向量Ct,函数的取值范围为-1或1,-1表示负加强,1表示正加强。
it与tanh构成了学习门,确定信息的删除和增加。
接着是记忆门。
更新Ct-1为Ct,将旧状态Ct-1与ft相乘,丢失掉确定不要的信息,加上新的状态信息it*Ct得到最终更新后的细胞状态。
Ct=ft * Ct-1+it * C ~t
经过忘记门、学习门才真正达到保留学习的功能。
输出门
基于“细胞状态”得到输出。
首先由ht-1和xt经过sigmoid层来确定将细胞哪个状态输出。
再使用tanh处理“细胞状态”Ct,得到一个[-1,1]之间的值,将它与sigmoid的输出相乘,最后确定输出的部分。
Ot=σ(Wo[ht-1,xt]+bo)
ht=Ot*tanh(Ct)
其中Ot的范围在[0,1],tanh的范围在[-1,1],所以ht的范围在[-1,1],当ht=0时,说明对以前的信息不作处理。
总结
LSTM模型相比于RNN,增加了三个门:忘记门(遗忘门)、输入门、输出门。LSTM用Ct来传递很久以前的消息,已达到长距离以来的目的,cell是用来保存过去记忆的Ct。
所以LSTM隐藏层神经元的输入是上一时刻的隐状态ht-1和记忆Ct-1,输出是当前时刻的隐状态ht和希望传递给下一时刻的记忆Ct。所以从外部看的话,LSTM比RNN多了一条向后传递的隐状态,即Ct。
以上的内容是对“L先生AI课堂之神经网络”进行总结。
以下是B站上网课的地址:
[https://space.bilibili.com/484960920?from=search&seid=4861382416827879200]