1.长短期记忆网络LSTM

LSTM(Long short-term memory)通过刻意的设计来避免长期依赖问题,是一种特殊的RNN。长时间记住信息实际上是 LSTM 的默认行为,而不是需要努力学习的东西!

所有递归神经网络都具有神经网络的链式重复模块。在标准的RNN中,这个重复模块具有非常简单的结构,例如只有单个tanh层,如下图所示。
[外链图片转存失败(img-EwKxtSFp-1569051242265)(./images/lstm-rnn.jpg)]
LSTM具有同样的结构,但是重复的模块拥有不同的结构,如下图所示。与RNN的单一神经网络层不同,这里有四个网络层,并且以一种非常特殊的方式进行交互。

1.1 LSTM–遗忘门

LSTM 的第一步要决定从细胞状态中舍弃哪些信息。这一决定由所谓“遗忘门层”的 S 形网络层做出。它接收 ht−1h_{t-1}ht−1​ 和 xtx_txt​,并且对细胞状态 Ct−1C_{t−1}Ct−1​ 中的每一个数来说输出值都介于 0 和 1 之间。1 表示“完全接受这个”,0 表示“完全忽略这个”。

1.2 LSTM–输入门

下一步就是要确定需要在细胞状态中保存哪些新信息。这里分成两部分。第一部分,一个所谓“输入门层”的 S 形网络层确定哪些信息需要更新。第二部分,一个 tanh 形网络层创建一个新的备选值向量—— C~t\tilde{C}_tC~t​,可以用来添加到细胞状态。在下一步中我们将上面的两部分结合起来,产生对状态的更新。

1.3 LSTM–细胞状态更新

现在更新旧的细胞状态 Ct−1C_{t−1}Ct−1​ 更新到 CtC_tCt​。先前的步骤已经决定要做什么,我们只需要照做就好。
我们对旧的状态乘以 ftf_tft​,用来忘记我们决定忘记的事。然后我们加上 it⊙C~ti_t\odot\tilde{C}_tit​⊙C~t​,这是新的候选值,根据我们对每个状态决定的更新值按比例进行缩放。

1.4 LSTM–输出门

最后,我们需要确定输出值。输出依赖于我们的细胞状态,但会是一个“过滤的”版本。首先我们运行 S 形网络层,用来确定细胞状态中的哪些部分可以输出。然后,我们把细胞状态输入 tanh(把数值调整到 −1 和 1 之间)再和 S 形网络层的输出值相乘,部这样我们就可以输出想要输出的分。

1.5 LSTM的变种

目前我所描述的还只是一个相当一般化的 LSTM 网络。但并非所有 LSTM 网络都和之前描述的一样。事实上,几乎所有文章都会改进 LSTM 网络得到一个特定版本。差别是次要的,但有必要认识一下这些变种。

(1) 一个流行的 LSTM 变种由 Gers 和 Schmidhuber 提出,在 LSTM 的基础上添加了一个“窥视孔连接”,这意味着我们可以让门网络层输入细胞状态。

上图中我们为所有门添加窥视孔,但许多论文只为部分门添加.

(2)另一个变种把遗忘和输入门结合起来。同时确定要遗忘的信息和要添加的新信息,而不再是分开确定。当输入的时候才会遗忘,当遗忘旧信息的时候才会输入新数据。

(3)一个更有意思的 LSTM 变种称为 Gated Recurrent Unit(GRU),由 Cho 等人提出。GRU 把遗忘门和输入门合并成为一个“更新门”,把细胞状态和隐含状态合并,还有其他变化。这样做使得 GRU 比标准的 LSTM 模型更简单,因此正在变得流行起来。

2.LSTM前向传播与反向传播

本小节只推导添加“窥视孔连接”的变种LSTM,如下图所示,其它LSTM变种的推导方法与该方法类似,这里不做过多介绍。对反向传播算法了解不够透彻的,请参考https://zhuanlan.zhihu.com/p/79657669 ,这里有详细的推导过程,本文将直接使用https://zhuanlan.zhihu.com/p/79657669的结论。

为了更直观的推导反向传播算法,将其转化为右图所示形式。

2.1 LSTM前向传播

