Transformer to Bert

一、本节课提到的相关概念

BERT(Bidirectional Encoder Representations from Transformers)是由谷歌AI团队于2018年提出的一种预训练语言模型。BERT的设计目标是通过双向编码器表示来提高自然语言处理任务的表现。BERT 的关键特性是其双向训练方法,使其能够同时考虑上下文信息,从而生成更精确的词表示。
下游任务(Downstream Tasks)指的是在预训练模型(如BERT、GPT等)上进行微调(Fine-tuning)或应用的具体任务。这些任务通常是应用于特定领域或特定应用场景中的任务,利用预训练模型所学到的知识来完成实际的应用需求。
边缘计算(Edge Computing)是一种分布式计算范式,它将计算能力和数据存储部署在靠近数据源或用户的“边缘”设备上,而不是集中在数据中心或云计算中心。这种方法可以显著减少数据传输的延迟、带宽使用和能耗,提高计算效率和响应速度。
ELMo(Embeddings from Language Models),由 Allen Institute for AI 提出,是一种基于双向语言模型(Bidirectional Language Model)的词嵌入技术。ELMo 的目标是通过考虑词在不同上下文中的多义性,生成上下文敏感的词嵌入。
GPT(Generative Pre-trained Transformer)是由 OpenAI 提出的预训练生成式模型,基于 Transformer 架构。GPT 的目标是通过大量无监督文本数据的预训练,生成高质量的文本,并通过微调适应各种下游任务。
饱和区间(Saturation Region)通常是指神经网络中的激活函数输出达到其极限值时,导致神经元的梯度接近于零的区域。这种现象常发生在某些非线性激活函数,如 sigmoid 或 tanh 函数中。

二、Attention

1、什么是Attention?

在深度学习和神经网络领域,注意力机制(Attention Mechanism)是一种模仿人类注意力机制的方法,用于增强模型对重要信息的关注能力。它最初在机器翻译任务中引入,后来被广泛应用于各种自然语言处理(NLP)任务,以及计算机视觉等领域。
在这里插入图片描述
这张图片形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,对图片所示的场景,红色区域表明视觉系统更关注的目标。人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。

基本概念

注意力机制的核心思想是通过计算输入序列中各元素的重要性权重,来聚焦于最相关的部分,从而提升模型的性能。简单来说,注意力机制通过对输入数据进行加权,允许模型选择性地关注输入的某些部分。

2、Attention工作原理

以Seq2Seq模型为例,注意力机制的工作流程如下:

(1)编码器(Encoder):处理输入序列,生成一系列隐状态(hidden states)。

(2)解码器(Decoder):生成输出序列,每一步生成一个词。

(3)注意力权重计算:在生成每个输出词时,解码器会计算当前时间步的隐状态与所有编码器隐状态的相似度(通常使用点积、加法、或乘法来计算相似度),得到一组权重。

(4)上下文向量:根据注意力权重,对编码器隐状态进行加权求和,得到一个上下文向量(context vector),该向量代表当前时间步最相关的输入信息。

(5)生成输出:解码器使用上下文向量和当前隐状态生成输出词。

3、用到的数学公式

假设输入序列长度为 𝑇,隐藏状态为 h 1 , h 2 , … , h T 。 h _ { 1 } , h _ { 2 } , \ldots , h _ { T } 。 h1,h2,,hT对于解码器的每个时间步 𝑡,注意力权重 𝛼𝑡,𝑖 和上下文向量 𝑐𝑡计算如下:
(1)相似度计算(得分函数)
e t , i = s c o r e ( s t , h i ) e _ { t , i } = s c o r e ( s _ { t } , h _ { i } ) et,i=score(st,hi)常用的得分函数包括:

  • 点积(Dot Product): s c o r e ( s t , h i ) = s t T h i s c o r e ( s _ { t } , h _ { i } ) = s _ { t } ^ { T } h _ { i } score(st,hi)=stThi
  • 双线性(Bilinear): s c o r e ( s t , h i ) = s t T W h i s c o r e ( s _ { t } , h _ { i } ) = s _ { t } ^ { T } W h _ { i } score(st,hi)=stTWhi
  • 加法(Additive): s c o r e ( s t , h i ) = v T tan ⁡ h ( W 1 s t + W 2 h i ) s c o r e ( s _ { t } , h _ { i } ) = v ^ { T } \tan h ( W _ { 1 } s _ { t } + W _ { 2 } h _ { i } ) score(st,hi)=vTtanh(W1st+W2hi)

