自注意力机制(self-attention)
《Attention Is All You Need》
注意力机制
理解注意力:想象在一个嘈杂的房间听一群人讲话,会不自觉地将注意力集中在某些关键的人或话语上,以便更好地理解整个场景。
在自然语言处理中,注意力机制就类似这种“聚焦”的能力,它能够帮助模型关注 输入文本中更重要部分 ,而不像以前的模型那样平等的对待每个单词。
- 自注意力的计算
假设我们有一个句子“我爱自然语言处理”,首先会把每个单词变成一个数字向量来表示,类似给每个单词一个独特的身份编码。然后,自注意力机制 会对每个单词做三件事:一产生查询向量 ,代表这个单词想要寻找的信息,比如“我”这个单词的查询向量可能是想要找和自己相关的动作或对象;二生成键向量 ,代表单词自身的一些特征,“我”的键向量就体现了“我”这个词的特性;三生成值向量 ,对输入单词信息的一种压缩表示。
计算每个单词的查询向量与其他单词的键向量的点积 ,得到一个表示它们之间关联程度 的分数 ,这个分数经过缩放和Softmax操作后,就变成了注意力权重,权重越大说明这个单词对另一个单词的关注度越高。最后,根据这些权重对应的值向量进行加权求和 ,得到每个单词的新表示,这个新表示综合了句子中其他单词的信息,让每个单词都能“感知”到整个句子的上下文。
直观理解加权求和过程
假设有一个句子“阳光照亮了房间”。对于单词“照亮”,在计算它的新表示时,会先得到它与其他单词(“阳光”“了”“房间”)的注意力权重 。如果“阳光”与“照亮”的注意力权重较高,说明模型认为“阳光”对“照亮”这个动作的理解很重要。那么在加权求和过程中,“阳光”的值向量就会对“照亮”的新表示有较大的贡献。
每个单词的值向量就像是一个包含了该单词部分语义信息的“信息包”。通过注意力权重进行加权求和 ,就像是根据每个“信息包”的重要性来整合信息,最终得到一个综合了整个句子中其他单词信息的新表示 ,这个新表示能够更好地体现每个单词在句子中的上下文关系。
自注意力机制如何产生一个查询向量
在自注意力机制中,产生查询向量 是通过线性变换 实现的。假设我们有一个输入句子,这个句子中的单词经过词嵌入 (Word Embedding)后被表示为一个向量矩阵X ,矩阵的维度是n x d,其中n是句子中的单词数量,d是词向量的维度。
为了得到查询向量,会有一个可学习的权重矩阵Wq (维度为d x dk,dk通常小于或等于d)。对于句子中的每个单词向量Xi(i=1,2,3,···n),通过与权重矩阵Wq相乘 ,即Qi=XiWq,来生成查询向量Qi。这个过程对于句子中的每个单词都要进行,最终得到所有单词的查询向量集合,这些查询向量组成一个新的矩阵Q,其维度为n x dk。
直观理解:权重矩阵Wq看作是一个**“特征提取器**”。词向量Xi包含了单词的各种语义和语法等信息,当于Wq相乘时,就像是在提取 单词在“查询 ”这个维度上 的特征 。例如,一个单词可能有多种语义,通过这个线性变换,提取出的查询向量可能就会突出该单词在寻找其他单词与之相关语义的特征 。例如“苹果”这个单词,其查询向量可能会被调整为更倾向于寻找和它有食用、种类等相关语义的其他单词。
由于权重矩阵Wq是可学习 的,在模型的训练过程中,它会根据训练数据和任务不断调整自己的参数。这样,查询向量也会随着训练的进行而不断优化,从而更好地适应模型对输入句子中单词之间关系的捕捉和理解。
可学习地权重矩阵Wq
其中可学习的权重矩阵 在模型训练的初试阶段是随机初始化的 。但是它们是通过在大量的数据上进行训练,不断地优化得到的,它们是模型从数据中学习到的知识 的一种体现。例如,在Transformer架构的语言模型中,这些权重矩阵通常适用正态分布或者均匀分布来进行随机初始化。以正态分布为例,权重矩阵中的每个元素都从均值为0、标准差为某个较小值的正太分布中随机抽取。
这种随机初始化方式 为模型提供了一个初始的起点,就像给模型一个“猜测”的基础。在训练开始时,模型对输入数据还没有任何学习经验,随机初始化的权重矩阵使得模型能够以一个非零的起点开始,尝试捕捉输入数据中的模式和关系。
反向传播训练调整 :在训练过程中,模型会根据损失函数来调整权重矩阵 。损失函数衡量了模型的输出与真实标签之间的差异。例如,在一个语言翻译任务中,如果模型生成的翻译结果与正确的翻译有很大差异,损失函数就会给出一个较大的值。
然后通过反向传播算法,计算损失函数对权重矩阵的梯度 。梯度表示了损失函数在权重空间中的变化率,它告诉模型应该朝着哪个方向调整权重,以减少损失。根据计算得到的梯度,使用优化算法(如Adam、SGD等)来更新权重矩阵 。例如,Adam优化算法会根据梯度的一阶矩估计和二阶矩估计来动态调整学习率,并更新权重矩阵,使得模型在训练过程中逐渐学习到合适的权重,以更好地完成任务。
adam:通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)动态调整每个参数的学习率。
SGD(随机梯度下降):每次迭代时使用单个样本或一批小样本的梯度来更新参数,而不是像传统梯度下降那样使用全部数据计算梯度。
随着训练的进行,权重矩阵会不断地被调整 ,以使得模型能够更好地适应训练数据,最终学会有效地执行自注意力机制,生成准确的输出 。也就是说,权重矩阵是通过在大量的数据上进行训练,不断地优化得到的,它们是模型从数据中学习到的知识的一种体现。
