🗒️一步步手撸Transformer之(二)—— Multi-head Attention
2023-9-25
| 2023-10-8
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
ℹ️
多头注意力(Multi-Head Attention)机制是自注意力(Self-Attention)的一个扩展,主要出现在自然语言处理(NLP)和其他序列模型中。它的起源可以追溯到Transformer模型,该模型由Vaswani等人在2017年的论文 "Attention Is All You Need" 中首次介绍,开山经典之作。Self-Attention则出现得更加久远。
注意力机制在Transformer中三个地方使用,下图剪头所示:
  • Encoder中的自注意力
  • Decoder中的自注意力
  • Decoder中的Encoder-Decoder-attention
Fig.1
Fig.1
Fig.2
Fig.2
注意力层的输入为Query,Key和Value三个参数。
其中,大名鼎鼎的注意力公式为:

疑问点1:如何得到,有什么讲究?

在多头注意力机制中,参数(每个头的维度)通常是由总的模型维度和多头注意力的头数()决定的。具体来说,通常是这样计算的:
这样做有几个原因:
  1. 参数平衡:通过这种方式可以确保每个头的参数数量相同,并且总的参数数量与单头注意力相当。这有助于模型的扩展性和可管理性。
  1. 计算效率:因为的一个因子,所以在进行矩阵运算时,这能更有效地利用硬件加速。
  1. 多样性:当使用多个头时,每个头都在不同的子空间中进行操作,这有助于模型捕获输入之间多样性更丰富的关系。
  1. 可解释性和调试:选择一个合适的可以使每个注意力头更易于解释和调试,因为每个头的维度都相对较小。
在某些特殊应用或研究场景下,可以手动设置

疑问点2:decoder里面的有个掩码多头注意力,为什么要加mask?

在解码器(decoder)中使用掩码(mask)的目的是确保当前位置的输出仅仅依赖于其之前的位置,而不是未来的位置。这主要适用于序列生成任务,例如机器翻译、文本生成等。
为什么这是重要的呢?考虑以下几点:
  1. 因果关系(Causality): 在序列生成中,每个输出仅仅应当依赖于之前的输出。例如,生成句子的第四个单词时,我们只能考虑前三个单词,而不能考虑第五个单词。加入掩码确保模型在训练时保持这种因果关系。
  1. 训练与推理的一致性: 在推理(即实际使用)时,我们通常采用自回归方式生成序列:一次生成一个标记,然后将其作为新输入传递回模型。使用掩码确保模型在训练和推理时的行为是一致的。
  1. 避免信息泄露: 如果不使用掩码,模型可能会在训练期间“窥视”未来的标记,并过度依赖这些信息。这会导致在推理时性能下降,因为在实际应用中这些未来的标记是不可用的。
在实际操作中,掩码通常是一个上三角形状的矩阵,其中上三角(包括对角线)的部分设为0,其余部分设为负无穷(或非常大的负数),如Fig.2,下图代码在31行。在应用函数计算注意力权重之前,这个掩码会被加到注意力分数上,这样上三角部分的分数在后基本上就会变成0,从而实现了掩蔽效果。

疑问点3:Q,K,V的叫法来源于哪里?

Q、K 和 V 分别代表 Query(查询)、Key(键)和 Value(值)。这些术语的来源和它们在注意力机制中的角色都与数据库的查询概念有相似之处。
在注意力机制中:
  1. Query (Q): 它代表了我们正在询问的信息或我们关心的上下文。在自注意力机制中,每个序列元素都有一个对应的查询,它试图从其他部分找到相关信息。
  1. Key (K): 这些是您可以查询的条目或“索引”。在自注意力机制中,每个序列元素都有一个对应的键。
  1. Value (V): 对于每一个“键”,都有一个与之关联的“值”,它代表实际的信息内容。当查询匹配到一个特定的键时,其对应的值就会被选中并返回。
这种思路与数据库查询非常相似,您可以将 Query 看作是搜索查询,Key 看作是数据库索引,而 Value 则是实际的数据库条目。
在 "Attention Is All You Need" 这篇 Transformer 论文中,这些术语首次被广泛地采纳和使用。注意力机制的核心思想是:对于给定的 Query,计算其与所有 Keys 的相似度,然后用这些相似度对 Values 进行加权求和,得到最终的输出。
尽管这些术语在 Transformer 和许多现代 NLP 模型中被普遍接受,但它们的选择并没有特定的历史背景或来源;它们只是直观的命名,用来描述注意力计算的各个部分。

多头注意力机制代码如下

notion image
 

📎 参考文章

 
 
  • 算法
  • LLM
  • WSL2设置的最佳实践之——初步安装理解旋转位置编码(RoPE)
    Loading...
    目录