【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图]

【补充说明】深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻译等)、语音识别、序列生成、序列分析等众多领域!

【再说一句】本文主要介绍深度学习中序列模型的演变路径,和往常一样,不会详细介绍各算法的具体实现,望理解!

一、循环神经网络RNN

1. RNN标准结构

传统神经网络的前一个输入和后一个输入是完全没有关系的,不能处理序列信息(即前一个输入和后一个输入是有关系的)。

循环神经网络RNN解决了以上问题,整体结构如图所示:

2. RNN系列结构

多对一:例如情感分析,需要多个时间步长的输入,但是只需要单个输出(即实现分类)。整体结构如图所示:

一对多:例如音乐生成,只需要单个输入(即输入类别),但是需要输出整个序列。整体结构如图所示:

多对多:例如实时分类,输入序列与输出序列的长度是一样的。整体结构如图所示:

多对多:例如机器翻译,输入序列与输出序列的长度是不一样的。整体结构如图所示:

二、长短期记忆网络LSTM

LSTM是RNN的一种变体,RNN由于梯度消失只有短期记忆,而LSTM网络通过精妙的门控制,一定程度上缓解了梯度消失的问题。

在标准RNN中,神经网络模块只有一个非常简单的结构,例如一个tanh层。整体结构如图所示:

而LSTM得神经网络模块具有不同的结构,LSTM包含遗忘门、输入门和输出门,增加了非线性的相互作用。整体结构如图所示:

三、GRU

GRU是LSTM的一种变体,也是为了解决梯度消失(即长期记忆问题)而提出来的。相较于LSTM,GRU的网络结构更加简单,且效果很好。

四、RNN/LSTM/GRU的变体结构

1. 双向循环神经网络

例如命名实体识别:判断句子中Teddy是否是人名,如果只从前面几个词是无法得知Teddy是否是人名,如果能有后面的信息就很好判断了。

双向循环神经网络中的网络单元可以是RNN、LSTM和GRU,均适用这种变体结构。

2. 深层循环神经网络

顾名思义,就是多个循环神经网络的堆叠,循环神经网络可以采用RNN、LSTM和GRU,均适用这种变体结构。

3. Seq2Seq架构:非常火热

又叫Encoder-Decoder模型,适用于输入与输出个数不一样相等的情况(即多对多的循环神经网络,适用于机器翻译等场景)。

其中,Encoder编码器和Decoder解码器可以使用RNN、LSTM和GRU,均适用这种变体结构。

同时,这种结构也可以与双向、深层的变体结构同时使用,不冲突的。

这里多提一句,例如给图像添加描述这样的应用场景,图中对应的描述为“一只猫站在椅子上”,同样可以采用Encoder-Decoder模型。

五、注意力机制

1. Seq2Seq + Attention机制介绍

需要注意到,LSTM、GRU、双向变体结构、深层变体结构和Seq2Seq变体结构,只能说一定程度上缓解了梯度消失问题。

提出问题:在做机器翻译时,专家学者们发现,在Seq2Seq结构中,Encoder把所有的输入序列都编码成一个统一的语义向量context,然后再由Decoder解码。其中,context自然也就成了限制模型性能的瓶颈,当要翻译的句子较长时,一个 context 可能存不下那么多信息。同时,只使用编码器的最后一个隐藏层状态,似乎不是很合理。

解决方案:因此,引入了Attention机制(将有限的认知资源集中到最重要的地方)。在生成 Target 序列的每个词时,用到的中间语义向量 context 是 Source 序列通过Encoder的隐藏层的加权和,而不是只用Encoder最后一个时刻的输出作为context,这样就能保证在解码不同词的时候,Source 序列对现在解码词的贡献是不一样的。例如,Decoder 在解码"machine"时,"机"和"器"提供的权重要更大一些,同样,在解码"learning"时,"学"和"习"提供的权重相应的会更大一些。

实现步骤:(1)衡量编码中第 j 阶段的隐含层状态和解码时第 i 阶段的相关性(有很多种打分方式,这里不细讲);(2)通过相关性的打分为编码中的不同阶段分配不同的权重;(3)解码中第 i 阶段输入的语义向量context就来自于编码中不同阶段的隐含层状态的加权和。

