machine-learning-notes
  • 封面
  • 目录
  • 前言
  • 个人前言
  • 机器学习前言
    • 什么是机器学习和模式识别
    • 机器学习的应用
    • 机器学习的流程
    • 不同的机器学习算法对相同数据预测效果不同
    • 快速入门机器学习
    • 机器学习需要参考哪些书
    • 机器学习的学习路径
    • 深度学习的学习路径
    • 互联网机器学习特定岗位所需技能
  • 机器学习面试
  • 数学基础
  • 微积分
    • 泰勒展开
    • e的直观认识
    • 傅里叶变换
    • 希尔伯特空间
  • 线性代数
    • 范数
    • 矩阵求导
    • 特征值
    • 奇异值分解
  • 概率与信息论
    • 综述概率论基本定义
    • 概率论与贝叶斯先验
    • 正态分布
    • 贝叶斯概率
    • 概率符号说明
    • 共轭先验
    • 信息论
  • 数值计算与优化
    • 最小二乘法
    • 等式约束的拉格朗日乘子法
    • 凸优化
      • 凸集和凸函数
      • 凸优化问题
  • 梯度下降算法
    • 随机梯度下降SGD
    • 动量法Momentum
    • 牛顿动量Nesterov
    • AdaGrad
    • RMSprop
    • Adadelta
    • Adam
    • Nadam
    • AMSGrad
    • AdasMax
  • 概率图模型
    • 概率图模型概论
    • 概率图简介
  • 编程基础
  • linux
    • linux常用命令
    • shell
      • 输入输出重定向
  • python
    • python简介
    • python语法
      • 基础语法
      • 数据结构
      • 过程控制
      • 函数
      • 类和对象
      • 文件操作
      • 正则表达式
    • python库
      • numpy
      • pandas
      • scipy
      • matplotlib
      • scikit-learn
    • python应用
      • 排序算法
  • 数据结构与算法
    • 数据结构
    • 算法思想
      • 排序
        • 堆排序
        • 归并排序
        • 快速排序
      • 递归
    • 剑指offer
      • 链表
      • 二叉树
      • 数组
      • 字符串
      • 栈和队列
      • 递归
      • 动态规划
      • 其他
    • leetcode
    • 编程语言
      • c++
  • Hadoop
    • Hadoop简介
    • MapReduce
  • Hive
  • Spark
  • TensorFlow
    • TensorFlow1.0
      • TensorFlow基础
      • TensorFlow基础概念解析
      • TensorFlow机器学习基础
      • Tensorflow分布式架构
    • TensorFlow2.0
  • PyTorch
  • 机器学习
  • 机器学习概论
  • 特征工程
  • 感知机
  • k近邻
  • 朴素贝叶斯
  • 线性模型
    • 最大熵模型
    • 指数族分布与广义线性模型
    • 线性回归
      • Ridge回归(岭回归)
      • Lasso回归
    • Logistic回归-对数几率回归
  • 决策树
  • 支持向量机
    • 线性可分支持向量机与硬间隔最大化
    • 线性支持向量机与软间隔最大化
    • 非线性支持向量机与核函数
    • 序列最小最优化算法SMO
    • SVM总结
  • 集成学习
    • Bagging
      • 随机森林
    • Boosting
      • AdaBoost
      • GradientBoosting
        • GBDT
        • XGBoost
          • XGBoost理论
          • XGBoost实践
    • Stacking
  • 降维
    • PCA主成分分析
    • 流形学习
  • EM算法
  • HMM隐马尔科夫模型
  • CRF条件随机场
  • 聚类
    • k均值聚类
    • 高斯混合模型
  • 主题模型
    • LDA隐狄利克雷分布
  • 知识点
    • 损失函数
    • 负采样
  • 机器学习算法总结
  • 深度学习
  • 深度学习概论
  • ANN人工神经网络
  • 知识点
    • Batch Normalization
  • CNN卷积神经网络
  • 深度学习优化算法
  • RNN循环神经网络
  • LSTM长短期记忆网络
  • GRU门控循环单元
  • GNN图神经网络
    • GNN图神经网络综述
    • GCN图卷积网络
      • GCN图卷积网络初步理解
      • GCN图卷积网络的numpy简单实现
      • GCN图卷积网络本质理解
      • GCN图卷积网络全面理解
      • SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS ICLR2017
  • 神经网络架构搜索
    • Weight-Agnostic-Neural-Networks Google2019
  • 强化学习
  • 强化学习概论
  • 马尔科夫决策过程
  • 动态规划
  • 无模型方法一:蒙特卡洛
  • 无模型方法二:时间差分
  • 无模型方法三:多步自举
  • 函数近似和深度网络
  • 策略梯度算法
  • 深度强化学习
  • 基于模型的强化学习
  • 强化学习前景
  • 自然语言处理
  • 自然语言处理概论
  • 自然语言
  • 语言模型和中文分词
  • word2vec
    • word2vec概述
    • word2vec算法原理
    • word2vec源码分析
    • word2vec实践
  • Seq2Seq模型和Attention机制
  • Self-Attention和Transformer
  • 知识图谱
  • 推荐系统
  • 推荐系统概论
  • 基础知识
  • 进阶知识
    • 机器学习
      • Factorization Machines ICDM2010
    • embedding
      • Network Embedding
        • LINE: Large-scale Information Network Embedding
    • 深度学习
      • DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 2017
      • DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data CIKM2013
    • 图卷积网络
      • Graph Convolutional Neural Networks for Web-Scale Recommender Systems KDD2018
    • 强化学习
      • DRN基于深度强化学习的新闻推荐模型
  • 业界应用
    • YouTube
      • Deep Neural Networks for YouTube Recommendations RecSys2016
    • Alibaba
      • Learning Tree-based Deep Model for Recommender Systems KDD2018
      • Deep Interest Network for Click-Through Rate Prediction KDD2018
      • DSIN:Deep Session Interest Network for Click-Through Rate Prediction IJCAI2019
