1、回顾RNN

RNN字母预测tensorflow_RNN字母预测tensorflow


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字母预测tensorflow_lstm_02


上图是RNN的细胞结构,会有上一刻的隐状态ht-1和t时刻的输入Xt做一个组合,组合之后经过wx+b的作用,经过sigmoid的一个转换,得到输出ht和隐状态ht。中间经过的这些作用相当于一个黑盒子,而LSTM就是在黑盒子上做的改变。

RNN字母预测tensorflow_rnn_03


把黑盒子隐藏掉,外部可以看到的就是就如上图所示的结构。

2、RNN的改进——LSTM

RNN字母预测tensorflow_rnn_04


这是LSTM整体的一个结构图,不看里面的一些操作,整体外部结构跟RNN相似,只是两个结构之间进行了两次隐藏状态的传递。

LSTM是通过三个“门”结构来去除或增加“细胞状态”的信息。

LSTM的三个“门”的作用

LSTM的关键:Ct–细胞状态

细胞状态类似于传送带,直接在整个链上运行,只有一些少量线性交互,信息很容易在上面流传保持不变。上一个细胞的状态不仅与ht-1有关,而且与Ct-1有关。Ct-1即我们所说的一个长时记忆,ht-1就是一个短时记忆。

RNN字母预测tensorflow_rnn_05

忘记门

这个门的作用是决定从“细胞状态”中丢弃什么信息。

ht-1与Xt直接结合起来(例如:Xt是28位的向量,ht-1是128位的向量,那么结合起来就是156位的向量),经过sigmoid激活,因为sigmoid的值在[0,1]之间,当sigmoid的值接近0时就选择遗忘,接近1时继续进行传递。

ft=σ(Wf[ht-1,xt]+bf)

RNN字母预测tensorflow_神经网络_06

输入门

决定放什么信息到“细胞状态”,进行数据加强。
这个门可以分为两部分,一个是学习门,一个是记忆门。

首先我们来说学习门。

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构成了学习门,确定信息的删除和增加。

RNN字母预测tensorflow_神经网络_07


接着是记忆门。

更新Ct-1为Ct,将旧状态Ct-1与ft相乘,丢失掉确定不要的信息,加上新的状态信息it*Ct得到最终更新后的细胞状态。

Ct=ft * Ct-1+it * C ~t

经过忘记门、学习门才真正达到保留学习的功能。

RNN字母预测tensorflow_数据_08

输出门

基于“细胞状态”得到输出。

首先由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时,说明对以前的信息不作处理。

RNN字母预测tensorflow_数据_09

总结

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]