Attention——Transformer——Bert——FineTuning——Prompt

news/2024/7/19 8:35:29 标签: transformer, bert, 自然语言处理

目录

一、Attention机制

二、Transformer模型

三、Bert模型

四、Fine-Tuning微调

五、Prompt


一、Attention机制

1、核心逻辑:从关注全部到关注重点;

2.计算attention公式:

 

3.优点:

(1)参数少:相比CNN、RNN,模型复杂度小;

(2)速度快:解决了RNN不能并行计算的问题;

(3)效果好:解决了长距离信息会被弱化的问题;

4.实现步骤:

第一步: query 和 key 进行相似度计算,得到权值

第二步:将权值进行归一化,得到直接可用的权重

第三步:将权重和 value 进行加权求和

5.类型:

(1)soft attention:这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。

(2)hard attention:直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)

(3)local attention:是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

(4)General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。

(5)Local Attention,这种方式只使用内部信息,key和value以及query只和输入原文有关,在self attention中,key=value=query。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。

(6)单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention。

(7)多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务

(8)多头Attention,这是Attention is All You Need中提到的multi-head attention,用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention

6.相似度计算方式:

1)点乘:最简单的方法,

2)矩阵相乘:

3)cos相似度:

4)串联方式:把q和k拼接起来,

5)多层感知机:

二、Transformer模型

1、transformer:本质就是一个encoder-decoder结构:

2、Encoder结构:

数据先经过self-attention得到加权特征向量:

 然后经过Feed Forward Neural Network:

Decoder的结构比Encoder多了一个Encoder-Decoder Attention(计算当前翻译和编码的特征向量之间的关系): 

3、attention的计算步骤:

Q、K、V的意义:

Query,Key,Value的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query,然后搜索引擎根据Query为你匹配Key(例如商品的种类,颜色,描述等),然后根据Query和Key的相似度得到匹配的内容(Value)。

4、损失层:

解码器解码之后,解码的特征向量经过一层激活函数为softmax的全连接层之后得到反映每个单词概率的输出向量,然后通过CTC等损失函数训练模型。

一个完整可训练的网络结构便是encoder和decoder的堆叠:

5、位置编码

为了捕捉顺序序列的能力,在编码词向量时引入位置编码的特征。

6、优缺点:

优点:(1)虽然Transformer最终也没有逃脱传统学习的套路,Transformer也只是一个全连接(或者是一维卷积)加Attention的结合体。但是其设计已经足够有创新,因为其抛弃了在NLP中最根本的RNN或者CNN并且取得了非常不错的效果,算法的设计非常精彩;(2)Transformer的设计最大的带来性能提升的关键是将任意两个单词的距离是1,这对解决NLP中棘手的长期依赖问题是非常有效的。(3)Transformer不仅仅可以应用在NLP的机器翻译领域,甚至可以不局限于NLP领域,是非常有科研潜力的一个方向。(4)算法的并行性非常好,符合目前的硬件(主要指GPU)环境。

缺点:(1)粗暴的抛弃RNN和CNN虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer的结合可能会带来更好的效果。(2)Transformer失去的位置信息其实在NLP中非常重要,而论文中在特征向量中加入Position Embedding也只是一个权宜之计,并没有改变Transformer结构上的固有缺陷。

 7、transformer encoder 与 GRU区别;

8、常见问题:

(1)Transformer为何使用多头注意力机制?(为什么不使用一个头)

多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。其实本质上是论文原作者发现这样效果确实好

多头可以使参数矩阵形成多个子空间,矩阵整体的size不变,只是改变了每个head对应的维度大小,这样做使矩阵对多方面信息进行学习,但是计算量和单个head差不多。

(2)Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘

使用Q/K/V不相同可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力。

请求和键值初始为不同的权重是为了解决可能输入句长与输出句长不一致的问题。并且假如QK维度一致,如果不用Q,直接拿K和K点乘的话,你会发现attention score 矩阵是一个对称矩阵。因为是同样一个矩阵,都投影到了同样一个空间,所以泛化能力很差。

(3)Transformer计算attention的时候为何选择点乘而不是加法

为了计算更快。矩阵加法在加法这一块的计算量确实简单,但是作为一个整体计算attention的时候相当于一个隐层,整体计算量和点积相似。在效果上来说,从实验分析,两者的效果和dk相关,dk越大,加法的效果越显著。

