自注意力机制(Self-Attention Mechanism)是深度学习中的一种重要技术,广泛应用于自然语言处理、计算机视觉等多个领域。
引入
如何用数据表示文字
一、编码为向量(one-hot编码)
缺点:
1, 维度太长。
2,体现不出关系,表现不了含义,如猫和狗两个字应该离得近,我你他应该离得近
二、让模型自己学
仍然是one-hot,但是模型来编码
常见输入:
每个字对应一个编码
常见输出:
- 每个词都有输出一个值:如输出每个字的词性(代词、动词)
- 所有词输出一个值:如一句话的情感
- 输入输出长度不一定:如翻译任务
前后关系的考虑
假如有一个词性识别任务

序列输入必须考虑前后
RNN 循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是一种专门用于处理序列数据的神经网络
RNN 的核心特点是其具有循环连接的结构,即网络中的神经元不仅可以接收当前时刻的输入,还能接收上一时刻的输出作为额外输入。这使得 RNN 能够对序列中的信息进行记忆和利用,从而处理具有顺序依赖关系的数据。
应用领域
- 自然语言处理:在机器翻译中,RNN 可以将源语言句子中的单词序列逐个输入,学习到句子的语义表示,然后生成目标语言的单词序列;在文本生成任务中,根据给定的上下文或主题,RNN 可以逐个生成单词,形成连贯的文本。
- 语音识别:将语音信号的特征序列作为输入,RNN 可以学习到语音特征与文字之间的映射关系,从而将语音转换为文字。
- 时间序列预测:对于如股票价格预测、天气预报等任务,RNN 可以根据历史时间序列数据中的趋势和模式,预测未来的数值或趋势。
优缺点
- 优点:能够有效处理序列数据中的顺序信息和依赖关系,在处理具有时间序列特性或顺序结构的数据时具有天然的优势;可以根据输入序列的长度动态地进行计算,不需要对输入进行固定长度的截断或填充。
- 缺点:随着序列长度的增加,RNN 会面临梯度消失或梯度爆炸问题,使得模型难以学习到长序列中的依赖关系;计算效率相对较低,在处理长序列时需要依次处理每个时间步,无法像卷积神经网络那样进行高度并行化计算。

长短期记忆LSTM
为了解决简单 RNN 的长序列依赖问题,LSTM 引入了记忆单元和门控机制,包括输入门、遗忘门和输出门。通过这些门控机制,LSTM 能够有选择性地更新和遗忘记忆单元中的信息,从而更好地捕捉长序列中的依赖关系。
自注意力机制
在深度学习处理序列数据时,传统的循环神经网络(RNN)和卷积神经网络(CNN)在捕捉长序列依赖关系等方面存在一定的局限性。自注意力机制应运而生,旨在更高效地捕捉序列数据中的长期依赖关系,能让模型在处理序列中的某个位置时,直接关注到序列中其他所有位置的信息,而无需像 RNN 那样顺序地处理每个位置,也无需像 CNN 那样通过多层卷积来逐步扩大感受野。
将输入序列中的每个元素映射为对应的向量表示,通常会分别映射为查询向量(Query)、键向量(Key)和值向量(Value)。比如在自然语言处理中,一个单词经过嵌入层等操作(三个全连接)后得到这三个不同的向量表示。
自己的q与其他元素k点乘,得到对于其他元素的注意力(包括对自己),每个注意力都经过Soft-max(使得相加为1)得到
,再和v相乘相加得到b
每一个字的特征提取, 都可以同时进行,因为它不需要等待前一个完成,完全并行!
整体流程:
位置信息
加上位置信息:
自己的编码和位置编码直接相加
BERT
BERT是一个特征提取器(预训练语言模型),在大规模的文本上进行无监督的预训练
BERT 的核心架构是基于 Transformer 的编码器。Transformer 采用自注意力机制来高效处理序列数据,能并行计算且有效捕捉长序列中的依赖关系。BERT 通常由多个堆叠的 Transformer 编码器层组成,每个编码器层包含多头注意力机制和前馈神经网络等组件。
BERT的两个预训练任务
1、MLM 掩码语言模型(Masked Language Model)
把文字的一部分遮住,训练模型猜词语
随机将输入文本中的一些词用特殊的掩码标记 [MASK] 替换,模型的任务是根据上下文预测被掩码的词。例如,对于句子 “The dog is [MASK] in the park”,模型需要预测出 [MASK] 位置可能是 “running”“playing” 等词。通过这种方式,BERT 能够学习到文本中的语言模式和语义关系,捕捉词与词之间的依赖。
2、NSP 下一句预测(Next Sentence Prediction)
给定一对句子,模型需要预测第二句是否是第一句的下一句。这有助于模型理解句子之间的逻辑关系,如因果、并列、转折等。例如,输入 “我今天去了公园。” 和 “我在公园里看到了很多花。”,模型应预测为正例;而输入 “我今天去了公园。” 和 “明天会下雨。”,模型应预测为负例。
Bert的输入embedding
Segment Embedding:表示词语在哪个句子
Bert的输出:最常见的是只输出CLS这一个输出
总结
一、字的表示
二、为了知道上下文,引入了 RNN 和 LSTM。
三、上面的模型不能并行,速度慢,只能单向(也有双向模型),所以引入 Self - attention。
四、Self - attention,每一个字加上位置embedding,相加为 token之后,通过 Q、K、V 来交互,Q 是 query,K 是 key,V 是 value。Q 和 K 算出注意力,V 按照注意力相加为输出。
五、BERT 是一个编码器,目的是把一句话编码为特征。它采用自监督预训练获得特征提取能力。之后在下游任务可以提取特征后,让特征去做分类任务。
六、BERT 的结构三部分:
- Embedding 层。
- Self - attention 层让特征交互。
- Pooler 输出。