一 序

本文属于贪心NLP训练营学习笔记系列。

   为什么需要递归神经网络?

类似天气、股票、语音这种数据,是时序数据,对于语音:同一个单词不同人说对应时长不同。

之前学习的多层感知器,假设输入是一个独立的没有上下文联系的单位,比如根据图谱识别动物类别。如果需要根据上一句话预测下一句话,就是输出必须依赖以前的输入,需要递归神经网络来实现这样的功能。

二 递归神经网络介绍

2.1 vanilla RNN 原始RNN

整体上还是:输入层=>隐藏层=>输出层  这种三层结构。

x网络某一时刻的输入

 是输入端到隐含层的权重表示,它将我们的原始输入进行抽象作为隐藏层的输入.

某一时刻T的隐藏状态

某一时刻T的输出

隐含层到隐含层的权重,它是网络的记忆控制者,负责调度记忆。

 隐含层到输出层的权重,从隐藏层学习到的表示将通过它再一次抽象,并作为最终输出。

 某一时刻T的 损失值,整个损失函数就是J求和。

  其中b是bias

  其中b是bias

2.2 HMM VS RNN

相同点:都是通过hidden state 的变化来表示序列间的依赖关系。

不同点:隐状态的表示: hmm是onehot, RNN是分布表示,RNN的表示能力强很多,分布式表示类似于word2vec。

隐状态的演化方式: hmm是线性的,RNN是高度非线性。

剩下的不同点老师没讲,建议网上找找:以下来自网上的

HMM本质是一个概率模型,而RNN不是。另外RNN没有马尔科夫假设,可以考虑很长的历史信息。

2.3 语言模型 language model

语言模型: 一句话很多个单词,计算联合概率可以展开为计算条件概率的联乘。

这个是RNN对于语言模型的使用。计算公式跟前面是一样的。

2.4 RNN的深度

RNN从时间的维度看,它是深度模型。但是它有不同于CNN那种隐含层有很多的模型。

2.5 梯度爆炸与梯度消失

RNN的反向传播,也称为基于时间的反向传播算法BPTT(back propagation through time)。跟多层感知器类似,对所有参数求损失函数的偏导,目的是损失函数最小。

我们 某一时刻T的 损失值,例如: 表示时间4的损失。下面看怎么计算梯度,还是使用链式法则

其中

可以看到,需要计算隐含层对之前隐含层的梯度。

  其中diag部分是矩阵。

general form:

存在连乘项,当时间序列足够长,即t足够大时,受w影响较大。w处于0~1之间,会导致 式子趋近于0,梯度消失(vanishing gradient)。当w的值很大(一般为初始化不当引起),就会趋近于无穷,这就造成了梯度爆炸(exploding gradient).

通常遇到的问题是梯度消失(会导致模型记不住之前的信息)。

long-term dependency

在解决RNN梯度消失的问题,先看个例子,如果记不住长距离的信息,只要最近的,会导致错误。因为句子的最关键的信息在前面。

如果这种问题使用N-Gram,会导致N小了不行,对于长句子N设为多少都不合适;另外,模型的大小和N的关系是指数级的。所以需要RNN。

Gradient Clipping(梯度裁剪) for exploding gradient

从老师画的梯度曲线图,发生梯度爆炸,那么就是学过了,会直接跳过最优解。从梯度定义

确定一个阈值,如果后面参数的g(t)超过了,直接裁剪。

裁剪就是类似于归一化操作。梯度乘以这个缩放因子(阈值/梯度大小)

得出的新的梯度,再进行梯度下降法计算。

这都是理论。还得结合代码看看代理啥参数起作用。

梯度爆炸问题容易解决,上面那种clipping 方式,但是梯度消失的问题比较难以解决。

三 LSTM

LSTM 是一种 RNN 特殊的类型,可以学习长期依赖信息。与RNN 相比LSTM 同样是一种重复神经网络模块的链式的形式。

不同的是:LSTM使用了不同的函数去去计算隐藏层的状态。

LSTM 的关键就是细胞状态,可以把cells看作是黑盒用以保存当前输入之前的保存的状态。LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。

