1、Transformer架构
在此次学习分享中,我们将首先从Transformer架构出发对Attention的工作原理做深度剖析,整个Transformer架构中,其主要架构分为编码层、注意力层、前馈神经网络层以及解码层几个部分,每个部分的内容都为最后的1750亿参数提供了不菲的贡献。
整个Transformer中的内容都是不可或缺的,他们之间的关系就像你做的糖醋鱼时的所有调料、鱼,葱姜、醋等。跑题了,总之所有所谓的Transformer中最重要的是Attention我是不敢苟同的。但是今天我们主要还是需要了解这一主要组成部分之一:Attention。
2、Attention
在transformer中,attention其实非常让人困惑,从论文中来看,其包含了几种不同的attention:文中的self-attention、图中的Scale Dot-Product attention以及整体架构中出现的Muilt Head Attention,这几种attention到底有什么区别、他们之间又有什么联系,下面我们将分别对每一个进行阐述。(这里仅仅代表个人理解,如有错误或者不足希望大佬能不吝指教)
2.1 Self-Attention
在了解self-attention之前,我们需要先对attention做一个概括的认知,实际的attention的目的是为了改善NLP领域在处理长文本任务时出现的无法关注全局信息的解决办法。其内部的所有内容相较于之前的RNN来说是达到了可以完全并行计算的优势,这种优势在现代“摩尔定律”仍旧存在的情况下是非常可观的。
说了一堆废话,这里开始我的对self-Attention的解读:这里可以看到我们放了一张Scaled Dot-Product Attention的架构图,实际在我理解中self-Attention与Scaled Dot-Product Attention是一样的,唯一的区别在于其架构图中的Mask(opt.)部分,这部分内容在后续我会单独介绍。
这要从一段对话开始:
相信下面这个公式你们是再熟悉不过了,那么什么是QKV,这是一位老师在之前给我的问题。
我当时的回答是:Q是查询、K是键、V是值。
老师:再想想,
我又思考了一会儿答到:Q是数据输入,也就是编码后的原始数据附加权重Wq后的值,K是附加权重Wk后的值,V是附加Wv后的值。(这一段说到最后我自己都不自信了)
老师:自己再思考思考
在翻遍了网上的各种帖子后,我发现了我之前掌握的浅薄以及自己的无知。这里我要说一下每个人对于其理解不同,但是三千大道终有根,原理是一样的。
Q:当前步骤的输入、我们需要关注的内容、是当前带权重Wq的向量
K:检索信息的标识、用于与查询计算相关性的主要内容、在不同任务中的K会有不同的值,它是用于与Q计算初始相关性的主要内容。表示序列中每个位置的特征。
V:实际需要聚合的内容,其意义在于如果这个token对于调整其他内容的含义具有相关性,那么需要向那个内容的embadding嵌入相关性值。
这就是目前的QKV的解释,接下来又是一段对话:
老师:你现在知道了QKV的大致含义,那么这个公式中的每一步的背后含义是什么呢?
我:就是在计算查询与键之间的相关性、
就是在缓和前面矩阵相乘带来的过度信息,对应的是架构图中的Scale部分,防止梯度爆炸和梯度消失,在高维空间中,未缩放的点积可能会导致数值过大,尤其是 较大时,这会使softmax的输出集中在极少数元素上,从而导致梯度消失或过度关注某些位置。缩放因子
用来稳定这个值,使得点积的均值和方差保持在合理范围内,避免这些问题。softmax就是在做归一化操作,最后的乘V则是在嵌入想关性。
老师:那么为什么要去计算相关性以及归一化操作背后的原因是什么呢?
我:...
这就是我当时的实际状态,目前我的理解是相关性计算是为了让当前的值了解自己在整个序列中的重要性,而后的归一化操作实际的本质就是在给定查询Q在不同K上的注意力分布(分数越高的键对应的注意力权重越大),还有一个作用是将相似度转换为概率分布。而最后的加权求和也就是最后的乘V的操作实际上是为了让当前值注意到序列中的其他值对于他自己来说的重要程度。这么说有点抽象,
举个例子,输入序列假设内容为:“一辆破旧的车”。的意义就在于让“车”注意到自己是整个序列中最重要的存在,而最后的乘V则是让“车”注意到“破旧的”对自己意义重大。大致就是这么个意思。
2.2 Muilt Head Attention
带掩码的多头注意力机制实际就是将其运算过程中化简归一化后的矩阵内容进行上三角或则下三角置0.
- 使用多个注意力头并行计算,每个头使用不同的线性变换,然后将这些结果拼接并再次线性变换。
- 公式:
- 其中,
,
是输出线性变换矩阵。
后续内容会对Muilt Head Attention做一个理解性更新...
3、总结小计
V的维度信息为Q最大的维度的矩阵。
K的值在不同任务中可能会不同。
attention在本质上更像是对原始的嵌入向量做矫正,帮助其找到在上下文信息中的具体意义。
V的值实际是在QK相关性基础上附加对全局相关性的内容。