(2)权重计算
α t , i = e x p ( e t , i ) ∑ k = 1 T e x p ( e t , k ) \alpha _ { t , i } = \frac { e x p ( e _ { t , i } ) } { \sum _ { k = 1 } ^ { T } e x p ( e _ { t , k } ) } αt,i=k=1Texp(et,k)exp(et,i)
(3)上下文向量
c t = ∑ i = 1 T α t , i h i c _ { t } = \sum _ { i = 1 } ^ { T } \alpha _ { t , i } h _ { i } ct=i=1Tαt,ihi
Transformer 模型是完全基于注意力机制的模型,摒弃了传统的 RNN 或 CNN 结构。它引入了多头自注意力(Multi-head Self-Attention)机制,使得模型能够并行处理序列数据,提高了训练效率和效果。
在深入了解Attention注意力机制之前,我看了3blue1brown对Attention的讲解:直观解释注意力机制,Transformer的核心
也能够加深对Embedding的理解
在这里插入图片描述

三、Transformer的核心框架

The Transformer-model architecture
这张图展示了Transformer 模型的核心结构,由Encoder编码器(左侧)和Decoder解码器(右侧)组成。每个编码器和解码器层都堆叠了 𝑁次(图中标注为 𝑁×)。
接下来将详细介绍框架图中的每一步是如何处理数据的:

1、Transformer核心架构

编码器(Encoder)

  1. 输入嵌入层(Input Embedding)
    输入数据首先通过嵌入层,将每个词转换为固定维度的向量表示。
  2. 位置编码(Positional Encoding)
    由于 Transformer 不像 RNN 那样自然地处理序列信息,它通过位置编码添加位置信息,帮助模型了解词的位置关系。
  3. 多头自注意力机制(Multi-Head Self-Attention)
    输入向量经过多头自注意力机制,这个机制能够捕捉句子中不同词之间的依赖关系。
    多头注意力机制由多个平行的注意力头组成,每个注意力头独立地执行注意力操作,然后将结果拼接并线性变换。
  4. 残差连接和归一化(Add & Norm)
    每个注意力层后都有一个残差连接(Add)和层归一化(Layer Normalization),以稳定和加速训练过程。
  5. 前馈神经网络(Feed Forward)
    自注意力层的输出通过前馈神经网络,该网络由两个线性变换层和一个激活函数(通常是ReLU)组成。
    其后再次进行残差连接和层归一化。

上述过程重复𝑁次,形成堆叠的编码器层。

解码器(Decoder)

  • 输出嵌入层(Output Embedding):
    解码器输入(通常是已生成的序列,右移一位)也通过嵌入层转换为向量表示。
  • 位置编码(Positional Encoding)
    与编码器一样,解码器也需要位置编码来表示词的位置关系。
  • 掩码多头自注意力机制(Masked Multi-Head Self-Attention):
    解码器中的第一个多头注意力层称为掩码多头自注意力机制,通过掩码防止模型在训练时看到未来的词。
  • 多头注意力机制(Multi-Head Attention)
    第二个多头注意力层通过编码器输出和解码器输入进行交互,以捕捉编码器和解码器之间的依赖关系。
    同样有残差连接和层归一化。
  • 前馈神经网络(Feed Forward)
    类似编码器的前馈神经网络层。
  • 全连接层和 Softmax 层:
    解码器最后的输出通过线性层(将输入特征映射到输出特征空间)和 Softmax 层,生成概率分布,表示下一个词的可能性。

2、数据处理流程

  • 输入数据
    • 输入数据首先通过嵌入层和位置编码。
  • 编码器处理
    • 编码器的多头自注意力机制计算词与词之间的相关性,生成编码表示。
  • 解码器处理
    • 解码器第一个掩码多头自注意力层处理部分生成的序列。
    • 第二个多头注意力层结合编码器的输出和解码器的中间表示,捕捉输入输出之间的关系。
    • 前馈神经网络进一步处理,生成最终的解码输出。
  • 输出概率
    • 最终输出通过线性层和 Softmax 层,生成每个词的概率分布,选择概率最大的词作为输出。

在每个input layer里面,会有两个sub layer,第一个sub layer是multi-head attention,第二个子层是MLP。每个子层用残差连接,然后接了layer normal(也可以认为是Bert把它带火了),每个输出层的维度都是512维。
每个output layer里面,会有三个sub layer,第一个和第二个是multi-head attention,第三个子层是MLP。
关于MLP,一般情况下,我们可以直接把MLP理解为是DNN。MLP和DNN的区别,MLP叫多层感知器,DNN叫深度神经网络。
MLP通常很浅,隐藏层就一二层。 DNN一般隐藏层大于二,而且激活函数的种类更多。
DNN + 空间相关性,就可以理解为是CNN。
DNN + 时间相关性,就可以理解为是RNN。