门是一种让信息选择式通过的方法,具体通过sigmod函数实现,Sigmoid 层输出0,1数值.0代表“不许任何量通过”,1就指“允许任意量通过”.

LSTM 拥有三个门,分别是forget gate\input gate\ output gate

第一步是决定我们会从细胞状态中丢弃什么信息,忘记门:  

会读取 , ,输出一个在0,1 数值给每个在细胞状态.

下一步是确定什么样的新信息被存放在细胞状态中。

  决定什么值我们将要更新

tanh层创建一个新的候选值向量 会被加入到状态中.

接下来更新旧细胞状态 更新到.

   这是是element wise

我们把旧状态与 相乘,丢弃掉我们确定需要丢弃的信息。后面的第二项是新的候选值,根据我们决定更新每个状态的程度进行变化。

最终,我们要求出输出什么值。

  来确定细胞状态的哪个部分将输出出去

 (tanh得到一个在-1,1之间的值)并将它和输出相乘,最终我们仅仅会输出我们确定输出的那部分。

小结:

LSTM能选择性的保留信息,从数学角度,计算梯度有优于RNN模型,但是不能万全解决梯度消失问题。

这里老师没有展开LSTM的关于梯度消失 的推导,网上说的之前RNN的联乘问题,LSTM  约等于(类比)为sigmoid函数。

LSTM 应用场景

老师推荐了这篇博客:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

介绍了很多有趣的应用,后来很多人沿着这些问题做了改进,

四 Bi-directional LSTM

LSTM的 问题:无法编码从后到前的信息 。Bi-directional 是前向的LSTM、后向的LSTM组合成的Bi-LSTM.

最后将前向和后向的隐向量 进行拼接得到 .

作为补充,老师讲了一个论文,给出了一个对比 ,RNN或者LSTM效果都不如Bi-LSTM 好。

GRU

门控循环单元(gated recurrent unit,GRU)是LSTM网络的一种效果很好的变体,它较LSTM网络的结构更加简单,而且效果也很好。

在LSTM中引入了三个门函数:输入门、遗忘门和输出门来控制输入值、记忆值和输出值。而在GRU模型中只有两个门:分别是更新门和重置门。

表达式如下:

   更新门

其中 为第 t 个时间步的输入向量,即输入序列 X 的第 t 个分量,它会经过一个线性变换(与权重矩阵 相乘)。保存的是前一个时间步 t-1 的信息,它同样也会经过一个线性变换。更新门将这两部分信息相加并投入到 Sigmoid 激活函数中,因此将激活结果压缩到 0 到 1 之间。

更新门帮助模型决定到底要将多少过去的信息传递到未来,或到底前一时间步和当前时间步的信息有多少是需要继续传递的。这一点非常强大,因为模型能决定从过去复制所有的信息以减少梯度消失的风险。

重置门

重置门 该表达式与更新门的表达式是一样的,重置门主要决定了到底有多少过去的信息需要遗忘。

 当前记忆内容

其中计算重置门   与的 Hadamard 乘积,即对应元素乘积。因为前面计算的重置门 是一个由 0 到 1 组成的向量,它会衡量门控开启的大小。例如某个元素对应的门控值为 0,那么它就代表这个元素的信息完全被遗忘掉。该 Hadamard 乘积将确定所要保留与遗忘的以前信息。

前面是为第 t 个时间步的输入向量, 将这两部分的计算结果相加 (起到一个拼接作用)  再投入双曲正切激活函数tanh中(数据放缩到-1~1的范围内)

最终记忆

网络需要计算 ,这里需要 将保留当前单元的信息并传递到下一个单元中。是更新门的激活结果,它同样以门控的形式控制了信息的流入。

前面一项表示对原本隐藏状态的选择性“遗忘”,忘记 维度中一些不重要的信息.

后面一项是表示对包含当前节点信息的进行选择性”记忆“. 综合来看,是忘记传递下来的某些旧信息(也就是说需要收集的信息),并加入当前节点输入的某些新信息。