补充说明一下,衡量相关性的打分方式主要包括以下几种,具体不展开了:

2. 层次注意力机制Hierarchical Attention

能够反映文档的层次结构。模型在单词和句子级别分别设计了两个注意力机制,这样做能够在构建文档表示时区别地对待这些内容。

3. 自注意力机制Self-Attention:只有一个Seq

是关联单个序列中不同位置的注意力机制,从而计算序列的交互表示。已被证明在很多领域十分有效,例如机器阅读、图像描述生成等。

以机器阅读为例,当前单词为红色,蓝色阴影的大小表示激活程度,自注意力机制使得能够学习当前单词和句子前一部分词之间的相关性:

补充说明,以图像描述生成为例,注意力权重的可视化清楚地表明了模型关注的图像的哪些区域以便输出某个单词:

4. Fairseq:基于卷积神经网络的Seq2Seq + Attention机制

Facebook人工智能实验室提出基于卷积神经网络的Seq2Seq架构,将RNN替换为带有门控单元的CNN(相较于RNN,CNN工作不依赖于上一时间步的结果,所以可以做到最大程度的并行计算,提升训练速度),提升效果的同时大幅加快了模型训练速度。

5. Transformer:使用self-attention代替原有的RNN及CNN

以上Attention model虽然解决了输入seq仅有一个context vector的缺点,但仍存在一些问题:

  • context vector计算的是输入seq、目标seq间的关联,却忽略了输入seq中文字间的关联、目标seq中文字间的关联性。
  • Attention model中使用的RNN无法平行化处理,导致训练时间长,使用的CNN实际上是透过大量的layer去解决局部信息的问题。

Google提出一种叫做”transformer”的模型,透过self-attention、multi-head的概念去解决上述缺点,完全舍弃了RNN、CNN的构架。

值得一提的是,Google后续提出了BERT模型,在11个任务中取得了最好的效果,是深度学习在nlp领域又一个里程碑式的工作。

6. Memory-based Attention

在 NLP 的一些任务上,比如问答匹配任务,答案往往与问题间接相关。因此,基本的注意力技术就显得很无力了,这时候就体现了Memory-based Attention的强大之处。例如可以通过迭代内存更新(也称为多跳)来模拟时间推理过程,以逐步引导注意到答案的正确位置。

7. Soft/Hard Attention

简单说就是Soft Attention打分之后分配的权重取值在0到1之间,而Hard Attention取值为0或者1。

8. Global/Local Attention

这个也很好理解,就是采用全局或者局部的注意力机制。

六、应用

1. 自然语言处理

例如机器翻译、问答系统、文本分类、情绪分析、命名实体识别、创作乐曲等。

2. 图像处理

例如多媒体描述、局部图像补全、通过低分辨率的图像还原高分辨率图像等。

3. 智能推荐

例如用于用户行为分析,即将注意力权重分配给用户的交互项目,以更有效地捕捉长期和短期的兴趣。

4. 其他

本文参考大佬:https://github.com/yuquanle/Attention-Mechanisms-paper/blob/master/Attention-mechanisms-paper.md

如果你对智能推荐感兴趣,欢迎先浏览我的另几篇随笔:智能推荐算法演变及学习笔记

如果您对数据挖掘感兴趣,欢迎浏览我的另几篇博客:数据挖掘比赛/项目全流程介绍

如果您对人工智能算法感兴趣,欢迎浏览我的另一篇博客:人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)

如果你是计算机专业的应届毕业生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的应届生,你如何准备求职面试?

如果你是计算机专业的本科生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的本科生,你可以选择学习什么?

如果你是计算机专业的研究生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的研究生,你可以选择学习什么?

如果你对金融科技感兴趣,欢迎浏览我的另一篇博客:如果你想了解金融科技,不妨先了解金融科技有哪些可能?

之后博主将持续分享各大算法的学习思路和学习笔记:hello world: 我的博客写作思路