Powered by GitBook
On this page
  • LSTM长短期记忆网络
  • 什么是LSTM
  • LSTM的结构
  • LSTM的流程
  • 将LSTM的cell作为神经元
  • 为什么LSTM属于RNN
  • 参考资料

Was this helpful?

LSTM长短期记忆网络

PreviousRNN循环神经网络NextGRU门控循环单元

Last updated 5 years ago

Was this helpful?

LSTM长短期记忆网络

什么是LSTM

LSTM网络如下图所示,虽然看起来太复杂了,第一次看到的人都是一脸懵逼,这是啥?有用吗?但是原理不难,我们一点点分析。

LSTM的结构

前面讲的SimpleRNN只是RNN中最简单的版本,里面的memory是最简单的,可以随时把值写入,也可随时把值读出。但现在常用的memory称为Long Short-term Memory(LSTM)。

这个Long Short-term Memory是比较复杂的,它有3个Gate。

  • Input Gate

    当某个网络(外界)的输出值想要写入到LSTM里面的时候,必须先通过一个闸门(Input Gate),并且只有当Input Gate打开的时候,才能把值写入到memory中去,当Input Gate关起来的时候,就无法写入值。至于什么时候把Input Gate打开还是关闭,这是网络自己学到的

  • Output Gate

    输出的地方有一个Output Gate,可以决定外界是否可以把值从memory里面读出。只有当Output Gate打开的时候,外界才能读取。同样的,Output Gate什么时候打开还是关闭,也是Output Gate自己学到的。

  • Forget Gate

    Forget Gate决定什么时候把过去记得的东西(存在memory中的值)忘掉,什么时候记住过去学的东西。同样的,Output Gate什么时候把存在memory中的值清除掉或者保留下来,也是Forget Gate自己学到的。

整个LSTM单元可以看成有四个Input,一个Output。

一个有意思的知识点:LSTM的名字应该叫下面哪一个呢?

Long Short-term Memory
Long-Short term Memory

应该是第一个,因为LSTM和前面讲的SimpleRNN一样,还是个Short-term的Memory,只不过SimpleRNN的Memory每一步都会被清除并更新,它的Short-term是非常Short的。相对的,LSTM的Memory不是每一步都会被更新,可以记得比较长一些,只要Forget Gate不Forget的话,它的Memory里的值就会被存起来,所以是比较长的Short-term Memory,即称之为Long Short-term Memory。

LSTM的流程

LSTM这个Cell的具体结构和数据流程如下所示。

输入:输入zzz通过激活函数得到g(z)g(z)g(z),然后乘上输入门的控制信号ziz_izi​经过激活函数得到的f(zi)f(z_i)f(zi​),得到g(z)f(zi)g(z)f(z_i)g(z)f(zi​)。

Memory更新:memory中原有值为ccc,然后乘上遗忘门的控制信号zfz_fzf​经过激活函数得到的f(zf)f(z_f)f(zf​),得到cf(zf)cf(z_f)cf(zf​),即遗忘门对memory中原有数据的处理,f(zf)f(z_f)f(zf​)为1代表记忆,为0代表遗忘。然后加上输入值得到新的memory中要存储的值c′=g(z)f(zi)+cf(zf)c'=g(z)f(z_i)+cf(z_f)c′=g(z)f(zi​)+cf(zf​)。

输出:memory中的值c′c'c′经过激活函数得到h(c′)h(c')h(c′),然后乘上输出门的控制信号zoz_ozo​经过激活函数得到的f(zo)f(z_o)f(zo​),得到h(c′)f(zo)h(c')f(z_o)h(c′)f(zo​),就是输出了,即输出值a=h(c′)f(zo)a=h(c')f(z_o)a=h(c′)f(zo​)。

LSTM流程举例

假设该神经网络只有一个LSTM,如下图所示。再假设该网络的权值已知(权值是学习出来的),然后输入x序列。三个门的输入值,都是序列x乘上一个权值矩阵得到的结果。

我们来依次输入x序列,看整个流程是怎么运行的。为了简单起见,假设输入门和输出门的激活函数都是线性的,memory的初始值为0,具体如下图所示。

