文章目录

  • 引入
    • 发展史
    • LSTMs 是什么
      • 短期记忆
      • 长期记忆
    • RNN 的局限
  • LSTM 网络详解
    • 符号约定
    • LSTM 网络分解
    • 其他 LSTM 网络
    • 整体模型

引入

所谓序列学习,就是输出不单单取决于当前的输入,而且与历史输入有关。序列学习的模型有:隐马尔科夫模型(HMM)、结构化感知器、以及条件随机场。当然以上这些模型都是机器学习的方法,若应用神经网络,即深度学习(实际上属于机器学习之一)的方法,于是则诞生了 RNN (Recurrent Nerual Network)。

发展史

RNN 的发展与序列学习形影不离。序列学习其实是分类问题的一种,在 NLP 领域也叫结构化预测问题。序列学习也属于强化学习的范畴。然而这些定义总没有严格的标准。因此,这里给出笔者个人的定义:所谓序列学习,输入序列变量,该序列蕴含着某种顺序,通过这个序列变量输出标签。

如图所示,序列学习包括如下几种状态。一是 one2one,这种类似于分类问题了,是序列个数等于 1 的特殊情况。第二种也是输入一个序列个数为 1 的“序列”,输出其当前、未来对应的标签状态。第三种,通过序列,输出最后的标签。以此类推。

传统的实现序列学习的方法有 HMM,之后又引申出了条件随机产。之后,神经网络的崛起又诞生了结构感知器。再然后,就演变成了 RNN 网络了。

实际上 RNN 并不是近代才出现的。实际上,但神经网络出现之初,就有很多 RNN 的影子。实际上,现在的很多中文文献中,常称 RNN 网络为序列神经网络。但在早期的时候,大约是 1980 年左右,其被称为反馈神经网络。比如 Elman 神经网络、NAXR 神经网络就是其一。即使到现在,还有人在使用这两种反馈神经网络。比如你下载一个2010版本的 Matlab,其 cntool 工具箱就有其实现。

为什么称反馈神经网络为 RNN 的前身呢?以 Elman 神经网络为例,其包括输入层、隐藏层、承接层和输出层,像极了今天的 RNN。其中其承接层用于延迟和存储隐藏层的输出,并自联到隐藏层的输入中。这种自联方式对历史状态的数据都具有敏感性,内部反馈网络的加入增加了网络本身的动态处理能力,从而达到动态建模的效果。

之后,随着神经网络的第一次没落,反馈神经网络也因此销声匿迹。随后,大数据时代的到来,使得反馈神经网络再一次粉墨登场,以 RNN 的新形态屹立于深度学习之林。当然,反馈神经网络与 RNN 是有区别的。比如,反馈神经网络要求定义反馈的步长。换句话说,其当前输出的,与当前输入,和有限步长内的输入有关。而 RNN 则不然,其不需要定义反馈步长。也因此,RNN 的输出,与之前的所有输入均有关。而这种有关的程度,取决与神经节点的权重。更切确的说,取决于以往的输入数据。

卷积神经网络经常用在计算机视觉领域,其接受一个矩阵(或者说图像),输出一个概率序列。内部经过一系列的卷积,因此其神经元的参数非常之多。即便如此,大数据的福音使得 CNN 不再是土豪们的玩具,并且开始了其走出象牙塔,走向工业应用。

然而,对于 RNN,人们总是有很多腹诽。很多智者们不加思考地指出,用训练一个 RNN 是非常苦难、耗时的。其实不然,在很多实践的验证下,这种无稽之谈不攻自破。于 2015 年左右, RNN 被许多专家们看上,并迅速发展起来,期间诞生了许多精通与 RNN 原理的高手,以及许多新型的 RNN 网络。

目前 RNN 通常用于物体捕捉图像识别自然语言处理中。题外话,在 NLP 领域中,比如汉语的分词、词性标注和语法分析中,都是用序列学习的方法实现的。通常将其视为序列标注问题。然而,它们并非使用 RNN 实现,而是条件随机场。那么 RNN 用在哪里呢?它用在逼格更高的地方,比如根据上下文,预测接下来的单词。或根据上下文,直接自动生成接下来的内容。很多高手们使用了 RNN,甚至可以根据当前的代码,自动生成接下来的代码,这不得不说是程序猿的福音与噩梦。

LSTMs 是什么

就如 Fast-RCNN 和 YOLO 之于 CNN, LSTMs 网络与 RNN 两者在概念上属于从属关系。LSTMs的全称为 Long Short Term Memory,即长期-短期记忆。

短期记忆

比如句子鸟在天上飞,如果要根据序列鸟在天上,预测飞,实际上是很容易的。只要根据或者天上这个单词就可以预测出了。也许有点误差,但八九不离十了。如下图所示:

长期记忆