关于 GRU老师只是简单讲了下表达式,具体的细节还是这篇:https://zhuanlan.zhihu.com/p/32481747

****************

理论部分结束了,下一步该找数据动手做验证。

NLP学习笔记41-递归神经网络相关推荐

  1. 利用计算机技术实现对文本篇章,自然语言处理NLP学习笔记一:概念与模型初探...

    前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. 知识图谱: 还有2个实际应用的例子,加深对NLP的理解 九歌机器人: 微软 ...

  2. 神经网络学习笔记-02-循环神经网络

    神经网络学习笔记-02-循环神经网络 本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记. 循环神经网络 循环神经网络适用于处理序列化信息,比如: ...

  3. 霹雳吧啦wz学习笔记1_卷积神经网络

    霹雳吧啦wz学习笔记1_卷积神经网络 全连接层: 全连接层就是由许许多多的神经元共同连接而得来的 卷积层: 卷积就是一个滑动窗口在我们的特征图上进行滑动并计算 卷积的目的:进行图像特征提取 卷积核的c ...

  4. 强化学习中的递归神经网络

    在解决模型训练的机器学习问题时,可以使用已知的输出(监督学习),或者模型可以在事先不知道正确结果的情况下自行学习在可用数据中寻找模式(无监督学习). 强化学习(RL)不属于这两种类型:然而,它同时具有 ...

  5. 深度学习笔记:卷积神经网络的可视化--卷积核本征模式

    目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...

  6. 【深度学习笔记】循环神经网络和递归神经网络区别

    1.循环神经网络(recurrent neural network)是时间上的展开,处理的是序列结构的信息,是有环图,模型结构如下: recurrent: 时间维度的展开,代表信息在时间维度从前往后的 ...

  7. 影像组学视频学习笔记(41)-如何使用软件提取组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/72186eb3e395 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(41)主要 ...

  8. 吴恩达深度学习笔记- lesson4 卷积神经网络

    文章目录 Week 1 卷积神经网络基础 4.1.1 计算机视觉(Computer vision) 4.1.2 边缘检测示例(Edge detection example) 4.1.3 更多边缘检测内 ...

  9. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

最新文章

  1. 第十二周项目一-实现复数类中的运算符重载(3)
  2. 程序员生存定律--程序人生的出口
  3. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案
  4. 每天,每周,每月,每年程序员该做的事情
  5. 调整eclipse、SpringToolSuite4编辑器的内存大小以及显示
  6. Windows下搭建Wampserver+WordPress
  7. 从高的角度看自动化测试
  8. (原创)无废话C#设计模式之十九:Observer
  9. 当遥感卫星有了AI……
  10. mysql language sql immutable_sql - PostgreSQL是否支持“不区分重音”排序规则?
  11. linux readelf,readelf命令常用参数介绍
  12. win2003群集cluster下SQL2005和sp3补丁安装配置3
  13. xmapp启动之路径错误
  14. MATLAB中的小技巧
  15. Cortex-M0 Devices introduction
  16. 《python网络数据采集》读书笔记
  17. 我教女朋友学编程Html系列(6)—Html常用表单控件
  18. 【解决方案】VR视频行业急速发展,如何搭建一套16K高清的公网视频传输系统?
  19. 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费
  20. OpenX系列标准介绍(2):OpenDRIVE实例分析

热门文章

  1. 华为路由器命令大全(字典查询)
  2. 昨日美股:苹果突然放量暴跌,机构彻底失去了方向
  3. Gen2-UHF-RFID-Reader学习(六)reader
  4. 计算机研究生阶段研究计划,计算机科学与技术硕士研究生培养方案.doc
  5. Oracle获取上个月的第一天、今年第一天
  6. 视频合成软件哪个好,怎么把多个视频快速合并成一个视频
  7. 中央空调节能系统解决方案有效降低用电成本
  8. 每周3课:电机、舵机、LM35温度传感器的使用方法 | Mixly纯干货课程
  9. 海康双路服务器的作用,海康服务器IS-VSE2326B-BBC,四核双路服务器,多媒体服务器...
  10. 2019游戏开发学习路线图