前面已经对 RNN (递归神经网络) 的变体 (主要为解决 梯度消失和梯度爆炸) 接触了两个比较流行的 LSTM 和 GRU, 其核心思想呢, 是通过其所谓 **"gate" **向量存储 (store) RNN 更早期状态的 RNN, 通常就可以先用 LSTM 来试试看, 然后等结构稍微稳定写, 就可用 GRU 来训练参数 (gate 只有2 个) .

普遍来看, 神经网络都会有梯度消失 和梯度爆炸的问题, 其根源在于现在的神经网络在训练的时候, 大多都是 基于 BP 算法, 这种误差向后传递的方式, 之前咱也推导过数学公式, 多元函数求偏导, 注意链式法则, 会产生 vanishing. 而 RNN 产生梯度消失的根源是 权值矩阵复用.

反正是个难点哦, 不扯了, 这里主要是想在补充两种 RNN 的变体, 双向和多层RNN.

Bidirectional RNN

双向的 RNN , 典型的栗子是, 情感分析这块. (假设是通过一个评价, 来判断情感是 positive 还是 negative.)

然后看这个评价: the movie was terribly exciting. 我们人可以轻松来判断, 结合整句话, 就是觉得电影很棒呀. 然而, 机器可就不一定了哦, 因为这里有个词 terribly 意味非常糟糕. 当咱从左往右看的时候, 如果不看最后一个单词, 直接到 "The movie was terribly" 就是消极的评价呀. 因而可以发现, 在这个栗子中, 最后一个词 exciting 相当于把前面的句子给 "反转" 了.

为了解决这个问题, 就引入了所谓 反转 RNN 跟双向链表似的, 正面来一遍输入, 反向也来一遍输入.

这样分别从 左边和右边 都来作一个输入, 就能够将 每个词, 作用于 上下文了呀 (context)

用符号化的方式来描述, 是这样的:

\(Forward \ RNN \ \rightarrow h^{(t)} = RNN_{FW} (h^{\rightarrow (t-1)}, x ^{(t)})​\)

这种从左往右的, This is general notation to mean "compute one forward step of the RNN", - it could be a vanilla, LSTM or GRu computation.

然后就是这种从右到左的.

\(Backward \ RNN \ \leftarrow h^{(t)} = RNN_{FW} (h^{\leftarrow (t-1)}, x ^{(t)})\)

Generally, these two RNNs have separate weights, 就是从左到右, 从右到左, 各有一个权值矩阵 W

连接的隐含状态: \(h^{(t)} = [h^{\rightarrow (t)}; h^{\leftarrow(t)}]\) We regard this as "the hidden state" of a bidirectional RNN (双向RNN)

This is what we pass on to the next parts of the network.

应用场景

Note: bidirectional RNNs are only applicable (适用于) if you have access to the entire input sequence 应用在已经知道全部句子的前提下.

They are not applicable to Language Modeling, because in LM you only have left context available. 用来做情感分析是可以的, 都知道嘛, 但语言模型就不行了, 它不是用来做预测下一个单词的.

If you do have entire input sequence, 那单向, 或者双向, 你开心就好的呀.

For example, BERT (Bidirectional Encoder Representations Transformers) 这个bert 还不知咱翻译, 上次在B站看到大佬在讲bert 感觉非常厉害的样子. is a powerful pretrained contextual (处理上下文) representation system built on bidrectionality.

Multi - layer RNNs

RNNs are already "deep" on one dimension (they unroll over many timesteps) 在时间轴上, 让网络深度增加.

We can also make them "deep" in another dimension by applying multiple RNNs - this is a multi-layer RNN. 就是, (隐含层) 上层的特征, 又作为下一层的输入, 这样的, 感觉好像也不太好理解哦.

This allows the network to compute more complex representations.

The lower RNNs should compute lower-lever features and the higher RNNs should compute highter-lever features.

Multi-layer RNN are also called stacked RNNs.

The hidden states from RNN layer i are the inputs to RNN layer i+1.

特点

High-performing RNNs are often multi-layer 通常预测效果很好的 RNN 都是多层的结构. 但这个深度呢, 也不会像普通的全连接层网络 (feed-forward network), 和 卷积神经网络 (convolutional) 那样深哦.

在 2017年, 有些老铁做实验, 说在机器翻译这块, 2-4层 is best for the encoder RNN, and 4 layers is best for the decoder RNN. 这也是 我一直不是很关注神经网络这块的原因, 很多都是经验性, 试验性的东西. 总是会少了一点 理论的美感, 比如回看一下 SVM, XGboost ... 这些理论就特别完美.

还有说像 Transformer - based network 比如 BERT, can be up to 24 layer. 当然这种在训练的时候, 需要大量地使用 skipping-like connectiions.

小结