LSTM在t时刻的前向传播公式为:
{it=σ(i~t)=σ(Wxixt+Whiht−1+Wcict−1+bi)ft=σ(f~t)=σ(Wxfxt+Whfht−1+Wcfct−1+bf)gt=tanh⁡(g~t)=tanh⁡(Wxgxt+Whght−1+bg)ot=σ(o~t)=σ(Wxoxt+Whoht−1+Wcoct+bo)ct=ct−1⊙ft+gt⊙itmt=tanh⁡(ct)ht=ot⊙mtyt=Wyhht+by\left\{ \begin{array}{l} {i_t=\sigma(\tilde{i}_t)=\sigma(W_{xi}x_t+W_{hi}h_{t-1}+W_{ci}c_{t-1}+b_i)} \\ {f_t=\sigma(\tilde{f}_t)=\sigma(W_{xf}x_t+W_{hf}h_{t-1}+W_{cf}c_{t-1}+b_f) }\\ {g_t=\tanh(\tilde{g}_t)=\tanh(W_{xg}x_t+W_{hg}h_{t-1}+b_g)} \\ {o_t=\sigma(\tilde{o}_t)=\sigma(W_{xo}x_t+W_{ho}h_{t-1}+W_{co}c_{t}+b_o) }\\ {c_t=c_{t-1}\odot f_t+g_t\odot i_t}\\ {m_t=\tanh(c_t)}\\ {h_t=o_t\odot m_t}\\ {y_t=W_{yh}h_t+b_y} \end{array}\right.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​it​=σ(i~t​)=σ(Wxi​xt​+Whi​ht−1​+Wci​ct−1​+bi​)ft​=σ(f~​t​)=σ(Wxf​xt​+Whf​ht−1​+Wcf​ct−1​+bf​)gt​=tanh(g~​t​)=tanh(Wxg​xt​+Whg​ht−1​+bg​)ot​=σ(o~t​)=σ(Wxo​xt​+Who​ht−1​+Wco​ct​+bo​)ct​=ct−1​⊙ft​+gt​⊙it​mt​=tanh(ct​)ht​=ot​⊙mt​yt​=Wyh​ht​+by​​

2.2 LSTM反向传播

已知:∂J∂yt,∂J∂ct+1,∂J∂o~t+1,,∂J∂f~t+1,∂J∂i~t+1,∂J∂g~t+1\frac{\partial J}{\partial y_t},\frac{\partial J}{\partial c_{t+1}},\frac{\partial J}{\partial \tilde{o}_{t+1}},,\frac{\partial J}{\partial \tilde{f}_{t+1}},\frac{\partial J}{\partial \tilde{i}_{t+1}},\frac{\partial J}{\partial \tilde{g}_{t+1}}∂yt​∂J​,∂ct+1​∂J​,∂o~t+1​∂J​,,∂f~​t+1​∂J​,∂i~t+1​∂J​,∂g~​t+1​∂J​,求某个节点梯度时,首先应该找到该节点的输出节点,然后分别计算所有输出节点的梯度乘以输出节点对该节点的梯度,最后相加即可得到该节点的梯度。如计算∂J∂ht\frac{\partial J}{\partial h_t}∂ht​∂J​时,找到hth_tht​节点的所有输出节点yt、o~t+1、f~t+1、i~t+1、g~t+1y_t、 \tilde{o}_{t+1}、\tilde{f}_{t+1}、\tilde{i}_{t+1}、\tilde{g}_{t+1}yt​、o~t+1​、f~​t+1​、i~t+1​、g~​t+1​,然后分别计算输出节点的梯度(如∂J∂yt\frac{\partial J}{\partial y_t}∂yt​∂J​)与输出节点对hth_tht​的梯度的乘积(如∂J∂ytWyhT\frac{\partial J}{\partial y_t}W_{yh}^T∂yt​∂J​WyhT​),最后相加即可得到节点hth_tht​的梯度:
∂J∂ht=∂J∂ytWyhT+∂J∂o~t+1WhoT+∂J∂f~t+1WhfT+∂J∂i~t+1WhiT+∂J∂g~t+1WhgT\frac{\partial J}{\partial h_t}=\frac{\partial J}{\partial y_t}W_{yh}^T+\frac{\partial J}{\partial \tilde{o}_{t+1}}W_{ho}^T+\frac{\partial J}{\partial \tilde{f}_{t+1}}W_{hf}^T+\frac{\partial J}{\partial \tilde{i}_{t+1}}W_{hi}^T+\frac{\partial J}{\partial \tilde{g}_{t+1}}W_{hg}^T ∂ht​∂J​=∂yt​∂J​WyhT​+∂o~t+1​∂J​WhoT​+∂f~​t+1​∂J​WhfT​+∂i~t+1​∂J​WhiT​+∂g~​t+1​∂J​WhgT​
同理可得t时刻其它节点的梯度:
{∂J∂ht=∂J∂ytWyhT+∂J∂o~t+1WhoT+∂J∂f~t+1WhfT+∂J∂i~t+1WhiT+∂J∂g~t+1WhgT∂J∂mt=∂J∂ht⊙ot∂J∂ct=∂J∂mtdmtdct+∂J∂ct+1⊙ft+1+∂J∂f~t+1WcfT+∂J∂i~t+1WciT∂J∂gt=∂J∂ct⊙it∂J∂it=∂J∂ct⊙gt∂J∂ft=∂J∂ct⊙ct−1∂J∂ot=∂J∂ht⊙mt}⇒{∂J∂g~t=∂J∂gt(1−gt2)∂J∂i~t=∂J∂itit(1−it)∂J∂f~t=∂J∂ftft(1−ft)∂J∂o~t=∂J∂otit(1−ot)∂J∂xt=∂J∂o~tWxoT+∂J∂f~tWxfT+∂J∂i~tWxiT+∂J∂g~tWxgT\left \{\begin{array}{l} \frac{\partial J}{\partial h_t}=\frac{\partial J}{\partial y_t}W_{yh}^T+\frac{\partial J}{\partial \tilde{o}_{t+1}}W_{ho}^T+\frac{\partial J}{\partial \tilde{f}_{t+1}}W_{hf}^T+\frac{\partial J}{\partial \tilde{i}_{t+1}}W_{hi}^T+\frac{\partial J}{\partial \tilde{g}_{t+1}}W_{hg}^T \\ \\ \frac{\partial J}{\partial m_t} = \frac{\partial J}{\partial h_t} \odot o_t \\ \\ \frac{\partial J}{\partial c_t} = \frac{\partial J}{\partial m_t}\frac{dm_t}{dc_t}+ \frac{\partial J}{\partial c_{t+1}}\odot f_{t+1} +\frac{\partial J}{\partial \tilde{f}_{t+1}}W_{cf}^T+\frac{\partial J}{\partial \tilde{i}_{t+1}}W_{ci}^T \\ \\ \left. \begin{array}{l} \frac{\partial J}{\partial g_t} = \frac{\partial J}{\partial c_t}\odot i_t \\ \frac{\partial J}{\partial i_t} = \frac{\partial J}{\partial c_t} \odot g_t \\ \frac{\partial J}{\partial f_t} = \frac{\partial J}{\partial c_t} \odot c_{t-1} \\ \frac{\partial J}{\partial o_t} = \frac{\partial J}{\partial h_t} \odot m_t \end{array} \right \} \Rightarrow \left\{ \begin{array}{l} \frac{\partial J}{\partial \tilde{g}_t} = \frac{\partial J}{\partial g_t}(1-g_t^2) \\ \frac{\partial J}{\partial \tilde{i}_t} = \frac{\partial J}{\partial i_t}i_t(1-i_t) \\ \frac{\partial J}{\partial \tilde{f}_t} = \frac{\partial J}{\partial f_t}f_t(1-f_t) \\ \frac{\partial J}{\partial \tilde{o}_t} = \frac{\partial J}{\partial o_t}i_t(1-o_t) \\ \end{array}\right. \\ \\ \frac{\partial J}{\partial x_t} = \frac{\partial J}{\partial \tilde{o}_t}W_{xo}^T+\frac{\partial J}{\partial \tilde{f}_t}W_{xf}^T+ \frac{\partial J}{\partial \tilde{i}_t}W_{xi}^T+\frac{\partial J}{\partial \tilde{g}_t}W_{xg}^T\\ \end{array}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​∂ht​∂J​=∂yt​∂J​WyhT​+∂o~t+1​∂J​WhoT​+∂f~​t+1​∂J​WhfT​+∂i~t+1​∂J​WhiT​+∂g~​t+1​∂J​WhgT​∂mt​∂J​=∂ht​∂J​⊙ot​∂ct​∂J​=∂mt​∂J​dct​dmt​​+∂ct+1​∂J​⊙ft+1​+∂f~​t+1​∂J​WcfT​+∂i~t+1​∂J​WciT​∂gt​∂J​=∂ct​∂J​⊙it​∂it​∂J​=∂ct​∂J​⊙gt​∂ft​∂J​=∂ct​∂J​⊙ct−1​∂ot​∂J​=∂ht​∂J​⊙mt​​⎭⎪⎪⎪⎬⎪⎪⎪⎫​⇒⎩⎪⎪⎪⎨⎪⎪⎪⎧​∂g~​t​∂J​=∂gt​∂J​(1−gt2​)∂i~t​∂J​=∂it​∂J​it​(1−it​)∂f~​t​∂J​=∂ft​∂J​ft​(1−ft​)∂o~t​∂J​=∂ot​∂J​it​(1−ot​)​∂xt​∂J​=∂o~t​∂J​WxoT​+∂f~​t​∂J​WxfT​+∂i~t​∂J​WxiT​+∂g~​t​∂J​WxgT​​

对参数的梯度:
{∂J∂Who=htT∂J∂o~t+1∂J∂Whf=htT∂J∂f~t+1∂J∂Whi=htT∂J∂i~t+1∂J∂Whg=htT∂J∂g~t+1{∂J∂Wyh=htT∂J∂yt∂J∂Wcf=ctT∂J∂f~t+1∂J∂Wci=ctT∂J∂i~t+1∂J∂Wco=ctT∂J∂o~t{∂J∂Wxo=xtT∂J∂o~t∂J∂Wxf=xtT∂J∂f~t∂J∂Wxi=xtT∂J∂i~t∂J∂Wxg=xtT∂J∂g~t\left \{\begin{array}{l} \frac{\partial J}{\partial W_{ho}} = h_t^T\frac{\partial J}{\partial \tilde{o}_{t+1}} \\ \frac{\partial J}{\partial W_{hf}} = h_t^T\frac{\partial J}{\partial \tilde{f}_{t+1}} \\ \frac{\partial J}{\partial W_{hi}} = h_t^T\frac{\partial J}{\partial \tilde{i}_{t+1}} \\ \frac{\partial J}{\partial W_{hg}} = h_t^T\frac{\partial J}{\partial \tilde{g}_{t+1}} \end{array} \right. \left \{\begin{array}{l} \frac{\partial J}{\partial W_{yh}} = h_t^T\frac{\partial J}{\partial y_t} \\ \frac{\partial J}{\partial W_{cf}} = c_t^T\frac{\partial J}{\partial \tilde{f}_{t+1}} \\ \frac{\partial J}{\partial W_{ci}} = c_t^T\frac{\partial J}{\partial \tilde{i}_{t+1}} \\ \frac{\partial J}{\partial W_{co}} = c_t^T\frac{\partial J}{\partial \tilde{o}_{t}} \end{array} \right. \left \{\begin{array}{l} \frac{\partial J}{\partial W_{xo}} = x_t^T\frac{\partial J}{\partial \tilde{o}_{t}} \\ \frac{\partial J}{\partial W_{xf}} = x_t^T\frac{\partial J}{\partial \tilde{f}_{t}} \\ \frac{\partial J}{\partial W_{xi}} = x_t^T\frac{\partial J}{\partial \tilde{i}_{t}} \\ \frac{\partial J}{\partial W_{xg}} = x_t^T\frac{\partial J}{\partial \tilde{g}_{t}} \\ \end{array} \right. ⎩⎪⎪⎪⎨⎪⎪⎪⎧​∂Who​∂J​=htT​∂o~t+1​∂J​∂Whf​∂J​=htT​∂f~​t+1​∂J​∂Whi​∂J​=htT​∂i~t+1​∂J​∂Whg​∂J​=htT​∂g~​t+1​∂J​​⎩⎪⎪⎪⎨⎪⎪⎪⎧​∂Wyh​∂J​=htT​∂yt​∂J​∂Wcf​∂J​=ctT​∂f~​t+1​∂J​∂Wci​∂J​=ctT​∂i~t+1​∂J​∂Wco​∂J​=ctT​∂o~t​∂J​​⎩⎪⎪⎪⎨⎪⎪⎪⎧​∂Wxo​∂J​=xtT​∂o~t​∂J​∂Wxf​∂J​=xtT​∂f~​t​∂J​∂Wxi​∂J​=xtT​∂i~t​∂J​∂Wxg​∂J​=xtT​∂g~​t​∂J​​

参考资料:https://www.cnblogs.com/xuruilong100/p/8506949.html

LSTM前向传播与反向传播算法推导(非常详细)相关推荐

  1. 3.3 前向传播与反向传播-机器学习笔记-斯坦福吴恩达教授

    前向传播与反向传播 前向传播过程(Forward Propagation) 神经网络每层都包含有若干神经元,层间的神经元通过权值矩阵 ΘlΘ^lΘl 连接.一次信息传递过程可以如下描述: 第 j 层神 ...

  2. 003-神经网络基础-最优化,前向传播,反向传播

    最优化: 包括前向传播和反向传播 前向传播: 由w和x到损失函数loss的过程叫做前向传播 反向传播: 根据梯度下降的概念,找到最优的w的过程叫做反向传播. 做一件什么事情呢? 根据前向传播的w得到的 ...

  3. 深度学习基础笔记——前向传播与反向传播

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 由于是文章阅读整合,依据个人情况标注排版, 不确定算不算转载,主要学习围绕AI浩的五万字总结,深度学习基础 如有侵权,请联系删除. 1前向传播与反 ...

  4. (二十四) 手推BP神经网络的前向传播和反向传播

    手推BP神经网络的前向传播和反向传播 一.基本术语 1.监督学习与非监督学习 Supervised Learning有监督式学习: 输入的数据被称为训练数据,一个模型需要通过一个训练过程,在这个过程中 ...

  5. 前向传播、反向传播(后向传播)、梯度下降、导数、链式法则

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.4 神经网络最优化过程 2.4.1 最优化(Optimiz ...

  6. 前馈神经网络--前向传播与反向传播计算过程

    目录 2.多层感知机(前馈神经网络) 2.1 定义 2.2 神经元 2.3 激活函数 2.3.1 sigmoid函数 2.3.2 tanh函数 2.3.3 relu函数 2.4 计算 2.4.1 前向 ...

  7. 神经网络的前向传播和反向传播

    本博客是对Michael Nielsen所著的<Neural Network and Deep Learning>第2章内容的解读,有兴趣的朋友可以直接阅读原文http://neuraln ...

  8. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  9. 神经网络的前向传播与反向传播

    神经网络的前向传播和反向传播 相信一开始,大家可能都对神经网络的前向传播和反向传播很头疼,我之前也是一样,后来慢慢懂了,现在深感知识传递的重要性.因此现在我就把我的一点点对两者的理解表达一下,希望能帮 ...

最新文章

  1. 9.spark core之共享变量
  2. BZOJ——1202: [HNOI2005]狡猾的商人
  3. Java synchronized 中的 while 和 notifyAll
  4. SAP MM模块的预留详解
  5. Centos 7 KVM安装win10
  6. SAP Fiori UI上关于时区Timezone的一些问题和解决方案
  7. 你好,面试官 | 你拿Java Map考验老干部?
  8. 玩家可以输入辅助指令_三菱FX系列PLC输入输出与辅助继电器之间有什么关系?...
  9. php 嗅探 真实地址,PHP嗅探youku视频的真实flv文件地址!
  10. java编译成exe_java编译成exe
  11. matlab实现参数方程求导(paradiff函数)
  12. 使用POI为Word文档设置阿拉伯数字形式、罗马数字形式的页脚
  13. yolov5系列-yolov5模型部署到web端
  14. [转载] 网页制作常用英语标示
  15. 如何建立一个自己的网站?不懂代码搭建自己网站详细教程
  16. Excel中的Countif和Countifs
  17. 《西游记》中师徒四人的形象探究及现实意义
  18. 微信第三方登录,主要手机没有安装微信处理
  19. Windows 10电脑使用VMware虚拟机安装macOS苹果系统[一站式保姆级别教程]
  20. 安防巡逻机器人在不同应用场景下的作用是什么?

热门文章

  1. elastic beats 开发
  2. 发动机噪音测试软件,Accelomemer
  3. Scala和Scalatra入门–第一部分
  4. 拍照与选取相册图片-cameralibrary
  5. linux运行geant4例子,四步轻松安装Geant4 (Linux篇) | 入门
  6. 唱片公司应该与时俱进而不是告迅雷
  7. mybatis 用map循环插入数据
  8. 模拟开关(CD4051B、CD4052B)介绍与应用
  9. 第八天 集合和字符串
  10. Python代码转换为exe可执行程序详解【转】