深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)的更多相关文章

  1. 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...

  2. zz深度学习中的注意力模型

    中间表示: C -> C1.C2.C3 i:target -> IT j: source -> JS sim(Query, Key) -> Value Key:h_j,类似某种 ...

  3. CTR预估模型演变及学习笔记

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...

  4. 深度学习中的Normalization模型

    Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...

  5. [优化]深度学习中的 Normalization 模型

    来源:https://www.chainnews.com/articles/504060702149.htm 机器之心专栏 作者:张俊林 Batch Normalization (简称 BN)自从提出 ...

  6. 强化学习中的无模型 基于值函数的 Q-Learning 和 Sarsa 学习

    强化学习基础: 注: 在强化学习中  奖励函数和状态转移函数都是未知的,之所以有已知模型的强化学习解法是指使用采样估计的方式估计出奖励函数和状态转移函数,然后将强化学习问题转换为可以使用动态规划求解的 ...

  7. Scratch学习中需要注意的地方,学习Scratch时需要注意的地方

    在所有的编程工具中,Scratch是比较简单的,适合孩子学习锻炼,也是信息学奥赛的常见项目.通常Scratch学习流程是,先掌握程序相关模块,并且了解各个模块的功能使用,然后通过项目的编写和练习,不断 ...

  8. [PyTorch] rnn,lstm,gru中输入输出维度

    本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...

  9. Ruby Rails学习中:User 模型,验证用户数据

    用户建模 一. User 模型 实现用户注册功能的第一步是,创建一个数据结构,用于存取用户的信息. 在 Rails 中,数据模型的默认数据结构叫模型(model,MVC 中的 M).Rails 为解决 ...

随机推荐

  1. CVE-2019-0193 Apache solr velocity模块漏洞

    Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平衡查询,自 ...

  2. Pytorch实现的语义分割器

    使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例 从Detectron输出的相关示例 使用Detectron预训练权重输出 *e2e_keypoi ...

  3. C# 基础知识系列- 13 常见类库介绍(二)日期时间类

    0. 前言 上一篇内容介绍了Console类和Math类,这篇内容着重介绍一下C#中时间日期的处理方式. 上一篇勘误: 上一篇中关于静态类没有构造函数,这一表述有误.正确的说法是C#中静态类不包含常规 ...

  4. lua实现游戏抽奖的几种方法

    ^_^内容原创,禁止转载  假设配置如下: local reward_pool = { {weight = , item = {, num = }}, {weight = , item = {, nu ...

  5. Python学习17之类3继承

    '''''''''继承:在继承原有类功能的基础上,增加新的功能(属性或者方法),形成新的类被继承的类:父类新的类:子类 格式:class 子类(父类) class 子类(父类1,父类2,父类3...) ...

  6. 定期清理nohup.out

    事件背景 服务应用weblogic通过nohup启动. nohup的使用全部都在weblogic域中的bin目录下 但是没有做定期nohup.out的清理 导致核心服务的日志过大,在出现问题时候难以打 ...

  7. SSL/TLS 漏洞“受戒礼”,RC4算法关闭

    SSL/TLS 漏洞"受戒礼" 一.漏洞分析 事件起因 2015年3月26日,国外数据安全公司Imperva的研究员Itsik Mantin在BLACK HAT ASIA 2015 ...

  8. Nginx四层代理

    Nginx支持四层代理 http://nginx.org/en/docs/stream/ngx_stream_core_module.html 该ngx_stream_core_module模块自1. ...

  9. 美版健康码要来了!苹果Google被网友质疑:这是变相的监视系统吗?

    4 月 30 日消息,据外媒报道,由苹果和谷歌合作开发一个冠状病毒追踪系统将在 5 月 1 日正式上架,今天已经进入测试阶段. 图自:techcrunch 这款应用可以让 iOS 和 Android ...

  10. Express 文档(常见问题)

    常见问题 我该如何构建我的应用程序? 这个问题没有明确的答案,答案取决于你的应用程序规模和所涉及的团队,为了尽可能灵活,Express在结构方面没有做出任何假设. 在你喜欢的任何目录结构中,路由和其他 ...