K和Q的点乘是为了得到一个attention score 矩阵,用来对V进行提纯。K和Q使用了不同的W_k, W_Q来计算,可以理解为是在不同空间上的投影。正因为 有了这种不同空间的投影,增加了表达能力,这样计算得到的attention score矩阵的泛化能力更高。

(4)为什么在进行softmax之前需要对attention进行scaled(为什么除以dk的平方根),并使用公式推导进行讲解

方差变为1,避免softmax输出onhot从而梯度消失

假设 Q 和 K 的均值为0,方差为1。它们的矩阵乘积将有均值为0,方差为dk,因此使用dk的平方根被用于缩放,因为,Q 和 K 的矩阵乘积的均值本应该为 0,方差本应该为1,这样可以获得更平缓的softmax。当维度很大时,点积结果会很大,会导致softmax的梯度很小。为了减轻这个影响,对点积进行缩放。

(5)在计算attention score的时候如何对padding做mask操作

padding位置置为负无穷(一般来说-1000就可以)

(6)self-attention是什么?

「self-attention」,也叫 「intra-attention」,是一种通过自身和自身相关联的 attention 机制,从而得到一个更好的 representation 来表达自身,self-attention 可以看成一般 attention 的一种特殊情况。在 self-attention 中, ,序列中的每个单词(token)和该序列中其余单词(token)进行 attention 计算。self-attention 的特点在于「无视词(token)之间的距离直接计算依赖关系,从而能够学习到序列的内部结构」,实现起来也比较简单,值得注意的是,在后续一些论文中,self-attention 可以当成一个层和 RNN,CNN 等配合使用,并且成功应用到其他 NLP 任务。

(7)关于 self-attention 为什么它能发挥如此大的作用

在上述 self-attention 的介绍中实际上也有所提及,self-attention 是一种自身和自身相关联的 attention 机制,这样能够得到一个更好的 representation 来表达自身,在多数情况下,自然会对下游任务有一定的促进作用,但是 Transformer 效果显著及其强大的特征抽取能力是否完全归功于其 self-attention 模块,还是存在一定争议的

(8.)关于 self-attention 为什么要使用 Q、K、V,仅仅使用 Q、V/K、V 或者 V 为什么不行?

这个问题我觉得并不重要,self-attention 使用 Q、K、V,这样三个参数独立,模型的表达能力和灵活性显然会比只用 Q、V 或者只用 V 要好些,当然主流 attention 的做法还有很多种,比如说 seq2seq with attention 也就只有 hidden state 来做相似性的计算,处理不同的任务,attention 的做法有细微的不同,但是主体思想还是一致的,不知道有没有论文对这个问题有过细究,有空去查查~

「其实还有个小细节,因为 self-attention 的范围是包括自身的(masked self-attention 也是一样),因此至少是要采用 Q、V 或者 K、V 的形式,而这样“询问式”的 attention 方式,个人感觉 Q、K、V 显然合理一些。」

(9)Transformer 相比于 RNN/LSTM,有什么优势?为什么

RNN 系列的模型,并行计算能力很差

RNN 系列的模型 时刻隐层状态的计算,依赖两个输入,一个是 时刻的句子输入单词 ,另一个是 时刻的隐层状态的输出 ,这是最能体现 RNN 本质特征的一点,RNN 的历史信息是通过这个信息传输渠道往后传输的。而 RNN 并行计算的问题就出在这里,因为 时刻的计算依赖 时刻的隐层计算结果,而 时刻的计算依赖 时刻的隐层计算结果,如此下去就形成了所谓的序列依赖关系。

 Transformer 的特征抽取能力比 RNN 系列的模型要好。

值得注意的是,并不是说 Transformer 就能够完全替代 RNN 系列的模型了,任何模型都有其适用范围,同样的,RNN 系列模型在很多任务上还是首选,熟悉各种模型的内部原理,知其然且知其所以然,才能遇到新任务时,快速分析这时候该用什么样的模型,该怎么做好。

(10)为什么在进行多头注意力的时候需要对每个head进行降维?

答:将原有的高维空间转化为多个低维空间并再最后进行拼接,形成同样维度的输出,借此丰富特性信息,降低了计算量

(11)简单介绍一下Transformer的位置编码?有什么意义和优缺点?

答:因为self-attention是位置无关的,无论句子的顺序是什么样的,通过self-attention计算的token的hidden embedding都是一样的,这显然不符合人类的思维。因此要有一个办法能够在模型中表达出一个token的位置信息,transformer使用了固定的positional encoding来表示token在句子中的绝对位置信息。

(12)为什么transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?

