深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图]
【补充说明】深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻译等)、语音识别、序列生成、序列分析等众多领域!
【再说一句】本文主要介绍深度学习中序列模型的演变路径,和往常一样,不会详细介绍各算法的具体实现,望理解!
一、循环神经网络RNN
1. RNN标准结构
传统神经网络的前一个输入和后一个输入是完全没有关系的,不能处理序列信息(即前一个输入和后一个输入是有关系的)。
循环神经网络RNN解决了以上问题,整体结构如图所示:

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

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


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

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

二、长短期记忆网络LSTM
LSTM是RNN的一种变体,RNN由于梯度消失只有短期记忆,而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机制)的更多相关文章
- 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...
- zz深度学习中的注意力模型
中间表示: C -> C1.C2.C3 i:target -> IT j: source -> JS sim(Query, Key) -> Value Key:h_j,类似某种 ...
- CTR预估模型演变及学习笔记
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...
- 深度学习中的Normalization模型
Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...
- [优化]深度学习中的 Normalization 模型
来源:https://www.chainnews.com/articles/504060702149.htm 机器之心专栏 作者:张俊林 Batch Normalization (简称 BN)自从提出 ...
- 强化学习中的无模型 基于值函数的 Q-Learning 和 Sarsa 学习
强化学习基础: 注: 在强化学习中 奖励函数和状态转移函数都是未知的,之所以有已知模型的强化学习解法是指使用采样估计的方式估计出奖励函数和状态转移函数,然后将强化学习问题转换为可以使用动态规划求解的 ...
- Scratch学习中需要注意的地方,学习Scratch时需要注意的地方
在所有的编程工具中,Scratch是比较简单的,适合孩子学习锻炼,也是信息学奥赛的常见项目.通常Scratch学习流程是,先掌握程序相关模块,并且了解各个模块的功能使用,然后通过项目的编写和练习,不断 ...
- [PyTorch] rnn,lstm,gru中输入输出维度
本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...
- Ruby Rails学习中:User 模型,验证用户数据
用户建模 一. User 模型 实现用户注册功能的第一步是,创建一个数据结构,用于存取用户的信息. 在 Rails 中,数据模型的默认数据结构叫模型(model,MVC 中的 M).Rails 为解决 ...
随机推荐
- DeepinV20系统文件管理器右键发送至为知笔记
1. 创作背景 昨天在深度系统上做了一个打开文件管理器选择文件右键发送文本至博客园的插件. 这个插件对于我自己来说是及其方便的东西,平时的学习积累,工作经验或者生活感悟,随手记下之后,就能够轻松发送出 ...
- eclipse集成 json editor plugin插件
打开eclipse 找到: help--->install new software ——>add name:jsoneditor location:https://marketplace ...
- samba 客户端工具 smbclient和samba挂载到本地
smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源. 安装 yum install -y samba-client 常用参数 -c<命令> ...
- WTF Python:有趣且鲜为人知的Python特性
Python 是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性.但有的时候,Python 的一些输出结果对于初学者来说似乎并不是那么一目了然. 这个有趣的项目意在收集 Pyth ...
- debian7安装了mysql后,局域网去连接时出现10061错误
- JS 获取GET 参数
对于 URL,我们需要了解更多,因为我们的开发中可能会需要提取URL的部分信息来做不同的事情,事实上这也是与后端交互的一种独特的方式,当然这肯定是安全的,当请求被返回,关于 url 的信息就被记录在了 ...
- OSG加载倾斜摄影数据
目录 1. 概述 2. 实例 2.1. 代码 2.2. 解析 3. 结果 1. 概述 ContextCapture(Smart3D)生成的倾斜摄影模型数据一般都形如如下组织结构: 在Data目录下包含 ...
- Spring5参考指南:AOP代理
文章目录 AOP代理 AOP Proxies原理 AOP代理 通常来说Spring AOP有两种代理方式,一种默认的JDK代理,只能代理接口,一种是CGLIB代理,可以代理具体的类对象. Spring ...
- gitlab环境部署
一:配置主机名 [root@localhost ~]# hostname gitlab[root@localhost ~]# bash 二:安装依赖包 [root@gitlab ~]# yum -y ...
- MYSQL 索引汇总
1.MySQL索引类型 先分以下类,MYQL有两大类索引:聚集索引和非聚集索引(只考虑mysql innodb) 聚集索引:在有主键的情况下,主键为聚集索引,其他都是非聚集索引 ...




