深度学习自然语言处理(NLP)基础——自注意力机制原理详解、Transformer、BERT、RNN等

逐渐更新ing

一、基础知识

1. ​什么是NLP(自然语言处理)​

  • 定义:NLP 是人工智能的一个分支,致力于让计算机理解、处理和生成人类语言。
  • 任务
    • 文本分类(如情感分析)
    • 机器翻译
    • 问答系统
    • 文本生成
    • 命名实体识别
    • 等等。
  • 技术发展
    • 早期:基于规则的方法(如正则表达式、语法分析)。
    • 中期:基于统计的方法(如隐马尔可夫模型、条件随机场)。
    • 现代:基于深度学习的方法(如 RNN、LSTM、Transformer)。

2. 什么是​Transformer

  • 定义:Transformer 是一种基于 ​自注意力机制(Self-Attention)​ 的神经网络架构,首次在 2017 年的论文《Attention is All You Need》中提出。
  • 核心思想
    • 通过自注意力机制捕捉输入序列中不同位置之间的关系。
    • 摒弃了传统的 RNN 和 CNN 结构,完全基于注意力机制。
  • 优点
    • 并行计算效率高。
    • 能够捕捉长距离依赖关系。
  • 应用
    • Transformer 是 BERT 和 GPT 等模型的基础架构。

3. 什么是​BERT(Bidirectional Encoder Representations from Transformers)​

BERT 模型 主要利用了 ​Transformer 的 Encoder 部分,通过这种设计,BERT 能够将句子中的每个字(或词)转换为包含上下文信息的向量

  • 定义:BERT 是一种基于 Transformer 的预训练语言模型,由 Google 在 2018 年提出。
  • 核心特点
    • 双向编码:BERT 通过同时考虑上下文(左和右)来理解词语的语义。
    • ​a.预训练任务

      • 掩码语言模型(Masked Language Model, MLM):预测被掩码的词。
      • 下一句预测(Next Sentence Prediction, NSP):判断两个句子是否连续。
      • MLM 通过掩码策略让模型学习上下文信息。
      • NSP 通过判断句子关系让模型理解篇章结构。

  • 应用
    • 文本分类
    • 问答系统
    • 命名实体识别

 b.BERT 模型的核心结构

BERT 模型的核心结构包括以下几个主要组件:

​(1) Embedding 层

  • 作用:将输入的文本数据(如单词或字)转换为向量表示。通过 ​Token EmbeddingsSegment Embeddings 和 ​Position Embeddings 的组合,能够将输入文本转换为包含语义、句子关系和位置信息的向量表示。这种设计使得 BERT 在问答系统、文本匹配和自然语言推理等任务中表现出色
  • 组成
    • Token Embedding:将每个词转换为固定维度的向量。
    • Position Embedding:为每个词添加位置信息,解决 Transformer 无法直接处理序列顺序的问题。
    • Segment Embedding:区分不同句子(如句子 A 和句子 B),用于处理句子对任务。
  • 输出:将上述三种嵌入(都转换为比如说768维的)相加,得到最终的输入向量。

[CLS]

图中的​**dog** 和 ​**[CLS]** 都是 ​Token。以下是关于 ​Token 和 ​**[CLS]** 的原理和作用的详细解释:

[CLS]是 BERT 模型中的一个特殊 Token,用于聚合整个序列的全局信息,常用于分类任务和表示整个序列。


1. 什么是 Token?

  • Token 是 BERT 模型对输入文本进行分割后的最小单位。它可以是单词、符号或子词(subword)。

  • 示例

    • 单词 dog 是一个 Token。

    • 特殊符号 [CLS] 和 [SEP] 也是 Token。

  • 作用:Token 是 BERT 模型处理文本的基本单位,每个 Token 都会被转换为对应的向量表示(Token Embedding)。


2. [CLS] 的原理和作用

​**(1) 什么是 [CLS]?**

  • ​**[CLS]** 是 BERT 模型中的一个 ​特殊 Token,全称为 ​Classification Token

  • 位置:通常放在输入序列的开头。