主要是熟悉下一些常见的 RNN 变体和其中心思想和应用场景

  • LSTM 应用非常广泛, GRU 会更快一些, "gate" 比 LSTM 要少呀,至少
  • 梯度消失, 梯度爆炸的常用解决办法, 比如梯度爆炸, 可以用 clip 的方式来缓解
  • 双向 (Bidirectional ) 的RNN, 可用在情感分析这块, 因为是知道上下文的嘛.
  • 多层 (Multi-layer) RNN 效果很好,但可能会常用到 skip connections 的方式哦.

RNN 就到这了, 后面我在去学下 tensorflow 或 pytorch 这类的框架, 来调参搞些案例玩一玩.

双向 和 多重 RNN的更多相关文章

  1. 转:使用RNN解决NLP中序列标注问题的通用优化思路

    http://blog.csdn.net/malefactor/article/details/50725480 /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author ...

  2. UML系列03之 UML类图(二)

    概要 在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法.本文是接着前文,继续对"UML的类图"中几种关系进行介绍.介绍的主 ...

  3. UML系列02之 UML类图(2)

    UML类图的几种关系 在UML类图中,关系可以分为4种: 泛化, 实现, 关联 和 依赖.1. 泛化 -- 表示"类与类之间的继承关系".2. 实现 -- 表示"类与接口 ...

  4. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  5. [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10长短期记忆网络(Long short term memory)LSTM Hochreiter S, Schmidhu ...

  6. UML类图介绍以及PlantUML使用方法

    类的UML表示方法 UML介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是 ...

  7. [论文理解] Connectionist Text Proposal Network

    Connectionist Text Proposal Network 简介 CTPN是通过VGG16后在特征图上采用3*3窗口进行滑窗,采用与RPN类似的anchor机制,固定width而只预测an ...

  8. [Design Patterns] 01. Creational Patterns - Abstract Factory

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

  9. 【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)

    文章目录 UML基本介绍 UML图 UML类图 类图-依赖关系(Dependence) 类图-泛化关系(generalization) 类图-实现关系(Implementation) 类图-关联关系( ...

  10. 学习笔记TF020:序列标注、手写小写字母OCR数据集、双向RNN

    序列标注(sequence labelling),输入序列每一帧预测一个类别.OCR(Optical Character Recognition 光学字符识别). MIT口语系统研究组Rob Kass ...

随机推荐

  1. SQLServer日期格式转换

    原文链接:https://blog.csdn.net/Diliges/article/details/84836884 常用: Select CONVERT(varchar(100), GETDATE ...

  2. 用 Dockerfile 创建镜像的基本步骤有哪些?

    使用 Dockerfile 创建镜像的基本步骤如下: 定义基础镜像 在 Dockerfile 的开头,使用 FROM 指令指定一个基础镜像.例如: FROM ubuntu:latest 这表示基于最新 ...

  3. 什么是git,什么是github,git和github的使用

    Git实战 注意:本项目是学习笔记,来自于哔哩哔哩武沛齐老师的Git实战视频, 网址:[武沛齐老师讲git,看完绝对上瘾!!!] https://www.bilibili.com/video/BV1n ...

  4. linux服务器CPU占用100%,宝塔负载100%情况问题排查处理记录(CentOS 8.1系统)

    问题描述:linux服务器cpu占比达到100%,站点无法正常访问,宝塔面板进入后卡顿,负载显示也是持续100%(下方测试系统为CentOS 8.1) 排查可能:1.使用netstat命令查看目前的链 ...

  5. abaqus&FEA资料-科研&工具-导航

    复合材料力学 BLOGs上的书籍共享文件夹 2004-Mechanics of Composite Structural Elements.pdf,onedrive link Mechanics Of ...

  6. 第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛web方向部分wp

    第十八届全国大学生信息安全竞赛暨第二届"长城杯"铁人三项赛web方向部分wp hello_web 查看源代码发现有两个文件,访问一下 Tips是phpinfo 里面可以看到disa ...

  7. Alibaba Sentinel SSRF漏洞分析(CVE-2021-44139)

    Alibaba Sentinel SSRF漏洞分析(CVE-2021-44139) 一.Alibaba Sentienl 简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel ...

  8. go 定义接口解决 import cycle not allowed

    前言 go项目运行报错: import cycle not allowed,导入循环(import cycle) 报错原因,在Go语言中,两个或更多的包之间形成了相互依赖的关系,即A包导入了B包,而B ...

  9. 办公自动化-批量更新tar包内文件

    最近工作有点忙,学习的时间也少了,为了提高工作效率,有时候我们需要自己写一些提高办公处理效率给的工具或者脚本或者程序. 比如,我目前遇到的一个事项,需要更新很多个tar包文件,把tar包内的某个文件替 ...

  10. spring的三级缓存

    spring的三级缓存: Spring 容器的"三级缓存" Spring 容器的整个生命周期中,单例Bean对象是唯一的.即可以使用缓存来加速访问 Spring 源码中使用了大量的 ...