比如句子我在中国长大,…,我汉语很六,中间隔了很多条句子。但是,汉语很六只能通过在中国长大第一条句子中,才有可能推断出来。也就是说,当前的输出结果,与较早之前的记忆有关,如图所示;

RNN 的局限

然而,传统的 RNN 网络,却不能很好的解决长期记忆的问题。其原因较为复杂,大家可以参阅文献link。当然这里我也会简单的谈一下。

首先,RNN 的学习算法与 BP 神经网络一样。也是基于代价函数梯度反向传播算法。但与 BP 不同的是,其在计算梯度的时候,用了时间信息。具体做法是,在求一个节点的梯度时,存储该时刻节点的激活函数的形式。然后,根据以往的激活函数和现在的激活函数,来求取当前的梯度。但不幸的地方就在于,存储能力是有限的,因而限制了其处理长期记忆的能力。另外,即便能够完全存储。在很多实验中也表明:虽然 RNN 在处理长期记忆问题上,比反馈神经网络要好得多。但是,其训练始终无法有效收敛。换句话说,其收敛是局部最优的。往往这种局部最优,导致其处理短期记忆很强,长期记忆很弱。

然而,LSTM 神经网络并没有上述缺点。也就是说,它能够处理好 both 长期记忆 and 短期记忆问题~

LSTM 网络详解

如下图所示,一个 RNN 网络可以表示如下

将循环展开,可得:

下面,我们将讨论 LSTM 网络的详细介绍,包括其定义和扩展。

符号约定


方框表示神经网络层(自设),红色圆圈表示向量运算,里面是个乘号,就表示点积。黑色箭头表示向量,两个黑色箭头融合在一起,表示将向量进行拼接


上图中Ct−1C_{t-1}Ct−1​是一条胞状态,就像工厂上的传送带一样,Ct−1C_{t-1}Ct−1​ 经过工人们的处理,最后变成 CtC_tCt​ 。


上图表示阀门,其中 σ\sigmaσ 是 sigmoid 函数。相信大家对 sigmoid 函数都很熟悉,其取值为 [0,1][0,1][0,1],具体长什么样,就不在介绍了。

LSTM 网络分解

一个典型的 LSTM 网络如下:

当输入 xtx_txt​ 和 ht−1h_{t-1}ht−1​ 传送而入时,首先要经过过滤。即用 sigmoid 函数,将两者的点击进行过滤,然后传送到 Ct−1C_{t-1}Ct−1​ 的传送带中。这实际上模拟健忘过程。比如之前的主语为 he 时,若再输入主语 she,则需要将之前的 he 更新掉。

之后,为了模拟 she 替换掉 he 的过程,应该加入如下的函数。此时 ht−1h_{t-1}ht−1​ 和 xtx_txt​ 用一个 tanh 和 sigmoid 过滤 输出 iti_tit​ 和 C~t\widetilde{C}_tCt​。

最后,将上述的结果 ft,it,C~tf_t,i_t,\widetilde{C}_tft​,it​,Ct​ 传送到“传送带”中了,如下:

之后,为了模拟根据历史状态,以及当前的输入输出 hth_tht​ 的过程,还需要以下处理:

其中 ht−1,xth_{t-1},x_tht−1​,xt​ 通过一个 sigmoid 函数过滤,而胞状态 CtC_tCt​ 通过 tanh 函数过滤后,两者的点击加上偏移项输出 hth_tht​。

实际上,通过存储胞状态、ht−1h_{t-1}ht−1​ 就可以存取历史状态了。这个历史状态的长久与否,取决于神经元的参数。当然,如果 A (记住,它是一个层)中包含多个神经元节点,那么其 ht−1h_{t-1}ht−1​ 和胞状态的个数还是不少的。

其他 LSTM 网络

以上的 LSTM 网络是比较典型的,LSTM网络还有如下形式:

上述模型与经典模型的差别在于,其胞状态和以往的胞状态也有关系。也就是说,其长期的联系比较强烈。另一个LSTM 模型如下。


这种模型与经典模型比较相似,不过在 C~t\widetilde{C}_tCt​ 的更新有点差别,详见上面的公式。第三种与第一种类似,也是倾向于长期联系的,如下所示:

整体模型

我们只是讨论了隐藏层而已,换句话说,最终的输出 y 与隐藏层的输出 hth_tht​ 有关。因为隐藏层被 BP 神经网络用了,因此,我们姑且层为 LSTM 层吧。于是整个 RNN 的神经网络应该是这样

Created with Raphaël 2.2.0输入层LSTM 层输出层

其中,LSTM 层的每个输入 xtx_txt​ 为一个向量,输出亦是 hth_tht​ 亦是一个向量。通过存储 Ct,ht−1C_{t},h_{t-1}Ct​,ht−1​,并根据 LSTM 层的参数,来映射历史输入对当前输出的影响。之后,输出层根据 hth_tht​ 输出最终的标签。当然,输出层的传递函数可以自定义,用 sigmoid 或者 RELU 都可以。

