Transformer温习整理

type
Post
status
Published
summary
Transformer 是由谷歌于 2017 年在 Attention Is All You Need 中首次提出。Transformer的提出在很大程度上改变了自然语言处理领域的局面,取代了传统的循环神经网络和卷积神经网络在语言模型、机器翻译等任务中的地位。
slug
machine-learning-transformer
date
Mar 19, 2024
tags
机器学习
深度学习
transformers
category
机器学习
password
icon
URL
Property
Apr 12, 2024 11:44 AM

一、导读

Transformer 是由谷歌于 2017 年在 Attention Is All You Need 中首次提出。Transformer的提出在很大程度上改变了自然语言处理领域的局面,取代了传统的循环神经网络和卷积神经网络在语言模型、机器翻译等任务中的地位。
Transformer 的发展历程可以简单概括为:
  • 2017 年 6 月首次提出Transformer
  • 2018 年 2 月 OpenAI 推出 CPT-1 模型(基于 Transformer 的 Decoder 结构)
  • 2018 年 10 月 谷歌推出 BERT 模型(基于 Transformer 的 Encoder 结构)
  • 2019 年 10 月谷歌推出 T5 模型(基于 Transformer 的 Encoder-Decoder 结构)
  • 2022 年 11 月 Chat-GPT(基于 GPT3.5) 问世
  • 2023 年 3 月 GPT4 问世
  • ……

二、Transformer详解

转载自:Transformer 详解

三、补充理解

自注意力机制

原理
注意力模型借鉴了人类的注意力机制:人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。同样的,Attention机制可以理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。
在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间。所以它关注的是输入的数据中哪些是和输出(标签)更相关的
在Transfoemer 框架中,使用的是 Self Attention 机制,它关注的是输入数据内部元素之间的相关性,因此它的计算结果表示的是输入文本内部各个词(token)之间的相关性,这些相关性在语法上表示的可能是句法特征(有一定距离的短语结构)或者语义特征(指示代词的指代对象)。 而与 RNN 和 LSTM 比起来它更容易捕获句子中长距离的相互依赖的特征。
计算
对于输入的句子 X,通过 Word Embedding 得到该句子中每个字的字向量,同时通过 Positional Encoding 得到所有字的位置向量,将其相加(维度相同,可以直接相加),得到该字真正的向量表示。第 t 个字的向量记作 ;定义三个矩阵 (这三个矩阵一般是随机初始化得到的)使用这三个矩阵与输入 相乘,得到查询矩阵  ,键矩阵  ,值矩阵 ;计算公式如下:
💡
补充
  1. 先从点乘的物理意义说,两个向量的点乘表示两个向量的相似度。
  1. Q,K,V物理意义上是一样的,都表示同一个句子中不同token组成的矩阵。矩阵中的每一行,是表示一个token的word embedding向量。假设一个句子"Hello, how are you?"长度是6,embedding维度是300,那么Q,K,V都是(6, 300)的矩阵
简单的说,K和Q的点乘是为了计算一个句子中每个token相对于句子中其他token的相似度,这个相似度可以理解为attetnion score,关注度得分。比如说 "Hello, how are you?"这句话,当前token为”Hello"的时候,我们可以知道”Hello“对于” , “, "how", "are", "you", "?"这几个token对应的关注度是多少。有了这个attetnion score,可以知道处理到”Hello“的时候,模型在关注句子中的哪些token。
这个attention score是一个(6, 6)的矩阵。每一行代表每个token相对于其他token的关注度。比如说上图中的第一行,代表的是Hello这个单词相对于本句话中的其他单词的关注度。
公式中计算了K和Q的点乘之后还除以了 是矩阵Q、K 的列数,即向量的纬度),原因是原始分数通过点积操作计算得到,点积的结果会随着向量的维度增大而增大,而过大的值会导致模型不稳定,所通过除以 的方式来对原始分数进行缩放,从而使模型更加稳定收敛,并且减少梯度消失或梯度爆炸的风险。最后添加softmax只是为了对关注度进行归一化。
虽然有了attention score矩阵,但是这个矩阵是经过各种计算后得到的,已经很难表示原来的句子了。然而V还代表着原来的句子,所以我们拿这个attention score矩阵与V相乘,得到的是一个加权后结果。也就是说,原本V里的各个单词只用word embedding表示,相互之间没什么关系。但是经过与attention score相乘后,V中每个token的向量(即一个单词的word embedding向量),在300维的每个维度上(每一列)上,都会对其他token做出调整(关注度不同)。与V相乘这一步,相当于提纯,让每个单词关注该关注的部分。