​**(2) [CLS] 的原理**

  • 全局信息聚合

    • 在 BERT 模型中,[CLS] 会通过多层 Transformer Encoder 的处理,逐步聚合整个输入序列的上下文信息。

    • 由于 [CLS] 位于序列的开头,它在自注意力机制中可以与序列中的所有 Token 进行交互,从而捕捉全局信息。

  • 输出向量

    • 在模型的最后一层,[CLS] 对应的输出向量会被用作整个序列的表示。

​**(3) [CLS] 的作用**

  • 分类任务

    • 在文本分类任务中,[CLS] 的输出向量会被输入到一个分类器中,用于预测类别。

    • 例如,在情感分析任务中,[CLS] 的输出向量可以用于判断文本的情感是正面还是负面。

  • 表示整个序列

    • [CLS] 的输出向量可以看作是对整个输入序列的汇总表示,常用于需要全局信息的任务(如文本分类、问答系统等)。

  • 其他任务

    • 在句子对任务(如文本匹配、自然语言推理)中,[CLS] 的输出向量也可以用于判断两个句子之间的关系。

​(2) BERT Layers(BERT 层)

  • 组成:每个 BERT 层包含两个核心模块:
    • Multi-Head Attention(多头注意力机制)​
      • 通过多个注意力头并行计算,捕捉输入序列中不同位置的关系。
      • 每个注意力头独立计算注意力权重,最后将结果拼接并线性变换。
    • Feed Forward(前馈神经网络)​
      • 通过两层全连接网络(通常使用 ReLU 激活函数)进一步提取特征

    • Add & Norm(残差连接和层归一化)​
      • 残差连接将输入直接加到输出上,缓解梯度消失问题。
      • 层归一化对输出进行归一化,稳定训练过程。

  • 重复次数:BERT 模型通常包含多个 BERT 层(如 BERT-base 有 12 层,BERT-large 有 24 层)。

​(3) Pooler Output

1. BERT 输出 Pooler 的作用

BERT 的 ​Pooler 是用于从 BERT 模型的输出中提取 ​固定维度的向量表示,通常用于后续的分类任务或其他需要全局信息的任务。

  • 选择向量:从 BERT 的输出序列中选择一个或多个向量,生成固定维度的表示。
  • 提取全局信息:通过池化方法(如 只输出CLS平均池化最大池化 等),提取整个序列的全局语义信息。
  • 简化输出:将变长的序列输出转换为固定维度的向量,便于后续任务处理。

池化的主要目的是将 BERT 的变长输出序列转换为 ​固定维度的向量表示,并提取全局信息,以便后续任务(如分类、匹配等)能够高效处理。通过池化,模型可以更好地捕捉整个序列的语义信息,同时减少计算复杂度


Pooler 层 的核心作用就是 ​选择向量。它通过不同的池化方法从 BERT 的输出序列中提取一个 ​固定维度的向量,用于后续任务(如分类、匹配等)。


2. 池化方法的选择

​**(1) 只输出 [CLS]**

  • 原理:选择 [CLS] 的输出向量作为整个序列的表示。

  • 优点:简单高效,[CLS] 通过自注意力机制聚合了全局信息。

  • 适用场景:文本分类、情感分析等任务。

​**(2) 平均池化(Average Pooling)​**

  • 原理:对所有 Token 的输出向量取平均值。

  • 优点:考虑了所有 Token 的信息,适合长文本。

  • 适用场景:文本匹配、句子相似度计算等任务。

​**(3) 最大池化(Max Pooling)​**

  • 原理:对所有 Token 的输出向量取最大值(按维度)。

  • 优点:能够捕捉最显著的特征。

  • 适用场景:需要突出重要信息的任务。

​**(4) 其他池化方法**

  • 原理:可以自定义池化方式,如加权平均、注意力池化等。

  • 优点:灵活性高,适合特定场景。

  • 适用场景:复杂任务或特定需求。