序列学习——RNN网络之 LSTM 原理相关推荐

  1. 深度学习原理与框架-RNN网络框架-LSTM框架 1.控制门单元 2.遗忘门单元 3.记忆门单元 4.控制门单元更新 5.输出门单元 6.LSTM网络结构...

    LSTM网络是有LSTM每个单元所串接而成的, 从下面可以看出RNN与LSTM网络的差异, LSTM主要有控制门单元和输出门单元组成 控制门单元又是由遗忘门单元和记忆门单元的加和组成. 1.控制门单元 ...

  2. 【深度学习】网络训练的原理:什么是梯度下降?学习率的作用是什么?

    对于输入 x x x,通过某个网络后给出预测的结果 y y y,但是其正确结果为 y ^ \hat y y^​,预测结果和真实结果之间的差距我们称之为损失 L L L 这里要注意,衡量二者之间的差距的 ...

  3. 深度学习升级打怪之序列模型-(RNN, LSTM)

    序列模型 对于序列学习问题如果我们使用标准的神经网络,则会有一些问题 输入和输出在不同的例子中有不同的长度,即使定义最大长度后补零也效果可能会比较差 对于NLP等领域的问题时,输入的维度过大,导致参数 ...

  4. 深度学习——RNN原理与TensorFlow2下的IMDB简单实践

    在深度学习中,RNN是处理序列数据的有效方法之一,也是深度的一种很好的体现,本文将简单介绍RNN的工作方式,以及针对IMDB数据集的简单实践 RNN简介 RNN(Recurrent Neural Ne ...

  5. 深度学习之循环神经网络(8)长短时记忆网络(LSTM)

    深度学习之循环神经网络(8)长短时记忆网络(LSTM) 0. LSTM原理 1. 遗忘门 2. 输入门 3. 刷新Memory 4. 输出门 5. 小结  循环神经网络除了训练困难,还有一个更严重的问 ...

  6. 递归神经网络RNN网络 LSTM

    转自: https://blog.csdn.net/Jerr__y/article/details/61195257 @author: huangyongye 前言: 根据我本人学习 TensorFl ...

  7. 花书+吴恩达深度学习(十七)序列模型之长短期记忆 LSTM 和门控循环单元 GRU

    目录 0. 前言 1. 长短期记忆 LSTM 2. 门控循环单元 GRU 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十五)序列模型之循环神经网络 ...

  8. 《自然语言处理学习之路》 13 RNN简述,LSTM情感分析

    文章目录 书山有路勤为径,学海无涯苦作舟 凡我不能创造的,我就不能理解 一.RNN神经网络 二.LSTM神经网络 三.使用LSTM进行情感分析 3.1深度学习在自然语言处理中的应用 3.2词向量模型 ...

  9. 一篇文章玩转 RNN 网络 原理

    1. RNN的网络结构(展开) 图 1 RNN网络的基本运算单元 RNN 网络是由一个个的 cell 组成的,每一个 cell 都五脏俱全: 可以看出,沿着时间轴 t 每一个RNN的单元内都有一个输入 ...

最新文章

  1. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们
  2. 数据结构及算法 -- 目录
  3. Linux 最基本命令应用
  4. 搭建golang+vscode开发环境
  5. Visual Studio Code 支持TensorFlow配置支持
  6. C++---哈希闭散列与开散列
  7. 分治法求最大和最小值
  8. 检查最后出现子字符串的位置!
  9. java 保留小数点后N位数(若干位),几种实现的方式总结
  10. 初识Vocaloid3
  11. MySQL表数据导入导出
  12. IDEA 设置自动启动浏览器
  13. PLB: Congestion Signals are Simple and Effective for Network Load Balancing读后思考
  14. web开发框架_Web开发的最佳PHP框架
  15. 医学图像预处理(二)——重采样(resampling)
  16. 关于:在 Windows Server 中的 Printer Server
  17. centos7 安装 bat -- 升级版 cat 指令
  18. 【postgresql】centos7安装postgresql-devel步骤
  19. Ramnit感染型蠕虫病毒专杀工具
  20. 2023ACP世界大赛中国总决赛|让世界再多一个微笑

热门文章

  1. 波特(Baud)与比特(bit)换算详解
  2. IDEA快捷键大全(详细)
  3. 2021-07-17【普及组】模拟赛C组
  4. 资深程序员对00后CEO说了这些话
  5. 看ChatGPT这形势,留给我们开发人员的时间不多了
  6. 五类医学图像分类 深度学习
  7. 22个免费的数据可视化和分析工具推荐
  8. 用pecl命令安装php扩展geoip
  9. 孤独的人在孤独的地方...
  10. 06-python中的集合类-01