Skip to content

Latest commit

 

History

History
96 lines (67 loc) · 6.58 KB

File metadata and controls

96 lines (67 loc) · 6.58 KB

Transformer的注意力机制

Transformer的注意力机制是其核心创新部分,它使得模型能够灵活地关注输入序列的不同部分,从而有效地捕捉上下文关系。以下是Transformer注意力机制的关键概念和工作原理。

1. 自注意力(Self-Attention)机制

自注意力机制允许模型在处理一个序列的每个元素时,能够同时关注该序列中的其他所有元素。这对于理解句子或序列中的全局上下文非常重要。

工作流程:

  • Query、Key、Value:
    • 输入序列中的每个元素首先通过线性变换生成三个向量:Query(查询向量)、Key(键向量)和Value(值向量)。

    • 注意力得分:

      • 对于每个查询向量,通过与所有键向量进行点积计算,得到注意力得分。这个得分表示当前元素对其他元素的“关注”程度。
    • 归一化和加权求和:

      • 对得分进行归一化(通常通过softmax函数),然后将归一化得分应用到对应的值向量上,计算加权求和,得到最终的输出。

数学表达式:

[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V ] 其中,( Q ) 是查询矩阵,( K ) 是键矩阵,( V ) 是值矩阵,( d_k ) 是键向量的维度。

2. 多头注意力机制(Multi-Head Attention)

多头注意力是自注意力机制的扩展,它通过并行计算多个自注意力(称为“头”),捕捉输入序列中不同子空间的特征。

  • 多头并行计算:
    • 在多头注意力中,输入被分成多个部分,每个部分独立进行自注意力计算。计算结果被拼接后再进行线性变换,形成最终的输出。

    • 优势:

      • 多头注意力可以捕捉到不同的关系和模式,使得模型能够更好地理解复杂的上下文。

数学表达式:

MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O head_i = Attention(QW_i^Q, KW_i^K, VW_i^V) W_i^Q, W_i^K, W_i^V 和 W^O 是可训练的权重矩阵。

3. 位置编码(Positional Encoding)

由于Transformer模型中没有内置的序列顺序信息(不像RNN),因此需要显式地为每个位置添加一个位置编码,以使模型能够区分序列中的不同位置。

  • 正弦和余弦函数:
    • 位置编码通常使用正弦和余弦函数的组合,为每个位置生成一个唯一的向量。

数学表达式:

[ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) ] [ PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) ] 其中,( pos ) 是位置,( i ) 是维度索引,( d_{model} ) 是模型的维度。

4. 注意力机制的优势

  • 并行计算: 与RNN不同,Transformer可以并行处理序列中的所有元素,这显著提高了计算效率。
    • 长程依赖: 自注意力机制可以直接捕捉序列中任意两个位置之间的依赖关系,避免了RNN中长程依赖问题。

为什么transformers的注意力机制需要多头

Transformer的注意力机制引入多头注意力(Multi-Head Attention)的原因主要在于其能够增强模型对不同特征子空间的表达能力,学习到不同维度的特征,提高了模型的鲁棒性和稳定性, 并且多头注意力可以并行计算,使得多头注意力在增加模型复杂性的同时,仍然保持较高的计算效率。

注意力机制为什么要除一个缩放系数

  • 将注意力得分除以 \sqrt{d_k} 的缩放操作,是为了防止点积的数值过大,从而导致softmax函数的输出过于极端(如接近0或1),从而梯度消失
  • 为什么用平方根进行缩放,因为点积的期望值随着维度 d_k 的增大而增大,其增长速率与 d_k 成正比。因此,为了保持点积的期望值在一个适中的范围内,需要除以 \sqrt{d_k},这样可以将期望值标准化到一个合理的范围。

transformers的encoder和decoder有什么区别

  1. 输入类型
  • Encoder:接收输入序列(如句子)并生成一组隐藏状态表示。
  • Decoder:接收目标序列(通常是前面的词)以及Encoder生成的表示,生成预测序列。
  1. 自注意力机制
  • Encoder:使用全序列的自注意力机制,每个位置都能看到整个输入序列。
  • Decoder:使用带遮挡的自注意力机制,防止当前位置看到未来的词,确保生成序列时符合因果关系。
  1. 交互方式
  • Encoder:多层叠加,每层都只关注输入序列的上下文信息。
  • Decoder:除了自注意力,还会有一层交叉注意力机制,将Encoder生成的表示作为上下文来指导生成。

总结:Encoder专注于提取输入序列的全局特征,Decoder则负责在给定上下文的情况下逐步生成输出序列。

除了transformers还了解其他什么架构,和bert 和目前的大模型有什么区别

还有纯encoder-bert,纯decoder-各种LLM,encoder+decoder-T5和bart等代表(这个和transformers架构相同)。

了解bert吗,是怎么预训练的,除了bert还了解什么其他的衍生的bert模型

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer的预训练模型,专注于从大规模文本数据中学习上下文表示。它的预训练主要包括两个任务:

  1. 掩码语言模型(Masked Language Model, MLM):随机掩盖输入序列中的部分词汇,模型需要预测这些被掩盖的词,从而学习上下文之间的关系。 在预训练过程中,BERT对输入序列进行如下操作:
    • 随机选择:从输入序列中随机选择15%的词进行掩码。
    • 掩码策略
      • 80%的概率用特殊的掩码标记[MASK]替换选中的词。例如,句子“我喜欢吃苹果”中,“喜欢”可能会被替换为“我[MASK]吃苹果”。
      • 10%的概率用随机词替换选中的词。例如,“喜欢”可能会被替换为“我跑步吃苹果”。
      • 10%的概率保持原词不变。例如,“喜欢”仍然保持为“喜欢”。
  2. 下一句预测(Next Sentence Prediction, NSP):给定两段文本,模型需要预测它们是否是连续的,从而帮助模型理解句子之间的关系。
  • RoBERTa:对BERT的改进,去掉了NSP任务,增加了训练数据量和训练时间,表现更强。

  • ALBERT:通过参数共享和因子分解等技术减少模型参数量,提高了训练速度和模型效率。

  • DistilBERT:BERT的蒸馏版本,参数更少,但在性能上保持了较好的效果,适用于资源受限的环境。