赞
踩
全文共11413字,预计学习时长33分钟
图源:Unsplash
“每隔一段时间,就会出现一种能改变一切的革命性产品。”
——史蒂夫·乔布斯(SteveJobs)
这句21世纪最知名的言论之一与深度学习有什么关系呢?
想想看。计算能力的提升带来了一系列前所未有的突破。
若要追根溯源,答案将指向注意力机制。简而言之,这一全新概念正在改变我们应用深度学习的方式。
图源:Unsplash
注意力机制是过去十年中,深度学习研究领域最具价值的突破之一。
它催生了包括Transformer架构和Google的BERT在内的自然语言处理(NLP)领域的许多近期突破。如果你目前(或打算)从事NLP相关工作,一定要了解什么是注意力机制及其工作原理。
本文会讨论几种注意力机制的基础、流程及其背后的基本假设和直觉,并会给出一些数学公式来完整表达注意力机制,以及能让你在Python中轻松实现注意力相关架构的代码。
大纲
l 注意力机制改变了我们应用深度学习算法的方式
l 注意力机制彻底改变了自然语言处理(NLP)甚至计算机视觉等领域
l 本文将介绍注意力机制在深度学习中的工作原理,以及如何用Python将其实现
目录
1.什么是注意力?
1. 深度学习是如何引入注意力机制的
2. 了解注意力机制
2.使用Keras在Python中实现简单的注意力模型
3.全局与局部注意力
4.Transformers–只需注意力就足够
5.计算机视觉中的注意力
什么是注意力?
在心理学中,注意力是选择性地专注于一件或几件事物而忽略其他事物的认知过程。
神经网络被认为是为对人脑运作进行简单模仿所做出的努力。注意力机制也是为在深度神经网络中实现选择性地专注于一些事物而忽略其他事物这一相同动作所做出的一种尝试。
对此,我来解释一下。假设你在看小学时期的一张合照。照片上一般会有一群孩子分几排而坐,老师则坐在孩子中间。现在,如果有人问“照片上有多少人?”,你会怎么做呢?
只需数一下人头,对吗?不用考虑照片上其他任何内容。现在,如果有人问“里面哪个是老师?”,你的大脑十分清楚要怎样做,即开始找里面哪个看起来像大人。照片的其他特征将会被忽略。这就是大脑擅用的“注意力”。
深度学习是如何引入注意力机制的
注意力机制是对NLP中基于编码/解码器的神经机器翻译系统的一种改进。后来,该机制或其变体被用于计算机视觉、语音处理等其他方面。
在Bahdanau等人2015年提出首个注意力模型前,神经机器翻译是基于编码—解码器RNN / LSTM的。编码器和解码器都是LSTM/ RNN单元的堆栈。按以下两个步骤工作:
1.编码器LSTM用于处理整个输入句并将其编码为一个上下文向量,这是LSTM / RNN最后的隐藏状态。预期生成输入句的准确摘要。编码器的所有中间状态都将被忽略,最终状态应为解码器的初始隐藏状态
2.解码器LSTM或RNN单元生成句中的各个单词。简单来说,有两个RNN / LSTM。其中一个称为编码器—在生成摘要之前,会先读取输入句并尝试进行理解。它将摘要(上下文向量)传递给解码器,解码器仅通过查看即可翻译输入的句子。
这一方法的主要缺点显而易见。如果编码器的摘要不准确,翻译就会出错。实际上,已出现过这种情况,编码器在理解较长的句子时会生成错误的摘要。这就是RNN / LSTM的远程依赖问题。
由于梯度消失/爆炸问题,RNNs无法记住较长的句子和序列,它只能记住刚刚看到的部分。甚至提出编码器—解码器网络的Cho等人(2014)也证明,编码器—解码器网络的性能会随着输入句长度的增加迅速下降。
尽管LSTM应比RNN能更好捕获远程依赖关系,在特定情况下它往往会变得健忘。在翻译句子时,无法重点关注输入的某些词。
图源:Unsplash
现在,假设要预测某个句子的下一个单词,要从这个词前面的几个单词判断上下文内容。比如,“尽管他来自北方邦(印度某地名),但因成长于孟加拉,他还是更习惯说孟加拉语”。在这一句中,要想预测“孟加拉语”这个词,就要在预测时对“长大”和“孟加拉”这两个词赋予更大的权重。尽管北方邦也是个地名,这里应将其“忽略”。
那么,创建上下文向量时,有没有什么方法可以使输入句中的所有信息保持完整呢?
Bahdanau等人(2015)提出了一个简单但优雅的方法,他们建议在生成上下文向量时不仅可以考虑所有输入词,还应给予每个输入词的相对重要性。
因此,建议使用的模型在生成句子时,都会在编码器隐藏状态下搜寻一组位置,在这些位置上有着相关性最高的信息。这就是“注意力”。
了解注意力机制
这是Bahdanau论文中的注意力模型示意图。此处使用的双向LSTM为每个输入句生成一个注释序列(h1,h2,.....,hTx)。其中用到的所有向量h1,h2…基本上都是编码器中前向和后向隐藏状态的串联。
也就是说,向量h1,h2,h3....,hTx都是输入句中的Tx个词的代表。在简单的编码器和解码器模型中,仅将编码器LSTM的最后状态(在这种情况下为hTx)用作上下文向量。
但Bahdanau等人在创建上下文向量时着重将所有词嵌入到输入中(由隐藏状态表示)。他们通过简单地对隐藏状态进行加权求和实现这一点。
那么,要如何计算权重呢?其实,权重也可以通过前馈神经网络来学习,下文会提到它们的数学公式。
输出词yi的上下文向量ci是使用注释的加权之和生成的:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。