Transformer
一、注意力机制
注意力机制背景: 朴素的Seq2Seq模型中,由于用Encoder RNN的最后一个神经元的隐状态作为Decoder RNN的初始隐状态, 导致Encoder的最后一个隐状态(Context Vector)承载了源句子的所有信息,成为整个模型的“信息”瓶颈。
Seq2Seq
注意力机制目标: 帮助模型在处理序列数据时能够关注到输入序列中最重要的部分,允许模型动态地分配不同的权重给输入序列中的不同位置,从而实现对信息的有效筛选和整合。 注意力机制就是希望打破长序列信息瓶颈,解决长序列信息丢失问题。
注意力机制目标
Transformer注意力机制: 嵌入向量作为输入传递给Transformer的Attention模块时,Attention模块会通过Q、K、V计算注意力权重,从而分析这些向量,使得Embedding向量间能够相互"交流"并根据彼此信息更新自身的值。
Attention模块的主要作用是确定在给定上下文中哪些嵌入向量与当前任务最相关,并据此更新或调整这些嵌入向量的表示。
Transformer注意力机制
注意力机制案例:在处理包含“model”一词的句子时,它通过分析句子中的其他单词(如“machine learning”或“fashion”), 计算这些单词与“model”之间的语义关系权重,并据此更新“model”的嵌入向量,以更准确地反映其在当前上下文中的含义。
注意力机制案例
二、注意力机制工作流程
注意力机制计算公式: 在注意力机制中,Q(Query)、K(Key)、V(Value)通过映射矩阵得到相应的向量,通过计算Q与K的点积相似度并经过softmax归一化得到权重,最后使用这些权重对V进行加权求和得到输出。
注意力机制计算公式
注意力机制计算Q、K、V: 对于输入序列的每个单词,通过计算其Query与所有单词Key的点积得到注意力分数,经Softmax归一化后得到注意力权重,再用这些权重对Value向量进行加权求和,以得到包含丰富上下文信息的新单词表示。
- 生成Q、K、V向量:
对于输入序列中的每个单词,都会生成对应的Query(查询)、Key(键)和Value(值)向量。
这些向量通常是通过将单词的嵌入向量(Embedding Vector)输入到一个线性变换层得到的。
- 计算Q、K的点积(注意力分数):
计算Query向量与序列中所有单词的Key向量之间的点积,得到一个分数。
这个分数反映了Query向量与每个Key向量之间的相似度,即每个单词与当前位置单词的关联程度。
- Softmax函数归一化(注意力权重): 这些分数会经过一个Softmax函数进行归一化,得到每个单词的注意力权重。 这些权重表示了在理解当前单词时,应该给予序列中其他单词多大的关注。
- 注意力权重加权求和 (加权和向量 ):这些注意力权重与对应的Value向量进行加权求和,得到一个加权和向量。 这个加权和向量会被用作当前单词的新表示,包含了更丰富的上下文信息。
注意力机制计算Q、K、V
三、3种注意力机制******
Transformer注意力层: 在Transformer架构中,有3种不同的注意力层:Self Attention自注意力、Cross Attention 交叉注意力、Causal Attention因果注意力。
Transformer注意力层
**编码器中的自注意力层: 在自注意力层中,所有的键、值和查询都来自同一个地方,即编码器前一层的输出。编码器中的每个位置都可以关注编码器前一层中的所有位置。
编码器输入序列通过Multi-Head Self Attention(多头自注意力)计算注意力权重。
编码器的Self Attention
解码器中的交叉注意力层:查询来自前一层解码器,而记忆键和值则来自编码器的输出。这使得解码器中的每个位置都能关注输入序列中的所有位置。
编码器-解码器两个序列通过Multi-Head Cross Attention(多头交叉注意力)进行注意力转移。**
编码器-解码器的Cross Attention
解码器中的因果自注意力层: 允许解码器中的每个位置关注解码器中包括该位置在内的所有位置。这时需要防止解码器中的信息向左流动,以保持自回归属性,通过将softmax输入中对应非法连接的所有值掩盖掉(设为-∞)来实现这一点。
解码器的单个序列通过Multi-Head Causal Self Attention(多头因果自注意力)进行注意力计算。
解码器的Causal Attention