(4) Classifier(分类器)​

  • 作用:基于 Pooler Output 进行分类决策。
  • 实现方式
    • 通过一个全连接层将 Pooler Output 映射到类别空间。
    • 使用 softmax 函数计算每个类别的概率。
  • 应用:用于文本分类、情感分析、问答系统等任务。


​c.BERT 模型的工作流程

  1. 输入处理
    • 输入文本被转换为嵌入向量,并添加位置和段落信息。
  2. 特征提取
    • 输入向量经过多层 BERT 层的处理,每一层通过多头注意力机制和前馈神经网络提取特征。
  3. 输出提取
    • 从最后一个 BERT 层中提取 [CLS] 标记对应的输出向量。
  4. 分类决策
    • 通过分类器对 Pooler Output 进行分类,得到最终结果。


---transformer,bert,gpt的关系 

图片中间部分展示了 Transformer 的基本结构,包括 ​Encoder 和 ​Decoder 模块:

Encoder(BERT 使用)​

  1. Input Embedding

    • 将输入文本转换为向量表示。

  2. Positional Encoding

    • 添加位置信息,解决 Transformer 无法直接处理序列顺序的问题。

  3. Multi-Head Attention

    • 多头注意力机制,捕捉输入序列中不同位置的关系。

  4. Add & Norm

    • 残差连接和层归一化,稳定训练过程。

    • 引入原因

解决梯度消失问题

在深层神经网络中,梯度可能会随着层数的增加而逐渐消失,导致模型难以训练。

残差连接​(Add)通过将输入直接加到输出上,使得梯度可以直接传递到浅层,缓解了梯度消失问题。

稳定训练过程

层归一化​(Norm)通过对每一层的输出进行归一化,使得输入数据的分布更加稳定,从而加速训练并提高模型的收敛性。

防止过拟合

残差连接可以看作是一种正则化手段,它允许模型保留更多的原始信息,从而减少过拟合的风险。

信息传递更高效

残差连接使得模型能够更高效地传递信息,尤其是在深层网络中,可以避免信息丢失。

        ​具体实现

  • 残差连接:将输入 x 和输出 F(x) 相加,得到 x+F(x)。

  • 层归一化:对 x+F(x) 进行归一化,使其均值为 0,方差为 1。

  1. Feed Forward

    • 前馈神经网络,进一步提取特征。

                引入原因

  1. 增强非线性表达能力

    • Multi-Head Attention 模块主要用于捕捉序列中不同位置的关系,但其本质是线性变换。

    • Feed Forward 通过引入非线性激活函数(如 ReLU),增强了模型的非线性表达能力,使其能够学习更复杂的特征。

  2. 提取高层次特征

    • Feed Forward 模块可以看作是一个特征提取器,它将 Multi-Head Attention 的输出进一步映射到更高层次的特征空间,从而提升模型的性能。

  3. 独立处理每个位置的信息

    • Feed Forward 模块对序列中的每个位置独立处理,这使得模型能够更好地捕捉局部特征。

  4. 增加模型容量

    • Feed Forward 模块通过增加额外的参数,提高了模型的容量,使其能够处理更复杂的任务。

具体实现

  • Feed Forward 模块通常由两层全连接网络组成,中间使用 ReLU 激活函数:FFN(x)=max(0,xW1​+b1​)W2​+b2​其中,W1​,W2​ 是权重矩阵,b1​,b2​ 是偏置项。

Decoder(GPT-2 使用)​

  1. Masked Multi-Head Attention

    • 带掩码的多头注意力机制,确保解码时只能看到当前位置之前的信息。

  2. Multi-Head Attention

    • 与 Encoder 的输出进行交互,获取上下文信息。

  3. Add & Norm 和 ​Feed Forward

    • 与 Encoder 类似,用于特征提取和稳定训练。


