对比一下

RNN(循环神经网络)模型的由来可以用一个简单的比喻来解释:它就像是一位有记忆力的阅读者,可以阅读一本有序的书,并通过记住之前阅读的内容来理解和预测后面的内容。

前馈神经网络

循环神经网络
具有连续性的输入序列, 如人类的语言, 语音等进行很好的处理

工作原理


$X$:单词的向量,$W$:权重矩阵,$O$:本时刻的输出,$s$该隐藏层的值,$st=f(U·X_t+W·S{t-1})$,$O(t)=g(V S_t)$
值得注意的一点是,在整个训练过程中,每一时刻所用的都是同样的W。

  1. 输入层:RNN能够接受一个输入序列(例如文字、股票价格、语音信号等)并将其传递到隐藏层。

    • 每个时间步,RNN从输入层接收一个新的输入,并将其与之前的隐藏状态结合起来,以生成新的隐藏状态。
  2. 隐藏层:隐藏层之间存在循环连接,使得网络能够维护一个“记忆”状态,这一状态包含了过去的信息。这使得RNN能够理解序列中的上下文信息。

    • 隐藏层之间的循环连接使得信息可以在时间步之间传播,从而捕捉序列中的依赖关系。
    • RNN 的意义在于它引入了记忆单元,能够将之前的信息存储下来,并在后续处理中使用。

  1. 输出层:RNN可以有一个或多个输出,例如在序列生成任务中,每个时间步都会有一个输出。
    • 每个时间步的隐藏状态都会传递到输出层,以生成对应的输出。

工作流程

【输入】:

【第一步】:

两个蓝色的小方块即代表$s{t-1}$,所有的权重均为1
运用公式$s_t=f(U·X_t+W·S
{t-1})=11+11+10+10=2$ , $O_t=g(Vs_t)=12+12=4$

【第二步】:

$st=f(U·X_t+W·S{t-1})=11+11+12+12=6$ , $O_t=g(Vs_t)=16+16=12$

【输出】

循环神经网络的主要变体

长短时记忆网络(LSTM)

传统存在问题

Long short-term memory,翻译过来就是长短期记忆

传统RNN的缺点:每一时刻的隐藏状态都不仅由该时刻的输入决定,还取决于上一时刻的隐藏层的值,如果一个句子很长,到句子末尾时,它将记不住这个句子的开头的内容详细内容
“他出生在中国,去过很多国家,…,能说流利的”

模型结构

三个门


在每个时间点Tn,都会有一个对应的状态Ct。这个Ct记录了之前的信息。在每个时间点,都可以通过调节权重的输入,遗忘等方式去修正Ct的状态。但$C_t$的值受到遗忘门、输入门等的影响——

  1. Input Gate:中文是输入门,在每一时刻从输入层输入的信息会首先经过输入门,输入门的开关会决定这一时刻是否会有信息输入到Memory Cell。
    • 总共决定了要影响Ct的量是多少,
    • 首先会拿上一个阶段的输出ht-1和这个阶段的输入xt,通过sigmoid来控制现在要加多少进入主线剧情Ct
    • 用tanh(激活函数)去控制要加入Ct的部分是多少。
  2. Output Gate:中文是输出门,每一时刻是否有信息从Memory Cell输出取决于这一道门。
  3. Forget Gate:中文是遗忘门,每一时刻Memory Cell里的值都会经历一个是否被遗忘的过程,就是由该门控制的,如果需要遗忘,那么将会把Memory Cell里的值清除,也就是遗忘掉。
    • 对于Ct-1来说,会首先看上一个阶段的输出ht-1和这个阶段的输入xt,并通过sigmoid来确定要让Ct-1,来忘记多少,sigmoid=1表示要保存多一些Ct-1的比重,等于0表示完全忘记之前的Ct-1。
      遗忘门

双向循环神经网络 Bi-RNN

传统问题

  • ___
  • ___饿了。
  • ___饿了,我可以吃两碗饭。


处理正向和反向输入序列。每个时间步的输出取决于过去和未来的输入。

要分别在前向后向均做训练


参考资料:
[1] https://zhuanlan.zhihu.com/p/652712909
[2] https://zhuanlan.zhihu.com/p/123211148