四、Transformer面试问题

低阶

Transformer是什么?Transformer的结构是什么样的?
  • Transformer是一种基于自注意力机制的神经网络架构,由谷歌于 2017 年在 Attention Is All You Need 中首次提出。
  • Transformer本身还是一个典型的encoder-decoder模型;
    • Encoder端由N(原论文中N=6)个相同的模块堆叠而成,除第一个模块外其余模块的输入都是上一个模块的输出;其中每个模块又由多头注意力层(Multi-Head Attention) 以及前馈神经网络层(Feed-Forward Neural Network)组成;
    • Decoder端同样由N(原论文中N=6)个相同的大模块堆叠而成,其中每个模块由掩码多头注意力层(Masked Multi-Head Attention) 、多头编码器-解码器注意力层(Encoder-Decoder attention)以及一个前馈神经网络层(Feed-Forward Neural Network)组成;
Transformer中Encoder和Decoder有什么区别?
  • Decoder 模块比Encoder模块多了一个掩码多头注意力层(Masked Multi-Head Attention),使用了掩码遮盖的方式防止未来信息的干预
  • Decoder 模块的多头编码器-解码器注意力层(Encoder-Decoder attention)中的K、V都来自Encoder 模块的最终输出,这样能融合来自编码器的信息。
Transformer中文本的位置信息是如何获取的?
原始的 Transformer 论文中提出了使用正弦和余弦函数的固定位置编码,并且位置编码(Positional Encoding)被加入到输入嵌入(Embeddings)中行成了最终的模型输入
Transformer中的残差连接和层归一化有什么作用?
  • 残差连接:允许梯度直接流过连接,缓解梯度消失或梯度爆炸的问题,并且这也有助于网络参数的优化提高了训练速度
  • 层归一化:
      1. 保证了训练过程中各层输入分布的一致性,从而提升训练稳定性
      1. 有助于缓解内部协变量偏移(Internal Covariate Shift)问题,可以加快收敛速度
      1. 可以防止网络中的激活值过大或过小,减少了模型训练过程中的梯度消失或爆炸问题,因此可以使用更高的学习率进一步加速训练的同时也提升了模型的稳定性
      1. 归一化层降低了模型对参数初始化的敏感度,减轻了训练初期不适当的参数初始化可能带来的负面影响。
Transformer中的前馈神经网络层使用了什么激活函数?有什么优缺点?
通常使用ReLU(Rectified Linear Unit)作为激活函数
  • 优点
    • 计算简单:ReLU的计算非常高效,因为它只需要判断输入是否大于0。
    • 缓解梯度消失问题:对于正输入,其导数是常数,这样有助于缓解在深度网络中梯度消失的问题。
    • 稀疏激活:ReLU会导致网络中的神经元输出稀疏的特征表示,可能有利于某些类型的学习。
  • 缺点
    • 死亡ReLU问题:如果激活值小于0,ReLU的梯度为0,这会导致神经元不再更新,称为“死亡ReLU”。