4. ​什么是GPT(Generative Pre-trained Transformer)​

  • 定义:GPT 是一种基于 Transformer 的生成式预训练语言模型,由 OpenAI 提出。
  • 核心特点
    • 单向解码:GPT 通过从左到右的方式生成文本,适合生成任务。
    • 预训练任务:通过预测下一个词来学习语言模型。
  • 版本
    • GPT-1:初始版本,基于 Transformer 解码器。
    • GPT-2:更大规模的模型,能够生成高质量文本。
    • GPT-3:目前最大规模的版本,具有极强的生成能力。
  • 应用
    • 文本生成
    • 对话系统
    • 代码生成
    • 等等。


5. ​NLP 与 Transformer、BERT、GPT 的关系

  • NLP 是一个广泛的领域,涵盖了所有与语言相关的任务和技术。
  • Transformer 是 NLP 中的一种革命性神经网络架构,为现代 NLP 模型提供了基础。
  • BERT 和 ​GPT 是基于 Transformer 的具体模型,分别代表了双向编码和单向解码的两种主要范式。
    • BERT 更适合理解任务(如分类、问答)。
    • GPT 更适合生成任务(如文本生成、对话)。

 ​总结

  • NLP 是自然语言处理的领域,涵盖了各种语言任务。
  • Transformer 是 NLP 中的一种神经网络架构,是 BERT 和 GPT 的基础。
  • BERT 是基于 Transformer 的双向编码模型,适合理解任务。
  • GPT 是基于 Transformer 的单向解码模型,适合生成任务。

NLP和计算机视觉CV一样,是人工智能中一片很大的领域,开始有RNN、LNTM,

  • RNN(循环神经网络)​:适合处理序列数据,但存在梯度消失和计算效率低的问题。
  • LSTM(长短期记忆网络)​:改进的 RNN,能够捕捉长距离依赖关系。

后边transformer的问世,引入自注意力机制,在NLP领域打出一片天地,比如现在的bert、deepseek,chatgpt都是基于transformer。

二、NLP输入——我们是怎么把一句话传给模型的?

简而言之就是,首先会经过分词器,将他们分为一块块(token),这一块一块我们可以用整数索引表示,也可以用one-hot硬编(用的少),之后每一个块(每一个token)经过一个词嵌入层,变为一个低位向量(比如798维度)。

之后开始后续处理,如果是采用transformer那就再传继续入自注意力机制等...

比如这个是onehot再经过词嵌入变为一个768维的向量

1. ​NLP 输入的基本概念

  • NLP 输入 是指模型接收的原始数据,通常是文本形式(如句子、段落或文档)。
  • 在图片中,输入表示为 ​N,由多个词或元素组成(如 "我"、"爱"、"你")。
  • 每个词或元素会经过模型处理,最终输出一个值或表示。

2. ​NLP 输入的具体形式

  • 原始文本:输入的最初形式,如句子 "我爱你"。
  • 分词结果:将原始文本分割为独立的词或子词(如 ["我", "爱", "你"])。
  • 数值化表示:将分词结果转换为数值形式,以便模型进行计算。常见的数值化表示包括:
    • one-hot 编码:将每个词表示为高维稀疏向量(如 "我" → [1, 0, 0])。
    • 整数索引:将每个词映射为词汇表中的唯一索引(如 "我" → 100)。
    • 词嵌入:将每个词转换为低维稠密向量(如 "我" → [0.1, 0.3, ..., 0.7])。

3. ​图片中的输入处理

  • 图片展示了 NLP 模型的输入处理流程:
    1. 输入文本:如 "我爱你"。
    2. 分词结果:将文本分割为词(如 ["我", "爱", "你"])。
    3. 数值化表示:每个词被转换为数值形式(可能是 one-hot 编码->独热编码对每个字编 或  整数索引->由大模型分词器分出来的)。
    4. 模型处理:数值化表示被输入到模型中进行计算。
    5. 输出结果:每个词对应一个输出值(如词性标注 "代词"、"动词")。

4. ​NLP 输入的典型应用

  • 词性标注:为每个词标注词性(如 "我" → 代词,"爱" → 动词)。
  • 命名实体识别:识别文本中的实体(如人名、地名)。
  • 情感分析:分析文本的情感倾向(如正面、负面)。
  • 机器翻译:将一种语言的文本翻译为另一种语言。

