系列文章目录
第1章 绪论
第2章 机器学习概述
第3章 线性模型
第4章 前馈神经网络
第5章 卷积神经网络
第6章 循环神经网络
第7章 网络优化与正则化
第8章 注意力机制与外部记忆
第9章 无监督学习
第10章 模型独立的学习方式
第11章 概率图模型
第12章 深度信念网络
第13章 深度生成模型
第14章 深度强化学习
第15章 序列生成模型
文章目录
- 系列文章目录
- 前言
- 8.1 人脑中的注意力机制
- 8.1.1问题引入—阅读理解问题
- 8.1.2人脑中的注意力
- 8.1.3注意力示例
- 8.1.4注意的实现
- 8.2 人工神经网络中的注意力机制
- 8.2.1 软性注意力机制(soft attention mechanism)
- 8.2.2 键值注意力(key-value pair attention)
- 8.2.3 多头注意力(multi-head pair attention)
- 8.2.4 结构化注意力(structural attention)在之前介绍中,我们假设所有的输入信息是同等重要的,是一种扁平(Flat)
- 8.2.5 指针网络
- 8.3 注意力机制的应用
- 8.3.1 文本分类
- 8.3.2 机器翻译
- 8.3.3 看图说话
- 8.3.4 阅读理解
- 8.4 自注意力模型
- 8.5 人脑中的记忆
- 总结
前言
如下图,可以看出,由全连接前馈网络到卷积网络,再到循环网络,最后到图网络,网络的能力是不断增强的;除此之外我们还可以通过增加注意力机制或外部记忆来增强网络的能力。所以本章围绕注意力机制和外部记忆展开。
8.1 人脑中的注意力机制
8.1.1问题引入—阅读理解问题
如上图紫色部分所示,通过词嵌入将上图中1-6句看做sorty,输入Words,通过词嵌入转化为词向量,通过RNN输出为story的输出向量;将上图第7句看做Query,同理得到其输出;将两部分输出组合,在经过一个NLP分类器,即可得到阅读理解的结果为office。但这样的模型存在以下问题:
- 长存依赖问题:Story的输出向量无法完全表示story中所包含的文本信息。
- 输出向量包含无关信息:像1、3、4句未包含问题相关的信息,但也被编入到Story的输出向量中。
8.1.2人脑中的注意力
人脑每个时刻接收的外界输入信息非常多,包括来源于视觉、听觉、触觉的各种各样的信息。但就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑通过注意力来解决信息超载问题。
8.1.3注意力示例
鸡尾酒会效应:当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音。同时,如果注意到的背景声中有重要的词(比如他的名字),他会马上注意到。
8.1.4注意的实现
- 汇聚(pooling)
是一种自下而上的方式,当给定信息时,人脑自发地将注意力集中到某些方面。
如:给定以下一张报纸,人脑会自发地将注意力集中到报纸上的图片以及一些大字而忽略小字的文本内容。
- 会聚(focus)
是一种自上而下的方式,当给一个问题时,人脑自发地将注意力集中到与问题相关的方面而忽略其他信息。
如:给定如下五张牌,让计算所有黑色牌的数字之和,人脑会自发地将注意力集中黑色牌上的数字而忽略其花色。
8.2 人工神经网络中的注意力机制
8.2.1 软性注意力机制(soft attention mechanism)
注意力机制的计算过程,如下图所示将注意力q添加到
x
i
x_i
xi中,
之后进行计算,其计算过程如下:
- 计算注意力打分函数的值
- 计算注意力分布α
- 根据α来计算输入信息的加权平均
8.2.2 键值注意力(key-value pair attention)
用键计算注意力分布α,用值计算注意力的加权平均。
8.2.3 多头注意力(multi-head pair attention)
利用多个查询
Q
=
[
q
1
,
…
,
q
M
]
Q=[q_1,…,q_M]
Q=[q1,…,qM],同时从输入信息中选取多组信息,每个“注意力头”关注输入信息的不同部分。
a
t
t
(
(
K
,
V
)
,
Q
)
=
a
t
t
(
(
K
,
V
)
,
q
1
)
⊕
…
⊕
a
t
t
(
(
K
,
V
)
,
q
M
)
att((K,V),Q)=att((K,V),q_1) \oplus …\oplus att((K,V),q_M)
att((K,V),Q)=att((K,V),q1)⊕…⊕att((K,V),qM)
8.2.4 结构化注意力(structural attention)在之前介绍中,我们假设所有的输入信息是同等重要的,是一种扁平(Flat)
结构,注意力分布实际上是在所有输入信息上的多项分布.但如果输入信息本身具有层次(Hierarchical)结构,比如文本可以分为词、句子、段落、篇章等不同粒度的层次,我们可以使用层次化的注意力来进行更好的信息选择 [Yang et al.,2016].此外,还可以假设注意力为上下文相关的二项分布,用一种图模型来构建更复杂的结构化注意力分布[Kim et al., 2017]。
8.2.5 指针网络
只使用注意力机制的第一步,将注意力分布作为一个软性的指针(pointer)来指出相关的信息。
图8.2给出了指针网络的示例,其中𝒉1, 𝒉2, 𝒉3 为输入数字20, 5, 10经过循环神经网络的隐状态,𝒉0 对应一个特殊字符 ‘<’.当输入 ‘>’ 时,网络一步一步输出三个输入数字从大到小排列的下标。
8.3 注意力机制的应用
8.3.1 文本分类
将文本表示为向量,之后进行注意力向量与文本向量计算之间的计算,将计算结果送入分类器即得到文本分类结果。
8.3.2 机器翻译
将Encoder文本中每个词对应的向量输出,之后与Decoder输入文本的单词向量进行计算,再进行一些列的操作来获得预测出的文本。
8.3.3 看图说话
将图片的每聚焦部分对应一个单词。
看图说话注意力
8.3.4 阅读理解
8.4 自注意力模型
问题引入:
当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列,但这种方法只建立了输入信息的短距离局部依赖关系。
如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互;另一种方法是使用全连接网络。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model)
上图中全连接模型中的实线权重为固定连接,自注意力模型中的虚线权重由注意力机制动态生成
自注意模型示例:
QKV模式(Query-Key-Value):
假设输入序列为𝑿 = [𝒙1, ⋯ , 𝒙𝑁 ] ∈ ℝ𝐷𝑥×𝑁,输出序列为𝑯 = [𝒉1, ⋯ , 𝒉𝑁 ] ∈ℝ𝐷𝑣×𝑁,自注意力模型的具体计算过程如下:
- 对于每个输入
𝒙
𝑖
𝒙_𝑖
xi,我们首先将其线性映射到三个不同的空间,得到查询向量
𝒒
𝑖
∈
R
𝐷
𝑘
𝒒_𝑖 ∈ ℝ^{𝐷_𝑘}
qi∈RDk、键向量
𝒌
𝑖
∈
R
𝐷
𝑘
𝒌_𝑖∈ ℝ^{𝐷_𝑘 }
ki∈RDk和值向量
𝒗
𝑖
∈
R
𝐷
𝑣
𝒗_𝑖 ∈ ℝ^{𝐷𝑣}
vi∈RDv,对于整个输入序列𝑿,线性映射过程可以简写为:
𝑸 = 𝑾 𝑞 𝑿 ∈ R 𝐷 𝑘 × 𝑁 𝑲 = 𝑾 𝑘 𝑿 ∈ R 𝐷 𝑘 × 𝑁 𝑽 = 𝑾 𝑣 𝑿 ∈ R 𝐷 𝑘 × 𝑁 𝑸 = 𝑾_𝑞𝑿 ∈ ℝ^{𝐷𝑘×𝑁} \\ 𝑲 = 𝑾_𝑘𝑿 ∈ ℝ^{𝐷𝑘×𝑁} \\ 𝑽 = 𝑾_𝑣𝑿 ∈ ℝ^{𝐷𝑘×𝑁} Q=WqX∈RDk×NK=WkX∈RDk×NV=WvX∈RDk×N
其中 W 𝑞 ∈ R 𝐷 𝑘 × D x , 𝑾 𝑘 ∈ R 𝐷 𝑘 × 𝐷 𝑥 , 𝑾 𝑣 ∈ R 𝐷 𝑣 × 𝐷 𝑥 W_𝑞∈ℝ^{𝐷_𝑘×D_x}, 𝑾_𝑘 ∈ ℝ^{𝐷_𝑘×𝐷_𝑥} ,𝑾_𝑣 ∈ℝ^{𝐷_𝑣×𝐷_𝑥} Wq∈RDk×Dx,Wk∈RDk×Dx,Wv∈RDv×Dx分别为线性映射的参数矩阵, 𝑸 = [ 𝒒 1 , ⋯ , 𝒒 𝑁 ] , 𝑲 = [ 𝒌 1 , ⋯ , 𝒌 𝑁 ] , 𝑽 = [ 𝒗 1 , ⋯ , 𝒗 𝑁 ] 𝑸 = [𝒒_1, ⋯ , 𝒒_𝑁 ], 𝑲 = [𝒌_1, ⋯ , 𝒌_𝑁 ], 𝑽 = [𝒗_1, ⋯ , 𝒗_𝑁 ] Q=[q1,⋯,qN],K=[k1,⋯,kN],V=[v1,⋯,vN]分别是由查询向量、键向量和值向量构成的矩阵。 - 对于每一个查询向量
𝒒
𝑛
∈
𝑸
𝒒_𝑛 ∈ 𝑸
qn∈Q,利用键值对注意力机制,可以得到输出向量
𝒉
𝑛
𝒉_𝑛
hn:
𝒉 𝑛 = a t t ( ( 𝑲 , 𝑽 ) , 𝒒 𝑛 ) = ∑ j = 1 N α n j v j = ∑ j = 1 N s o f t m a x ( s ( k j , q n ) ) v j 𝒉_𝑛 = att((𝑲, 𝑽 ), 𝒒_𝑛)\\ =\sum_{j=1}^{N}\alpha _{nj}v_j\\ =\sum_{j=1}^{N}softmax(s(k_j,q_n))v_j\\ hn=att((K,V),qn)=j=1∑Nαnjvj=j=1∑Nsoftmax(s(kj,qn))vj
其中𝑛, 𝑗 ∈ [1, 𝑁]为输出和输入向量序列的位置, α 𝑛 𝑗 \alpha_{𝑛𝑗} αnj 表示第𝑛个输出关注到第j个输入的权重
如果使用缩放点积来作为注意力打分函数,输出向量序列可以简写为
𝑯 = 𝑽 s o f t m a x ( K T Q D k ) 𝑯 = 𝑽 softmax(\frac{K^TQ}{\sqrt {D_k}}) H=Vsoftmax(DkKTQ)
其中softmax(⋅)为按列进行归一化的函数。
8.5 人脑中的记忆
在人脑中,记忆在大脑皮层是分布式存储的,而不是存储于某个局部区域