Transformer相比于RNN/LSTM,有什么优势?为什么?
  1. 并行计算:Transformer 模型能同时处理整个输入序列,而不依赖于先前的计算结果。 RNN和LSTM 当前的计算需要依赖上一步的计算结果。
  1. 避免长距离依赖问题:RNN 和 LSTM 由于其递归性质,在处理长序列时可能遇到梯度消失或爆炸问题,导致难以学习长距离依赖。Transformer 使用多头自注意力机制(Multi-Head Attention)可以直接捕捉序列内任意两个元素之间的依赖关系,无论它们相隔有多远;Transformer有更好的特征抽取能力

进阶

Transformer为何使用多头注意力机制?(为什么不使用一个头)
多头注意力机制核心思想是同时学习数据的不同表示子空间中的信息。多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。并且论文原作者发现这样效果确实好
Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘? (注意和第一个问题的区别)
使用Q/K/V不相同可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力
Transformer计算attention的时候为何选择点乘而不是加法?两者计算复杂度和效果上有什么区别?
两个向量(矩阵)的点乘表示两个向量(矩阵)的相似度,因此点乘更容易捕捉token之间的关联性和相似性;加法在数学上表达的是元素级的组合,它不考虑向量间的相互对应关系。可以通过高度优化的矩阵计算库来实现,所以点积和加法计算成本大致相当。计算复杂度为 O(d_k*seq_len)
为什么在进行softmax之前需要对attention进行scaled(为什么除以dk的平方根),并使用公式推导进行讲解
原始分数通过点积操作计算得到,点积结果的方差会随着向量的维度增大而增大,而过大的值会导致 softmax 函数进入梯度非常小的区域,这可能会引起梯度消失、降低模型灵活性从而导致模型不稳定;所通过除以 的方式来对原始分数进行缩放,从而使模型更加稳定收敛,并且减少梯度消失或梯度爆炸的风险。
在 Decoder 模块的掩码多头注意力层(Masked Multi-Head Attention)中,为什么要做Mask操作?是如何做的?在那个步骤做?
  • 为什么做Mask操作:可以理解为在训练过程中,Decoder 模块的掩码多头注意力层这里输入的是“答案”,但是我们不能让模型直接看见所有答案(这样就不用训练了),所以我们需要对未来的答案进行遮挡隐藏,只放出当前需要用到的词,结合 Encoder 的输出来预测后面的词。
  • 做Mask操作的位置:在计算出之后,softmax之前做Mask操作
  • 怎么做Mask操作:
    • 生成一个上三角形的掩码矩阵,该矩阵的上三角部分(包括对角线上方的元素)由负无穷大(或一个非常小的数字,如 -1e9)填充,而其余部分则填充为0。
    • 将掩码矩阵与计算得到的缩放分数(Scaled Scores)相加,上三角位置对应的数据变成负无穷大(- inf),下三角位置的数据不变;
    • 通过softmax归一化,就能将负无穷大(- inf)变为 0,得到的这个矩阵即为每个字之间的权重(未来信息的权重被变为 0)
Encoder端和Decoder端是如何进行交互的?
编码器-解码器注意力机制是Decoder端与Encoder端交互的关键。它使用Decoder的自注意力层的输出作为查询(Query),使用Encoder的输出作为键(Key)和值(Value)。这允许Decoder的每个位置都能够访问Encoder的整个输入序列的上下文信息。
Transformer的并行化体现在哪个地方?Decoder端可以做并行化吗?
  1. 自注意力机制:在自注意力层中,计算每一个单词对其它所有单词的注意力权重是一个高度并行的操作。因为各个单词之间的这些计算是独立的,所以可以同时进行。
  1. 批处理:Transformer训练时通常一次性处理整个批次的数据。因为不同序列的自注意力计算相互独立,它们可以并行执行。
  1. 前馈网络:在每个Encoder和Decoder层中,前馈网络对每个位置的数据处理是独立的。这使得对一个序列的所有位置执行前馈网络的计算可以并行进行。
  1. 层与层之间的并行:Transformer具有多层结构,当将它们分布于多个计算设备时,不同层的计算可以并行处理。
 