5. ​NLP 输入的关键技术

  • 分词器(Tokenizer)​:将文本分割为词或子词。
  • 词汇表(Vocabulary)​:存储所有可能的词及其索引。
  • 嵌入层(Embedding Layer)​:将词索引转换为低维稠密向量。 
  • Word Embedding 是一个 ​概念,描述的是将词语转换为低维稠密向量的过程。
  • Embedding Layer 是一个 ​具体实现,是神经网络中用于实现词嵌入的层。

词嵌入

词嵌入(Word Embedding)​ 是自然语言处理(NLP)中的一种核心技术,它将词语(或 token)转换为低维稠密向量,从而捕捉词语的语义和语法信息。以下是词嵌入的 ​主要作用 和 ​应用场景


经过词嵌入之后,语义相似的词语的向量编码会靠得很近

  • 词嵌入将词语映射到向量空间,使得语义相似的词语靠得近,语义不同的词语离得远。
  • 图中 "你""我""他" 靠得近,"猫""狗" 靠得近,"树""花" 靠得近,体现了这一特性。

作用:

  1. 将词语转换为向量:词嵌入将词语(如“猫”、“狗”)转换为计算机可以处理的数值向量。方便后续处理。
  2. 捕捉语义关系:通过向量空间中的距离和方向,表示词语之间的关系。例如:
    • 语义相似的词语(如“猫”和“狗”)在向量空间中靠得近。
    • 语义不同的词语(如“猫”和“树”)在向量空间中离得远。
  3. 支持自然语言处理:为文本分类、机器翻译等任务提供高质量的语义表示。

一句话总结:词嵌入将词语转换为向量,捕捉语义关系,帮助计算机理解和处理自然语言。


6. ​总结

  • NLP 输入是模型接收的原始文本,经过分词和数值化处理后,转换为数值形式(如 one-hot 编码、整数索引或词嵌入)。

三、NLP输出

NLP 输出的三种方式​

  1. 每个向量有标签:为输入序列中的每个 token 分配一个标签(如词性标注)。
  2. 整个序列有标签:为整个输入序列分配一个标签(如文本分类)。
  3. 模型决定标签数量:模型自行决定输出标签的数量(如文本生成)。

一句话总结:NLP 输出可以是每个 token、整个序列的标签,或由模型动态决定标签数量。

四、RNN和LSTM

人性化版介绍

比如现在我们要分析句子里每个词的词性

Can you can a can as a cancer can a can?

很明显这里的每个can的词性都不一样,而且我们还是要根据前后关系来去判断,那我们怎么让模型知道这个前后关系呢?显然只是前述的输入是不能做到的

所以

RNN就会引入一个“传家宝”(记忆单元),按照串行的方式,每一次处理完一个词汇后,都传一些前面的信息(也是一个向量)过去,和下一个字的经过词嵌入层处理得到的向量相加再处理,再传再相加,这样一个字一个字的处理,如图

但是!这个传家宝传的东西我们不能确定是我们想要的东西

比如这段话,想问谁与xxx结下不解之缘,最后传传传越传越乱,一代一代传,败家子孙太多了哈哈哈哈哈哈哈哈哈哈,最后传的不知道是啥,没用。

 

为了防止“乱传现象”,我们锁一锁,让一些字你别传东西了,不传有用的还捣乱,给它“封口”!!!这就是长短期记忆的作用

但是说这么多,我们可以知道,这样串行的一个字处理完再传再处理下一个字,真的效率很低

所以我们都喜欢并行->这就是自注意力机制了

下面专业一点介绍RNN和LSTM 

专业版介绍

RNN

RNN(循环神经网络)​ 是一种专门处理序列数据的神经网络,通过循环结构捕捉序列中的依赖关系。以下是详细介绍:


1. ​RNN 的核心思想

  • 序列数据:RNN 适用于处理时间序列、文本序列等具有前后依赖关系的数据。

  • 循环结构:RNN 通过隐藏状态(Hidden State)在时间步之间传递信息,捕捉序列中的上下文关系。