答:多头注意力层和激活函数层之间。CV使用BN是认为channel维度的信息对cv方面有重要意义,如果对channel维度也归一化会造成不同通道信息一定的损失。而同理nlp领域认为句

(13)Encoder端和Decoder端是如何进行交互的?

答:通过转置encoder_ouput的seq_len维与depth维,进行矩阵两次乘法,即qkTv输出即可得到target_len维度的输出

(14)Decoder阶段的多头自注意力和encoder的多头自注意力有什么区别?

答:Decoder有两层mha,encoder有一层mha,Decoder的第二层mha是为了转化输入与输出句长,Decoder的请求q与键k和数值v的倒数第二个维度可以不一样,但是encoder的qkv维度一样。

(15)bert的mask为何不学习transformer在attention处进行屏蔽score的技巧?

答:BERT和transformer的目标不一致,bert是语言的预训练模型,需要充分考虑上下文的关系,而transformer主要考虑句子中第i个元素与前i-1个元素的关系。

(16)如果你知道你的训练数据有错误,你会对你的深度学习代码做什么改变?

我们可以做标签平滑,其中的平滑值是基于百分误差。如果任何特定的类有已知的误差,我们还可以使用类权值来修正损失。

(17)在transformer中使用最多的层是哪一层?

Dropout
 

三、Bert模型

1、模型结构:把Transformer encoder的结构作为一个基本单元,把N个这样的基本单元顺序连起来:

2、预训练+微调:

BERT在一个33亿单词的语料库上做预训练,预训练包括两个任务,第一个任务是随机的扣掉15%的单词(为什么是15%作者没说,很tricky),用一个掩码MASK代替,让模型去预测这个单词;第二个任务是每个训练样本是一个上下句,有50%的样本,下句和上句是真实的,另外50%的样本,下句和上句是无关的,模型需要判断两句的关系。这两个任务各有一个loss,将这两个loss加起来作为总的loss进行优化。
 

四、Fine-Tuning微调

五、Prompt

参考:

【1】拆 Transformer 系列一:Encoder-Decoder 模型架构详解 - 知乎

【2】Fine-tune之后的NLP新范式:Prompt越来越火,CMU华人博士后出了篇综述文章 - 知乎

【3】transformerbert、ViT常见面试题总结 - 简书


http://www.niftyadmin.cn/n/1533389.html

相关文章

推荐系统算法常见问题

一、过拟合 1、定义:模型在训练集上效果好,在测试集上表现差; 2、原因: (1)参数过多,模型复杂度高; (2)样本中噪声数据较大,模型学习到了噪声…

算法题——剑指offer

目录 1、二进制中1的个数 2、数值的整数次方 3、反转链表 4、树的子结构 5、栈的压入、弹出序列 6、从上向下打印二叉树 7、二叉搜索树与双向链表 8、字符串的排列 9、数组中出现次数超过一半的数字 10、最小的K个数 11、连续子数组的最大和 12、数组中的逆序对 1…

字符串游戏

Portal --> broken qwq Description ​  给你一个字符串\(S\),总共有\(M\)个询问,询问有两种: type 1:给定\(k_1,k_2\),询问\(S\)的所以不同的子串中字典序第\(k_1\)小的子串中,起始位置第\(k_2\)小的…

机器过审服务的实现

在视频推荐系统中,用户上传的视频一般都会先通过审核,然后再由运营精编,之后才是过召回排序等算法模型。由于每天上传视频的数量巨大,全由人工进行审核会耗费大量人力,且人工审核的标准容易浮动,由此催生出…

idea函数被调用

打开一个复杂的程序或者项目进行分析的时候,我们就需要知道一个方法在哪里被调用,用于迅速厘清代码逻辑。操作如下:选中函数,右键,点击Find Usages。 如图: 操作简单,但右键还是没有快捷键方便。…

协同过滤及其优化

目录 一、itemCF 二、userCF 三、Swing 四、Seq Embedding CF 五、Graph Embedding CF 六、深度模型:PDN 七、混合CF——User-Item CF——矩阵分解MF 一、itemCF ItemCF即利用user与item之间的交互行为数据来计算item之间的关联相似度。 1.实现方法&#x…

推荐系统——通用召回模版

推荐算法发展至今,从协同到FM /word2vec embedding,再到用各种图结构、树结构、序列结构去对数据建模,再到当前大热的多兴趣模型、attention机制,目前市面上可以找到的算法已经非常多了,但很多算法之间其实差别并不大&…