3、Layer normal(LN)与batch normal(BN)对比

Layer Normalization(LN)和 Batch Normalization(BN)是两种常用的归一化技术,它们在深度学习模型中有助于稳定和加速训练过程。尽管两者的目的相似,但它们在应用方法和具体实现上存在显著差异。
Batch Normalization(BN)
Batch Normalization 是对小批量(mini-batch)数据进行归一化处理。

优点

  • 加速收敛:通过减少内部协变量偏移,BN 能够加速模型的训练过程。
  • 提高性能:BN 能有效地应对较深层网络中的梯度消失和梯度爆炸问题。
  • 适应性强:在各种类型的神经网络(CNN, RNN, MLP 等)中都能取得良好的效果。

缺点

  • 对小批量数据依赖较强:对于较小批量的数据,计算均值和方差的估计不稳定。
  • 在某些情况下,如 RNN 中应用有一定难度。

Layer Normalization(LN)
Layer Normalization 是对每个样本的所有特征进行归一化处理。

优点

  • 对小批量大小不敏感:LN 不依赖小批量大小,因此在小批量或单样本训练中表现良好。
  • 适用于 RNN:在 RNN 等序列模型中,LN 可以稳定训练过程,避免依赖于批量数据的归一化方式。

缺点

  • 在某些场景中,性能可能不如 BN 优秀,尤其是对于大型批量数据的处理。

在这里插入图片描述

总结对比

  • 归一化对象
    • BN:对小批量数据中的每个特征进行归一化。
    • LN:对每个样本的所有特征进行归一化。
  • 计算方式
    • BN:计算小批量数据中每个特征的均值和方差。
    • LN:计算每个样本中所有特征的均值和方差。
  • 适用场景
    • BN:适用于较大批量的训练数据,适用于 CNN 等模型。
    • LN:适用于小批量或单样本训练,适用于 RNN 等模型。
  • 对批量大小的依赖
    • BN:依赖于小批量大小。
    • LN:不依赖于小批量大小。

在面试中可以这样回答
Batch Normalization 和 Layer Normalization 是两种常用的归一化方法。Batch Normalization 对小批量数据进行归一化,通过计算每个小批量中每个特征的均值和方差进行标准化,然后通过可学习的缩放和平移参数调整。这有助于加速收敛,减少梯度消失和爆炸问题,但依赖于小批量的大小。

Layer Normalization 则对每个样本的所有特征进行归一化,计算该样本中所有特征的均值和方差。Layer Normalization 对小批量大小不敏感,适用于小批量或单样本训练,尤其适合于 RNN 等模型。

总体来说,Batch Normalization 更适合于 CNN 和大批量训练,而 Layer Normalization 更适合于 RNN 和小批量训练。

4、核心计算公式

A t t e n t i o n ( Q , K , V ) = s o f t max ⁡ ( Q K T d k ) V A t t e n t i o n ( Q , K , V ) = s o f t \max \left( \frac { Q K ^ { T } } { \sqrt { d _ { k } } } \right) V Attention(Q,K,V)=softmax(dk QKT)V

这个公式描述的是 Transformer 模型中的自注意力机制(Self-Attention Mechanism)。它展示了如何通过查询(Query)、键(Key)和值(Value)矩阵计算注意力得分并生成输出。

Q, K, V:分别表示查询(Query)、键(Key)和值(Value)矩阵。
- 这些矩阵通常是由输入嵌入(或中间层表示)通过线性变换生成的。
- 每个输入向量(例如词向量)会分别映射成 Q, K, V 三个向量。

为什么要除以根号Dk?

这个问题在《Attention is All Your Need》的原始论文中是给出了一个粗略的答案的。
作者说,当dk的值变大的时候,softmax 函数会造成梯度消失问题,所以设置了一个 softmax 的 temperature 来缓解这个问题。这里 temperature 被设置为了根号下dk , 也就是乘上 1 d k . \frac { 1 } { \sqrt { d _ { k } } } . dk 1.
回答参考自:Attention为什么要除以根号d
具体公式推导方法见链接公众号推文

5、Mask