在Decoder端存在某些限制,主要是因为解码通常需要按顺序生成输出序列,即在生成下一个词之前要考虑之前所有已生成的词的信息。
Transformer模型中的损失函数是什么?如何进行模型的训练和优化?
在Transformer模型中,最常用的损失函数是交叉熵损失(Cross-Entropy Loss),这个损失函数衡量了模型预测的概率分布与真实标签的概率分布之间的差异。
模型训练和优化
  1. 初始化模型参数:一般来说,参数是随机初始化的,但要遵循某些特定的初始化策略,如使用Glorot初始化或He初始化。
  1. 前向传播:模型接收输入数据,并通过编码器和解码器的各个层,最终给出预测输出。
  1. 计算损失:使用交叉熵损失函数比较模型输出与真实标签,计算损失值。
  1. 反向传播:根据损失函数值用于计算模型参数的梯度。梯度表示损失关于每个参数的局部变化率。
  1. 优化器更新参数:使用优化算法(如Adam算法)根据梯度更新模型参数。Adam优化器因其对超参数的选择相对鲁棒,以及内置的适应性学习率特性,经常被用来训练深度学习模型。
  1. 正则化和学习率调整:可能会采用dropout、权重衰减等正则化策略来防止模型过拟合。此外,也会采用学习率调整策略(如学习率预热和衰减)来改进训练过程。
  1. 重复迭代:重复执行前向传播、损失计算、反向传播和参数更新步骤,直到模型收敛,即损失函数不再大幅度减小或达到预定的迭代次数。
在实际操作中,这个过程会在一个或多个epoch中重复,每个epoch都会处理整个训练数据集。通常会采用mini-batch训练,这意味着不是一次性处理整个数据集,而是将数据集分成许多较小的批次来进行迭代更新。这有助于稳定梯度估计,同时减少内存的要求。

高阶

Transformer训练的时候学习率是如何设定的?Dropout是如何设定的,位置在哪里?Dropout 在测试的需要有什么需要注意的吗?
学习率
  • Transformer模型通常采用一种特别的学习率调整策略,称为“学习率预热”(learning rate warmup)。
  • 在这种策略中,学习率会在训练开始的几个步骤中线性地增长,达到一个最大值,然后根据一定的规则(例如逐步减少或者按比例下降)随训练步数的增加而降低。
  • 一个常见的学习率调度公式如下:lrate = d_model^(-0.5) * min(step_num^(-0.5), step_num * warmup_steps^(-1.5)),其中d_model是模型的隐藏层维度,step_num是当前的步数,warmup_steps是预热步数。
  • 这种方法使得模型在训练初期更具探索性,而在后期则集中于稳定和细化学习。
Dropout
  • Dropout是一个正则化技术,它通过在训练过程中随机“丢弃”一部分神经网络单元来预防过拟合。
  • 在Transformer模型中,Dropout可以应用在几个不同的位置:
    • 在词嵌入层后。
    • 在每个子层的输出上(即自注意力层和前馈网络层之后)。
    • 在添加位置编码后、提供给Encoder和Decoder层之前。
    • 在注意力权重上,这通常被称为“注意力Dropout”。
  • Dropout率(即丢弃概率)是一个超参数,通常通过交叉验证来决定。在不同的数据集和任务上可能有所不同,一般范围在0.1到0.3之间。
Dropout在推理(测试)时的注意点
  • 在模型推理或评估时,Dropout应该被禁用,这意味着不应随机丢弃任何单元。
  • 训练中应用的Dropout在推理时被移除,确保了所有的单元都参与前向传播,这可以保证得到稳定的输出。
  • 这通常是通过模型或框架内置的评估模式来自动完成的,比如在PyTorch中,可以通过调用.eval()方法来设置模型为评估模式,禁用Dropout。