现在输入x的第一个向量[3, 1, 0],计算流程如下图所示,具体就不细讲了,图里面的流程非常清楚,memory中的值会从0变为3+1x0=3,最后的输出是0。

接下来,输入x的第二个向量[4, 1, 0],计算流程如下图所示,memory中的值会从0变为4+1x3=7,由于输出门关闭,最后的输出是0。

接下来,输入x的第三个向量[2, 0, 0],计算流程如下图所示,memory中的值会从7变为0+1x7=7,由于输出门关闭,最后的输出是0。

接下来,输入x的第四个向量[1, 0, 1],计算流程如下图所示,memory中的值会从7变为0+1x7=7,最后的输出是7。

接下来,输入x的最后一个向量[3, -1, 0],计算流程如下图所示,memory中的值会从7变为0+0x7=0,最后的输出是0。

将LSTM的cell作为神经元

看到这里,你可能会疑惑,LSTM一个cell的结构我理解了,但是和神经网络有什么关系呢?其实,直接把神经网络中的神经元替换成LSTM的cell就可以了。

下图是一般的神经网络和里面的神经元。

然后输入x乘上不同的权值作为LSTM单元的四个输入(输入和三个门)。就好像一般的机器插一个电源线就能运行,但LSTM这个机器需要插四个电压不同的电源线才能跑。所以同样的neuron数目下,LSTM的参数是一般的四倍。

为什么LSTM属于RNN

只看上图的话,我们就会很疑惑,这个和RNN的关系是什么呢?怎么看起来不太像RNN。所以要画另外一个图来表示LSTM。

假设有一整排的LSTM单元,里面的memory的标量值按从左到右接起来,就是一个vector,我们把它记作ct−1c^{t-1}ct−1(c是cell单元的意思),作为memory上一刻时间点t-1的值。

现在在时间点t,我们输入一个向量xtx^txt,然后乘以一个矩阵变为向量zzz,这个矩阵其实就是全连接神经网络的权值了,z向量中的每一个元素值,就是每一个LSTM的输入,所以向量z的维度就是LSTM的数目。

同样的,给向量xtx^txt乘以另一个矩阵,得到向量ziz^izi,向量ziz^izi的维度就是LSTM的数目,其每一个值就会对应操控每一个LSTM的输入门。

同样的,给向量xtx^txt乘以另一个矩阵,得到向量zfz^fzf,zfz^fzf中的每一个值会去操控每一个LSTM的遗忘门。

同样的,给向量xtx^txt乘以另一个矩阵,得到向量zoz^ozo,zoz^ozo中的每一个值会去操控每一个LSTM的输出门。

这四个vector合起来就会操控这些LSTM单元的运作。

接下来,我们向量化的并行看一下LSTM单元的运作,不再去分开单独看。注意里面的乘号是逐元素运算。

然后里面相加后的向量ctc^tct就是时刻t的memory中的值,然后如此反复下去,就会形成循环,那不就是RNN了吗。

虽然上图已经很复杂了,但这并不是LSTM的最终形态,真正的LSTM怎么做呢?

还会把隐藏层的值(即LSTM单元的输出值,但在整个神经网络上它的位置属于隐藏层)也加到输入,还会把memory单元中的值也加到输入中。即在操纵LSTM的时候,输入向量是由xtx^txt、hth^tht和ctc^tct组成的,然后再分别乘以四个矩阵作为四个门的输入或操纵信号。

上图只是LSTM只有一层的情况,但通常LSTM不会只有一层,再叠加个五六层才是我们要的样子。

每一次看到这个东西的人,它的反应都是这个样子:

每一个人第一次都看到这个图,都在想这应该是不work的吧,但其实它确实是work的。现在说自己在用RNN的时候,其实都是在用LSTM了,用Keras的时候,这些都帮你是写好的,你只要输入LSTM四个字就好了。GRU是LSTM的稍微简化版本,只有两个gate,但据说少了一个gate,但表现和LSTM差不多,所以少了三分之一的参数,比较不容易过拟合。所以,我们之前讲的那种最简单的RNN,要称其为SimpleRNN才行,即RNN包含了LSTM、GRU和SimpleRNN。

参考资料

本文参考了此视频。

===

李宏毅教授讲解 RNN LSTM的视频
完全图解RNN、RNN变体、Seq2Seq、Attention机制
Understanding LSTM Networks
Understanding LSTM Networks翻译:如何简单的理解LSTM——其实没有那么复杂
谁能用比较通俗有趣的语言解释RNN和LSTM?
什么是LSTM
LSTM的结构
LSTM的流程
LSTM流程举例
将LSTM的cell作为神经元
为什么LSTM属于RNN
返回顶层目录
multiple-layer-LSTM
LSTM
LSTM-2
cell
cell-1
cell-3
cell-4
cell-5
cell-6
cell-7
neurons
neurons-1
LSTM-RNN
LSTM-RNN-1
LSTM-RNN-2
LSTM-RNN-3
multiple-layer-LSTM
newton-surprise