在 Transformer 模型中,Mask是一个非常重要的机制,主要用于以下两个方面:避免模型在解码时看到未来的词(即防止信息泄露),以及处理可变长度的输入序列。具体来说,掩码在自注意力机制中有两个主要应用:填充掩码(Padding Mask)和前瞻掩码(Look-Ahead Mask),又称为序列掩码(Sequence Mask)。
(1)填充掩码(Padding Mask)
作用: 填充掩码用于处理可变长度的输入序列。由于神经网络通常需要固定大小的输入,较短的序列通常会在末尾添加填充(padding)标记,使所有序列长度一致。填充掩码用于确保这些填充标记在计算注意力得分时不会影响结果。

工作原理

  • 对于每个输入序列,填充掩码生成一个与输入序列长度相同的掩码矩阵。填充位置为 0,其余位置为 1。
  • 在计算注意力得分时,掩码矩阵与注意力权重矩阵相乘,将填充位置的权重设为负无穷大,使得在 softmax 之后,这些位置的注意力权重变为零,确保模型忽略填充部分。

(2)前瞻掩码(Look-Ahead Mask)
作用: 前瞻掩码用于自回归模型(如 Transformer 的解码器)中,确保模型在生成当前词时,只能依赖之前的词,而不能看到未来的词。这有助于防止模型在训练过程中提前获取未来信息,从而保持因果关系。

工作原理

  • 前瞻掩码生成一个上三角矩阵,矩阵的下三角部分(包括对角线)为 0,上三角部分为负无穷大。
  • 在计算注意力得分时,将前瞻掩码矩阵应用于查询和键的点积结果,掩盖未来位置的信息,使得在计算当前词的注意力得分时,只考虑之前的词。

在面试中可以这么回答
在 Transformer 模型中,掩码主要有两个作用:填充掩码用于处理可变长度的输入序列,确保填充标记在计算注意力得分时不会影响结果;前瞻掩码用于解码器中,确保模型在生成当前词时,只能依赖之前的词,防止模型看到未来的词,从而保持因果关系。填充掩码通过将填充位置的注意力权重设为零,前瞻掩码通过掩盖未来位置的信息,确保解码器在每个时间步只能看到之前的词。

6、Multi Head Attention

在这里插入图片描述
T1:Multi-Head,一根线过来,复制了3下,得到Q,K,V。也就是Q,K,V都是自己,所以叫自注意力机制。
T3:多了一个master机制,让解码器阶段不该看到的信息不被看到。
T2:此时不在是自注意力机制了,其中Q和K来自编码器,V来自解码器。Q和K是编码器的输出,是N个长度为d的向量。V是解码器,输出是M个长度为d的向量。(N是输入句子长度,M是输出句子长度)

7、Feed Forward

前馈神经网络(Feed Forward Neural Network, FFN)结构
每个编码器和解码器层中都包含一个前馈神经网络层,它由两个线性变换(全连接层)和一个非线性激活函数组成,具体结构如下:
(1). 第一层线性变换

- 输入向量经过一个线性变换,将其维度从 𝑑modeldmodel​ 映射到更高的维度 𝑑ffdff​。
- 线性变换公式:FFN1(𝑥)=𝑊1𝑥+𝑏1FFN1​(x)=W1​x+b1​,其中 𝑊1W1​ 是权重矩阵,𝑏1b1​ 是偏置向量。

(2). 非线性激活函数

- 通常使用 ReLU(Rectified Linear Unit)激活函数,增加模型的非线性表达能力。
- ReLU 激活函数公式:ReLU(𝑥)=max⁡(0,𝑥)ReLU(x)=max(0,x)。

(3). 第二层线性变换

- 经过激活函数处理后的向量再次经过一个线性变换,将维度从 𝑑ffdff​ 映射回 𝑑modeldmodel​。
- 线性变换公式:FFN2(𝑥)=𝑊2𝑥+𝑏2FFN2​(x)=W2​x+b2​,其中 𝑊2W2​ 是权重矩阵,𝑏2b2​ 是偏置向量。

前馈神经网络公式
F F N ( x ) = W 2 R e L U ( W 1 x + b 1 ) + b 2 F F N ( x ) = W _ { 2 } R e L U ( W _ { 1 } x + b _ { 1 } ) + b _ { 2 } FFN(x)=W2ReLU(W1x+b1)+b2

四、Bert

BERT(Bidirectional Encoder Representations from Transformers)是由Google提出的一种预训练语言模型,旨在从双向(即同时从左到右和从右到左)的上下文中学习词的表示。

模型架构