为什么在进行多头注意力的时候需要对每个head进行降维?(可以参考上面一个问题)
在进行多头注意力计算时,对每个头进行降维(即减少每个头处理的特征维度)主要基于以下原因:
  1. 资源优化多头注意力通过分割原始的特征维度到不同的头中来工作,如果不进行降维,每个头都将操作完整维度的数据,这会导致参数量和计算量剧增。降维可以有效减少每个头的参数数量,使得整个模型更加轻量化,同时便于并行计算。
  1. 专注力分散降维可以让每个头专注于输入的不同子空间,捕获输入中不同方面的信息。如果不降维,则每个头操作的信息冗余度会增加,可能导致学习的特征表示不够多样化。
  1. 模型表达能力通过降维并分配到多个不同的头,模型可以并行学习输入序列的多个方面,增加了模型的表达能力,并允许模型在较低的维度上更深入地学习数据的细节。
  1. 防止过拟合由于在降维之后每个头学习的参数更少,这可以起到一定的正则化效果,减小过拟合风险。
简单介绍一下Transformer的位置编码?有什么意义和优缺点?
优点
  • 可解释性强:正弦和余弦位置编码可以通过可变波长的函数来捕获位置和相对位置的信息,这使得模型能够推断出词项之间的距离关系。
  • 泛化能力:特别是固定的三角函数位置编码不依赖于特定的序列长度,因此模型可以处理比训练时见过的序列更长的序列。
  • 并行计算:位置编码允许模型继续在各个位置同时处理序列的所有元素。
缺点
  • 当处理的序列长度超过训练数据中的长度时,学习得到的位置编码可能无法很好泛化。
  • 虽然固定的三角函数位置编码有助于模型理解相对位置信息,但它们不包含实际的序列位置,模型可能需要额外的层次和参数来学习更复杂的位置相关模式。
你还了解哪些关于位置编码的技术,各自的优缺点是什么?
  1. 相对位置编码:
      • 与绝对位置编码不同,相对位置编码关注的是元素间的相对距离而不是它们的绝对位置。
      • 优点:它能较好地捕捉元素间的局部关系,并且能更好地处理较长的序列。
      • 缺点:相对位置关系的建模可能会更加复杂,需要模型学习额外的参数。
  1. 索引位置编码:
      • 即为序列中的每个位置指定一个唯一的索引,通常用作查找表(embedding table)。
      • 优点:容易实现,并且可以直接学习位置间的复杂函数关系。
      • 缺点:通常不适用于超出训练集长度范围外的序列。
  1. 学习位置编码:
      • 通过神经网络学习位置的表示,与输入的词嵌入一同训练。
      • 优点:可以自动学习复杂的序列模式。
      • 缺点:如果序列非常长,可能需要很多数据才能有效地学习位置信息。
  1. Transformer XL的相对位置编码:
      • 这种方法将基于内容的注意力和基于位置的注意力分开,并且引入了一个可学习的相对位置编码。
      • 优点:它使得模型可以处理非常长的序列数据,并且能够在长文本上捕获依赖性。
      • 缺点:其结构相对复杂,实现起来比标准的Transformer更具挑战性。
  1. ALBERT的位置编码共享(position encoding sharing):
      • 在这种方法中,多个层之间共享位置编码,减少了需要学习的参数。
      • 优点:减少了模型大小,提高了参数效率。
      • 缺点:可能限制了模型捕捉不同层特定位置信息的能力。
  1. 可分离位置编码:
      • 在这种方法中,位置编码被设计成可以与词嵌入独立处理,然后再整合在一起。
      • 优点:提供了更大的灵活性,不同的任务可以使用不同的位置编码策略。
      • 缺点:可能会增加模型的复杂性和训练难度。
