逐渐更新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 Embeddings、Segment 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 模型的工作流程
- 输入处理:
- 输入文本被转换为嵌入向量,并添加位置和段落信息。
- 特征提取:
- 输入向量经过多层 BERT 层的处理,每一层通过多头注意力机制和前馈神经网络提取特征。
- 输出提取:
- 从最后一个 BERT 层中提取
[CLS]
标记对应的输出向量。
- 从最后一个 BERT 层中提取
- 分类决策:
- 通过分类器对 Pooler Output 进行分类,得到最终结果。
---transformer,bert,gpt的关系
图片中间部分展示了 Transformer 的基本结构,包括 Encoder 和 Decoder 模块:
Encoder(BERT 使用)
Input Embedding:
将输入文本转换为向量表示。
Positional Encoding:
添加位置信息,解决 Transformer 无法直接处理序列顺序的问题。
Multi-Head Attention:
多头注意力机制,捕捉输入序列中不同位置的关系。
Add & Norm:
残差连接和层归一化,稳定训练过程。
引入原因
解决梯度消失问题:
在深层神经网络中,梯度可能会随着层数的增加而逐渐消失,导致模型难以训练。
残差连接(Add)通过将输入直接加到输出上,使得梯度可以直接传递到浅层,缓解了梯度消失问题。
稳定训练过程:
层归一化(Norm)通过对每一层的输出进行归一化,使得输入数据的分布更加稳定,从而加速训练并提高模型的收敛性。
防止过拟合:
残差连接可以看作是一种正则化手段,它允许模型保留更多的原始信息,从而减少过拟合的风险。
信息传递更高效:
残差连接使得模型能够更高效地传递信息,尤其是在深层网络中,可以避免信息丢失。
具体实现
残差连接:将输入 x 和输出 F(x) 相加,得到 x+F(x)。
层归一化:对 x+F(x) 进行归一化,使其均值为 0,方差为 1。
Feed Forward:
前馈神经网络,进一步提取特征。
引入原因
增强非线性表达能力:
Multi-Head Attention 模块主要用于捕捉序列中不同位置的关系,但其本质是线性变换。
Feed Forward 通过引入非线性激活函数(如 ReLU),增强了模型的非线性表达能力,使其能够学习更复杂的特征。
提取高层次特征:
Feed Forward 模块可以看作是一个特征提取器,它将 Multi-Head Attention 的输出进一步映射到更高层次的特征空间,从而提升模型的性能。
独立处理每个位置的信息:
Feed Forward 模块对序列中的每个位置独立处理,这使得模型能够更好地捕捉局部特征。
增加模型容量:
Feed Forward 模块通过增加额外的参数,提高了模型的容量,使其能够处理更复杂的任务。
具体实现
Feed Forward 模块通常由两层全连接网络组成,中间使用 ReLU 激活函数:FFN(x)=max(0,xW1+b1)W2+b2其中,W1,W2 是权重矩阵,b1,b2 是偏置项。
Decoder(GPT-2 使用)
Masked Multi-Head Attention:
带掩码的多头注意力机制,确保解码时只能看到当前位置之前的信息。
Multi-Head Attention:
与 Encoder 的输出进行交互,获取上下文信息。
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]
)。
- one-hot 编码:将每个词表示为高维稀疏向量(如 "我" →
3. 图片中的输入处理
- 图片展示了 NLP 模型的输入处理流程:
- 输入文本:如 "我爱你"。
- 分词结果:将文本分割为词(如 ["我", "爱", "你"])。
- 数值化表示:每个词被转换为数值形式(可能是 one-hot 编码->独热编码对每个字编 或 整数索引->由大模型分词器分出来的)。
- 模型处理:数值化表示被输入到模型中进行计算。
- 输出结果:每个词对应一个输出值(如词性标注 "代词"、"动词")。
4. NLP 输入的典型应用
- 词性标注:为每个词标注词性(如 "我" → 代词,"爱" → 动词)。
- 命名实体识别:识别文本中的实体(如人名、地名)。
- 情感分析:分析文本的情感倾向(如正面、负面)。
- 机器翻译:将一种语言的文本翻译为另一种语言。
5. NLP 输入的关键技术
- 分词器(Tokenizer):将文本分割为词或子词。
- 词汇表(Vocabulary):存储所有可能的词及其索引。
- 嵌入层(Embedding Layer):将词索引转换为低维稠密向量。
- Word Embedding 是一个 概念,描述的是将词语转换为低维稠密向量的过程。
- Embedding Layer 是一个 具体实现,是神经网络中用于实现词嵌入的层。
词嵌入
词嵌入(Word Embedding) 是自然语言处理(NLP)中的一种核心技术,它将词语(或 token)转换为低维稠密向量,从而捕捉词语的语义和语法信息。以下是词嵌入的 主要作用 和 应用场景:
经过词嵌入之后,语义相似的词语的向量编码会靠得很近。
- 词嵌入将词语映射到向量空间,使得语义相似的词语靠得近,语义不同的词语离得远。
- 图中
"你"
、"我"
、"他"
靠得近,"猫"
、"狗"
靠得近,"树"
、"花"
靠得近,体现了这一特性。作用:
- 将词语转换为向量:词嵌入将词语(如“猫”、“狗”)转换为计算机可以处理的数值向量。方便后续处理。
- 捕捉语义关系:通过向量空间中的距离和方向,表示词语之间的关系。例如:
- 语义相似的词语(如“猫”和“狗”)在向量空间中靠得近。
- 语义不同的词语(如“猫”和“树”)在向量空间中离得远。
- 支持自然语言处理:为文本分类、机器翻译等任务提供高质量的语义表示。
一句话总结:词嵌入将词语转换为向量,捕捉语义关系,帮助计算机理解和处理自然语言。
6. 总结
- NLP 输入是模型接收的原始文本,经过分词和数值化处理后,转换为数值形式(如 one-hot 编码、整数索引或词嵌入)。
三、NLP输出
NLP 输出的三种方式:
- 每个向量有标签:为输入序列中的每个 token 分配一个标签(如词性标注)。
- 整个序列有标签:为整个输入序列分配一个标签(如文本分类)。
- 模型决定标签数量:模型自行决定输出标签的数量(如文本生成)。
一句话总结: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 的工作流程
-
遗忘门:决定丢弃哪些旧信息。
-
输入门:决定存储哪些新信息。
-
更新记忆单元:结合遗忘门和输入门的结果,更新记忆单元。
-
输出门:决定输出哪些信息。
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=dkQK⊤其中 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然后搜索“李哥考研”,每次上一个二维码就被审核掉了。
都去支持支持支持!!!