BERT 的模型架构是由多个堆叠的 Transformer 编码器层组成,具体架构包括:

  • 输入表示(Input Representation):BERT 的输入是一个固定长度的序列,由词嵌入(Word Embedding)、位置嵌入(Position Embedding)和分段嵌入(Segment Embedding)三部分组成。

    • 词嵌入:对每个词进行嵌入表示。
    • 位置嵌入:添加词的位置编码,以捕捉词序信息。
    • 分段嵌入:区分不同句子(如句子A和句子B)。
  • 多头自注意力机制(Multi-Head Self-Attention):每个编码器层使用多头自注意力机制来捕捉句子中不同词之间的依赖关系。

  • 前馈神经网络(Feed-Forward Neural Network):每个编码器层中包含一个前馈神经网络,用于非线性变换。

如何理解Bert的双向性?

BERT在训练过程中使用了一个叫做“Masked Language Model (MLM)”的策略,这使得模型能够在训练时同时关注一个词的前后文。例如,对于句子“我喜欢机器学习”,BERT在训练时会随机掩盖掉某些词,然后让模型预测这些被掩盖的词。这样,模型在预测“喜欢”这个词时,可以同时考虑到“我”和“机器学习”这些前后的上下文信息。

Position Embedding

在这里插入图片描述
1、黄色部分,是词元的embedding层,是“正常” 的embedding层。
2、绿色部分,是segment的embedding,segment表示的是字在句中的位置。
3、灰色部分,是输入是每个词元的位置嵌入。
4、最终input = 词元本身的嵌入 + 词元在第几个句子的嵌入 + 词元在序列中间位置的嵌入。
transformer中,位置信息是手动构造出来的,但是Bert里面,不管位置在哪里,对应的向量表示都是学习得到的。

Position Embedding的主要目的是让模型知道输入序列中每个单词的位置。BERT使用的是固定的正弦和余弦函数来生成位置嵌入。这些位置嵌入会与单词嵌入相加,形成每个输入标记的最终嵌入表示。

为什么使用正弦和余弦函数?

  1. 平滑性和可微性:正弦和余弦函数是平滑且可微的函数,这对神经网络的训练过程有利。
  2. 周期性:正弦和余弦函数的周期性允许模型对长序列进行处理,同时保留短序列的信息。
  3. 独特表示:每个位置都有一个唯一的正弦和余弦编码,这确保了模型可以区分序列中的不同位置。

在BERT中,位置嵌入是与单词嵌入和分段嵌入相加的。具体过程如下:

  1. 单词嵌入(Token Embedding):将输入序列中的每个标记转换为一个固定维度的向量。
  2. 位置嵌入(Position Embedding):为序列中的每个位置生成一个固定维度的向量。
  3. 分段嵌入(Segment Embedding):区分不同句子的嵌入,用于表示序列中的句子对。

这些嵌入相加后,作为Transformer模型的输入,使得模型可以利用这些信息进行训练和预测。

Transformer架构最初是由Google在自然语言处理(NLP)领域提出的,尤其是BERT模型的兴起,极大地推动了其在序列数据处理上的应用。然而,随着研究的深入,Transformer也被扩展到了计算机视觉(CV)领域,尤其是在图像分割任务中,其中最著名的就是将Transformer与卷积神经网络(CNN)结合的实践,如“SegFormer”和“MAE(Masked Autoencoders for Vision)”。 用Transformer进行图像分割的过程通常包括以下几个步骤: 1. **编码器-解码器结构**:Transformer被设计为自注意力机制的核心,这使得它能够捕获全局上下文信息。在图像分割中,编码器(通常是ResNet、ViT或自定义的图像Transformer)会生成一个全局特征表示,然后解码器使用这些特征来生成每个像素的预测。 2. **多尺度特征融合**:为了处理不同尺度的细节,常将来自不同分辨率的特征图与Transformer的输出融合,比如通过空间金字塔 pooling(SPP)或U-Net的上采样机制。 3. **注意力机制**:Transformer的自注意力机制允许模型关注图像中的重要区域,这对于区分前景和背景、识别物体边界特别有效。 4. **多头注意力与位置编码**:多头注意力机制可以帮助模型从不同的角度同时关注图像的不同部分,而位置编码则帮助模型理解像素之间的相对位置关系。 5. **监督学习或无监督学习**:如果是监督学习,会用预先标记的像素级标签进行训练;如果是无监督学习方法,如MAE,可能会先预训练一个仅通过遮罩重建图像的任务,再微调到分割任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值