为什么transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?
  1. 独立性LayerNorm 对每一个样本独立进行归一化,计算的是样本内部特征的均值和方差。相较之下,BatchNorm 在一个小批量的数据上进行归一化,计算的是跨整个小批量数据的特征均值和方差。在处理序列化数据时,每个样本序列的长度可能不同,这使得BatchNorm难以应用,而LayerNorm并不受此影响。
  1. 计算顺序在序列模型中,由于序列的动态长度和模型解码过程的自回归特性,BatchNorm在时间步之间的归一化将会引入上一个时间步的信息,这可能导致信息泄漏。LayerNorm 限制在单个样本内部,不会出现这种情况。
  1. 在线性变换之后LayerNorm 通常紧跟在多头自注意力(MultiHead Attention)和前馈(Feed-Forward)层的线性变换之后,而不是像BatchNorm那样在激活函数之前。
  1. 稳定性在Transformer模型中,训练的是大量动态序列数据。LayerNorm由于其对每个样本独立操作的特性,更适合这种场景,能够为模型提供额外的稳定性。
LayerNorm在Transformer中的位置在Transformer的架构中,LayerNorm通常放置在以下两个地方:
  • 在每个子层(自注意力与前馈网络)的输出之后,并在残差连接("add & norm")之前。这意味着,LayerNorm 是在将子层的输出与输入进行相加前应用的。正是这种"add & norm"的组合提供了模型深度连接的稳定性,允许训练深层的Transformer网络。
  • 一些变种的Transformer可能会放置在子层之后直接应用LayerNorm,而将残差连接的加法放在归一化之后。
简答讲一下BatchNorm技术,以及它的优缺点。
Batch Normalization(BatchNorm)是一项在深度神经网络中广泛使用的技术,旨在通过调整层输入的分布来加速训练过程和提高模型的性能。它首次被介绍是在2015年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中。
工作原理BatchNorm 对每个小批量数据(batch)执行以下步骤:
  1. 计算均值:计算当前批次内数据的均值。
  1. 计算方差:计算当前批次内数据的方差。
  1. 归一化:使用上述均值和方差对数据进行归一化,确保数据符合标准正态分布(即均值为0,方差为1)。
  1. 缩放和偏移:对归一化的数据进行可学习参数的缩放和偏移(重参数化),以保持网络的表达能力。
优点
  • 加速收敛:通过减少不同层分布的差异,BatchNorm有助于加快模型训练的收敛速度。
  • 允许更高的学习率:由于提供了稳定性,可以使用更高的学习率而不致于训练过程发散。
  • 缓解梯度消失问题:规范化过程中的归一化可以减轻梯度消失的问题,使得更深层网络的训练成为可能。
  • 充当正则化:BatchNorm 在一定程度上可以起到正则化效果,可能降低模型对于过拟合的倾向。
缺点
  • 依赖于批次大小:BatchNorm的归一化效果取决于批次的大小,对小批次数据可能效果不佳。
  • 对RNN的支持欠佳:涉及时间依赖性的数据处理(如RNN中)使用BatchNorm可能会导致问题,因为同一层的不同时间步可能会有不同的统计特性。
  • 可能抑制某些网络特性:比如风格迁移学习中,BatchNorm可能会去除某些图像特有的风格特征。
  • 推理阶段需要调整:在进行模型推理时(模型上线后使用),需要计算整个训练集的均值和方差用于替换批次统计量,此过程称为BatchNorm的归一化参数固化。
简单描述一下wordpiece model 和 byte pair encoding,有实际应用过吗?
WordPiece模型和Byte Pair Encoding(BPE)都是一种用于文本处理中的子词(subword)分割算法。这些算法的主要应用在于自然语言处理中的词汇分割,尤其是在语言模型预训练和机器翻译中。
Byte Pair Encoding (BPE):
  • BPE 最初来源于数据压缩技术,后来被引入到NLP中用来解决OOV(Out-of-Vocabulary)问题。它的基本思想是将常见的字符对(byte pairs)合并成单个符号。
  • 在NLP中,BPE通过统计分析语料库中单词之间共现的频率高的字符对并逐步替换这些字符对来生成常见的子词。
  • 例如,对于“lower”和“newest”,如果“er”是常见的字符对,则这两个单词可以被分割为“low er”和“new est”,在迭代过程中“er”可能就会被合并成一个新的单独符号。
  • BPE允许模型通过有限的词汇来处理未知或罕见的单词,提升了模型对词汇表外单词的泛化能力。