2. ​RNN 的结构

  • 输入:序列数据(如文本、时间序列)。

  • 隐藏状态:在每个时间步更新,保存历史信息。

  • 输出:每个时间步可以输出一个结果(如词性标注)或整个序列输出一个结果(如文本分类)。


3. ​RNN 的优缺点

  • 优点

    • 适合处理变长序列。

    • 能够捕捉序列中的依赖关系。

  • 缺点

    • 梯度消失或梯度爆炸:RNN 在训练过程中,梯度通过时间步反向传播时,可能会出现梯度消失(Gradient Vanishing)或梯度爆炸(Gradient Exploding)。

    • 计算效率低:无法并行计算,训练速度慢。


4. ​RNN 的变体

  • LSTM(长短期记忆网络)​:通过引入门控机制,缓解梯度消失问题。

  • GRU(门控循环单元)​:简化版的 LSTM,计算效率更高。


5. ​RNN 的应用

  • 语言建模:预测下一个词的概率。

  • 机器翻译:将一种语言的序列翻译为另一种语言。

  • 语音识别:将语音信号转换为文本。


6. ​RNN 与 Transformer 的对比

  • RNN:适合短序列,但无法并行计算,逐渐被 Transformer 取代。

  • Transformer:通过自注意力机制捕捉长距离依赖,计算效率高,成为现代 NLP 的主流架构。


7. ​总结

  • RNN 是处理序列数据的经典模型,但存在梯度消失和计算效率低的问题。

  • 随着 Transformer 的兴起,RNN 的应用逐渐减少,但在某些任务中仍有价值。

LSTM

LSTM(长短期记忆网络,Long Short-Term Memory)​ 是一种改进的循环神经网络(RNN),专门设计用来解决传统 RNN 的 ​梯度消失问题 和 ​长距离依赖问题。以下是详细介绍:


1. ​LSTM 的核心思想

  • 问题背景:传统 RNN 在处理长序列时,容易丢失早期时间步的信息(梯度消失问题),导致无法捕捉长距离依赖。

  • 解决方案:LSTM 通过引入 ​门控机制,能够选择性地记住或忘记信息,从而更好地捕捉长距离依赖。


2. ​LSTM 的结构

LSTM 的核心是 ​记忆单元(Memory Cell)​,由以下三个门控机制组成:

  • 输入门(Input Gate)​:决定哪些新信息需要存储到记忆单元中。

  • 遗忘门(Forget Gate)​:决定哪些旧信息需要从记忆单元中丢弃。

  • 输出门(Output Gate)​:决定哪些信息需要输出到下一个时间步。


3. ​LSTM 的工作流程

  1. 遗忘门:决定丢弃哪些旧信息。

  2. 输入门:决定存储哪些新信息。

  3. 更新记忆单元:结合遗忘门和输入门的结果,更新记忆单元。

  4. 输出门:决定输出哪些信息。


4. ​LSTM 的优缺点

  • 优点

    • 能够捕捉长距离依赖。

    • 缓解了梯度消失问题。

  • 缺点

    • 计算复杂度较高,训练速度较慢。

    • 逐渐被 Transformer 取代。


5. ​LSTM 的应用

  • 语言建模:预测下一个词的概率。

  • 机器翻译:将一种语言的序列翻译为另一种语言。

  • 语音识别:将语音信号转换为文本。


6. ​LSTM 与 GRU 的对比

  • LSTM:具有三个门控机制,性能更强,但计算复杂度较高。

  • GRU(门控循环单元)​:简化版的 LSTM,只有两个门控机制,计算效率更高,但性能略低于 LSTM。


7. ​总结

  • LSTM 是一种改进的 RNN,通过门控机制解决了梯度消失和长距离依赖问题。

  • 虽然 LSTM 在现代 NLP 中逐渐被 Transformer 取代,但在某些任务中仍有应用价值。


这么看,并行的家伙,自注意力机制就要来了,它可以同时统揽全局,不仅输入字,还能把前后关系同时一起处理

五、自注意力机制 Self-attention

