【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。如下内容仅为我的看法,欢迎批评指正,不喜勿喷![认真看图][认真看图]html
【补充说明】深度学习中的序列模型已经普遍应用于天然语言处理(例如机器翻译等)、语音识别、序列生成、序列分析等众多领域!python
【再说一句】本文主要介绍深度学习中序列模型的演变路径,和往常同样,不会详细介绍各算法的具体实现,望理解!git
传统神经网络的前一个输入和后一个输入是彻底没有关系的,不能处理序列信息(即前一个输入和后一个输入是有关系的)。github
循环神经网络RNN解决了以上问题,总体结构如图所示:面试
多对一:例如情感分析,须要多个时间步长的输入,可是只须要单个输出(即实现分类)。总体结构如图所示:算法
一对多:例如音乐生成,只须要单个输入(即输入类别),可是须要输出整个序列。总体结构如图所示:网络
多对多:例如实时分类,输入序列与输出序列的长度是同样的。总体结构如图所示:架构
多对多:例如机器翻译,输入序列与输出序列的长度是不同的。总体结构如图所示:机器学习
LSTM是RNN的一种变体,RNN因为梯度消失只有短时间记忆,而LSTM网络经过精妙的门控制,必定程度上缓解了梯度消失的问题。post
GRU是LSTM的一种变体,也是为了解决梯度消失(即长期记忆问题)而提出来的。相较于LSTM,GRU的网络结构更加简单,且效果很好。
例如命名实体识别:判断句子中Teddy是不是人名,若是只从前面几个词是没法得知Teddy是不是人名,若是能有后面的信息就很好判断了。
双向循环神经网络中的网络单元能够是RNN、LSTM和GRU,均适用这种变体结构。
顾名思义,就是多个循环神经网络的堆叠,循环神经网络能够采用RNN、LSTM和GRU,均适用这种变体结构。
又叫Encoder-Decoder模型,适用于输入与输出个数不同相等的状况(即多对多的循环神经网络,适用于机器翻译等场景)。
其中,Encoder编码器和Decoder解码器可使用RNN、LSTM和GRU,均适用这种变体结构。
同时,这种结构也能够与双向、深层的变体结构同时使用,不冲突的。
这里多提一句,例如给图像添加描述这样的应用场景,图中对应的描述为“一只猫站在椅子上”,一样能够采用Encoder-Decoder模型。
须要注意到,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就来自于编码中不一样阶段的隐含层状态的加权和。
补充说明一下,衡量相关性的打分方式主要包括如下几种,具体不展开了:
可以反映文档的层次结构。模型在单词和句子级别分别设计了两个注意力机制,这样作可以在构建文档表示时区别地对待这些内容。
是关联单个序列中不一样位置的注意力机制,从而计算序列的交互表示。已被证实在不少领域十分有效,例如机器阅读、图像描述生成等。
以机器阅读为例,当前单词为红色,蓝色阴影的大小表示激活程度,自注意力机制使得可以学习当前单词和句子前一部分词之间的相关性:
补充说明,以图像描述生成为例,注意力权重的可视化清楚地代表了模型关注的图像的哪些区域以便输出某个单词:
Facebook人工智能实验室提出基于卷积神经网络的Seq2Seq架构,将RNN替换为带有门控单元的CNN(相较于RNN,CNN工做不依赖于上一时间步的结果,因此能够作到最大程度的并行计算,提高训练速度),提高效果的同时大幅加快了模型训练速度。
以上Attention model虽然解决了输入seq仅有一个context vector的缺点,但仍存在一些问题:
Google提出一种叫作”transformer”的模型,透过self-attention、multi-head的概念去解决上述缺点,彻底舍弃了RNN、CNN的构架。
值得一提的是,Google后续提出了BERT模型,在11个任务中取得了最好的效果,是深度学习在nlp领域又一个里程碑式的工做。
在 NLP 的一些任务上,好比问答匹配任务,答案每每与问题间接相关。所以,基本的注意力技术就显得很无力了,这时候就体现了Memory-based Attention的强大之处。例如能够经过迭代内存更新(也称为多跳)来模拟时间推理过程,以逐步引导注意到答案的正确位置。
简单说就是Soft Attention打分以后分配的权重取值在0到1之间,而Hard Attention取值为0或者1。
这个也很好理解,就是采用全局或者局部的注意力机制。
例如机器翻译、问答系统、文本分类、情绪分析、命名实体识别、创做乐曲等。
例如多媒体描述、局部图像补全、经过低分辨率的图像还原高分辨率图像等。
例如用于用户行为分析,即将注意力权重分配给用户的交互项目,以更有效地捕捉长期和短时间的兴趣。
本文参考大佬:https://github.com/yuquanle/Attention-Mechanisms-paper/blob/master/Attention-mechanisms-paper.md
若是你对智能推荐感兴趣,欢迎先浏览个人另几篇随笔:智能推荐算法演变及学习笔记
若是您对数据挖掘感兴趣,欢迎浏览个人另几篇博客:数据挖掘比赛/项目全流程介绍
若是您对人工智能算法感兴趣,欢迎浏览个人另外一篇博客:人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)
若是你是计算机专业的应届毕业生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的应届生,你如何准备求职面试?
若是你是计算机专业的本科生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的本科生,你能够选择学习什么?
若是你是计算机专业的研究生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的研究生,你能够选择学习什么?
若是你对金融科技感兴趣,欢迎浏览个人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以后博主将持续分享各大算法的学习思路和学习笔记:hello world: 个人博客写做思路