WordPiece Model:
  • WordPiece 也是一种用于生成子词的算法,与BPE类似,但它采用了不同的合并策略。
  • WordPiece不仅仅基于字符对的频率,还考虑了生成子词后的语言模型得分,以此来选择合并哪些字符对。
  • 这意味着WordPiece在合并时不只考虑局部频率信息,还尝试优化整体概率,使得生成的词表更适合后续的任务。
  • Google在其机器翻译系统中使用WordPiece,BERT模型中也使用WordPiece作为其分词机制。
这两种方法都被广泛应用在多种语言模型中,尤其是那些基于Transformer架构的模型。例如,在预训练的BERT模型中,就使用了WordPiece算法来分词,并且它对于处理多语言数据,特别是那些词汇组合丰富且语言结构复杂的任务,表现出了卓越的效果。而GPT-2、GPT-3等模型,采用的则是一种类似于BPE的子词分割算法。这些分词方法有效地支持了模型处理长文本序列和理解语言中词与词之间的关系,并在各种自然语言理解和生成任务中得到了应用。
引申一个关于bert问题,bert的mask为何不学习transformer在attention处进行屏蔽score的技巧?
BERT确实使用了掩码(masking)技巧,但它在预训练阶段所使用的掩码和Transformer Decoder中的掩码有不同的目的和实现方式。
BERT的学习任务BERT的预训练包括两个主要的任务:掩码语言模型(Masked Language Model, MLM)和下一个句子预测(Next Sentence Prediction, NSP)。掩码语言模型中,BERT随机选择输入序列的一部分token进行掩码处理,具体来说,它会将这部分token替换为一个特殊的[MASK]标记,然后模型被训练为预测这些被掩盖的原始token。
掩码(Masking)
  • 传统的Transformer模型在Decoder的自注意力模块使用掩码来实现自回归行为,在生成每个token时,确保只能注意到前面的token,预防信息泄露(即看到未来的token)。这是通过在attention score计算之后、softmax之前将未来位置的评分设置为负无穷的方式实现。
  • BERT由于是一个双向模型(Bi-directional),在预训练的MLM任务中,不应该阻止一个token注意到它后面的token。如果BERT采取了Transformer Decoder那样的掩码技巧,那么就变成了一个单向模型,无法实现其设计上的双向特性。
因此,BERT在attention计算中没有进行Decoder端那样的屏蔽操作是有意为之,目的是为了让预训练的模型能够整合上下文中的双向信息。BERT的目标是预测出被掩盖掉的token,为了达到这个目标,并不需要对注意力得分进行屏蔽。相反,通过允许模型看到整个输入序列的所有token,BERT能够更好地学习语言的双向表征,这是其在大范围下游任务中取得成功的关键。

五、推荐阅读

  1. Transformer 详解
  1. Transformer 模型详解
  1. 史上最全Transformer面试题
  1. Transformer模型详解(图解最完整版)
  1. Dissecting BERT Part 1: The Encoder
  1. Transformer 中的 Positional Encoding
  1. The Annotated Transformer——哈佛大学
  1. The Illustrated Transformer——Jay Alammar
  1. 详解Transformer (Attention Is All You Need)
  1. 深度学习中的注意力模型(2017版)——张俊林
  1. Transformer结构及其应用详解--GPT、BERT、MT-DNN、GPT-2
  1. 如何理解Transformer论文中的positional encoding,和三角函数有什么关系?
  1. 史上最全Transformer面试题系列(一):灵魂20问帮你彻底搞定Transformer-干货!
  1. transformer中为什么使用不同的K 和 Q, 为什么不能使用同一个值? - 赤乐君的回答 - 知乎
  1. 放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较——张俊林
If you have any questions, please contact me.