它呢,本质就是一个特征转换器,把经过嵌入层的每个token对应的向量通过这个黑盒子(自注意力机制)就能得到一个“通览过全局”的新的向量,每个token对应的向量的计算也不会受前一个后一个的影响,都是可以同时并行进行

自注意力机制(Self-Attention Mechanism)​ 是 Transformer 架构的核心组件,它通过计算序列中每个 token 与其他所有 token 之间的关系,生成包含全局上下文信息的新向量。


1. ​自注意力机制的核心思想

  • 目标:为每个 token 生成一个新的向量,这个向量能够捕捉序列中所有 token 的上下文信息。
  • 特点
    • 并行计算:所有 token 的向量可以同时处理。
    • 全局视野:每个 token 的向量能够关注序列中的其他所有 token。

2. ​自注意力机制的计算步骤

A.人性化讲解

 自注意力机制的计算可以分为以下几步:

首先,什么是注意力?->  我应该多么 关注某件事

例如这个就是,a1这个字对自己以及其他的关注程度哈

  • α₁,₁, α₁,₂ 等 表示的是 ​a₁ 对其他字(如 a¹, a²,a³, a⁴)的注意力分布,也称为注意力权重参数系数

之后我们引入三个矩阵

(和字对应向量同维度的方阵,由于我们前面一直假设的字对应的向量是768维度,那现在就是768*768的方阵)

(1)WQ -> 查询(Query)

(用于查询本字对其他字的关注度,相当于一个扫码器,去扫别的字的值二维码WK,就会得到关注度)

每个字都有自己的扫码器,比如a1字的扫码器就是𝒒𝟏 = 𝒂𝟏 * 𝑊𝑞,也依旧是1*768的这么一个向量)

(2)WK -> 键(Key)

这就是每个字对应的二维码了,拿别个字的q去扫我这个字的二维码就能得到对我这个字的关注度

二维码咋来的呢?比如a1字的二维码,就是𝒌1 = 𝒂1 *  𝑊𝑘,也依旧是1*768的这么一个向量)

二维码也有了,扫码器也有了,咋知道注意值呢?

比如说a1字对于a2的关注值就是:𝛼1,2 = 𝒒 𝟏 ∙ 𝒌 𝟐

a1拿它的扫码器q1去扫a2的二维码k2,本质就是一个1*768和768*1的向量相乘得到了一个数,这个数就是关注度啦

由于向量乘法算出来的都是数,我们再softmax一下就成和为1的概率了,是把某个字对其他所有字的注意力之和变成1

 (3)WV -> 值(Value)

得到一个字对其他字的注意力之后,就要用道Wv这个768*768的方阵了,那它和a1、a2等初始向量得到1*768的v1、v2等向量,最后拿v1这种的都是1*768向量和a1'等乘(相当于每一个元素乘a1'),之后呢对应元素相加得到1*768的向量b1

清晰明了一点:

1. ​v1 的维度

  • v1 是一个 ​1x768 的向量,表示值向量(Value Vector)。

  • 例如:v1 = [v1_1, v1_2, ..., v1_768]


2. ​a1' 的作用

  • a1' 是一个 ​标量​(1x1),表示注意力权重(Attention Weight)。

  • 例如:a1' = 0.1


3. ​v1 与 a1' 的乘法

  • 逐元素相乘:将 v1 的每个元素乘以 a1',得到一个新的 1x768 向量。

  • 例如:v1′=a1′⋅v1=[0.1⋅v11​,0.1⋅v12​,…,0.1⋅v1768​]


4. ​b1 的计算

  • 对应元素相加:将 v1', v2', v3', v4' 等向量的对应元素相加,得到最终的 1x768 向量 b1。

  • 例如:b1=v1′+v2′+v3′+v4′具体到每个元素:b1i​=v1i′​+v2i′​+v3i′​+v4i′​

  • b2同理

这个b1就是我们a1经过词嵌入得到的 1*768向量 经过升级进化可以“统揽全局”的新向量咯!!!

其他字a2,a3...一个道理


B.本质就是矩阵运算
 

 


 C.Deepseek专业版讲解

​**(1) 输入表示**

  • 输入:每个 token 的向量表示 xi​(如经过嵌入层后的 768 维向量)。

  • 序列:X=[x1​,x2​,…,xn​]。

这就是一个n*768了,但是一般我们会规定,比如说一句话不能超过128个字

那就是128*768,每个字对应一个768么

​**(2) 线性变换**

  • 通过可学习的权重矩阵 WQ​、WK​、WV​,将输入向量转换为查询(Query)、键(Key)和值(Value)向量:

    • 查询:Q=X*WQ​

    • 键:K=X*WK​

    • 值:V=X*WV​

​**(3) 计算注意力分数**

  • 通过点积计算查询和键之间的相似度,得到注意力分数矩阵:A=dk​​QK⊤​其中 dk​ 是键向量的维度,dk​​ 用于缩放,防止点积过大。

​**(4) 计算注意力权重**

  • 对注意力分数矩阵进行 softmax 操作,得到注意力权重矩阵:W=softmax(A)每个权重 wij​ 表示 token i 对 token j 的关注程度。

​**(5) 计算输出向量**

  • 通过注意力权重对值向量进行加权求和,得到每个 token 的新向量:O=WV输出 O 是包含全局上下文信息的新向量序列。

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

多头自注意力机制的核心思想确实是将 Q(Query)、K(Key)、V(Value)三个矩阵拆开计算,最后将结果拼接起来

  • 目的:捕捉不同子空间中的语义信息。
  • 实现
    • 将查询、键和值向量分割为多个头(如 8 头),在每个头上分别计算自注意力。
    • 将多个头的输出拼接起来,通过线性变换得到最终输出。
  • 作用

  • 1. ​捕捉多方面的关联

  • 单一注意力头的局限性:单个注意力头只能捕捉输入序列中一种特定类型的关联(如局部的、全局的或特定模式的)。

  • 多头机制的优势:通过引入多个注意力头,每个头可以独立地关注输入序列中的不同方面(如不同位置的局部特征、全局依赖关系等),从而更全面地捕捉序列中的复杂信息。

  • 2. ​提高模型的表达能力

  • 并行计算:多个注意力头可以并行计算,每个头学习不同的特征表示。

  • 增强模型性能:通过将多个头的输出拼接或加权求和,模型能够更好地建模输入序列中的复杂关系,从而提高表达能力和性能。


4. ​自注意力机制的优势

  • 并行计算:所有 token 的向量可以同时处理,计算效率高。
  • 全局视野:每个 token 的向量能够关注序列中的其他所有 token,捕捉长距离依赖。
  • 灵活性:注意力权重是动态计算的,能够根据输入序列调整。

5. ​自注意力机制的应用

  • Transformer:自注意力机制是 Transformer 的核心组件。
  • BERT:通过双向自注意力机制捕捉上下文信息。
  • GPT:通过单向自注意力机制生成文本。

6. ​总结

  • 自注意力机制通过计算序列中每个 token 与其他所有 token 之间的关系,生成包含全局上下文信息的新向量。
  • 它是 Transformer 架构的核心,具有并行计算、全局视野和灵活性等优势。

7.问题

按照前面我们的计算,都是矩阵运算体现不出位置信息,比如图中,两个句子的意思不一样,但是其实对于计算来说都一样,你在第一行我在第二行的问题,无法传达这种因为字的位置差别导致句意有区别的信息。

那怎么办?我们一样还是加一个1*768的向量(表示位置的信息)给经过嵌入层的向量,这样这个加起来的向量不仅把字的信息也包含了,位置信息也有了

假设我们一句话最多512个位置,这样经过一个类似于“词嵌入”作用的全连接层,把每个字1*512的向量转换为一个1*768的向量(表示位置信息),最后加到一起

PS:

我是跟着李哥学的,想要购买课程的可以直接下一个cctalk然后搜索“李哥考研”,每次上一个二维码就被审核掉了。

都去支持支持支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值