首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你所不知道的 Transformer!

你所不知道的 Transformer!

作者头像
红色石头
发布于 2022-01-20 12:54:41
发布于 2022-01-20 12:54:41
5380
举报

作者 | 台运鹏

这是 Transformer 系列第一篇!

参考论文:https://arxiv.org/abs/1706.03762

章节

  • Reasons
  • Self-Attention
    • Multi-Head Attention
  • Positional Encoding
  • Add & Norm
  • Feed Forward
  • Residual Dropout
  • Encoder To Decoder
  • Shared Weights
  • Effect

Reasons For Transformer

新模型的产生往往是为了旧模型的问题所设计的。那么,原始模型的问题有哪些呢?

1、无法并行运算

在transformer之前,大部分应该都是RNN,下面简单介绍一下RNN

可以看出,在计算X2加进去吐出来的值的时候必须要先把X1得出的参数值与X2放在一起才行。换句话说,RNN的计算是必须一个接一个,并不存在并行运算。如果不能并行运算,那么时间和计算成本均会增加。

2、语义表述不清

传统的word2vec通过将词语转换为坐标形式,并且根据距离之远近决定两个词意思的相近程度。 但是在NLP任务中,尽管是同一个词语,但在不同语境下代表的意思很有可能不同。例如,你今天方便的时候,来我家吃饭吧和我肚子不舒服,去厕所方便一下这两句中方便的意思肯定不一样。可是,word2vec处理之后坐标形式就固定了。

3、突出对待

在一个句子中,当我们需要强调某一个部分的时候,word2vec无法为我们做到这些。比如,

The cat doesn't eat the cake because it is not hungry.

The cat doesn't eat the cake because it smells bad.

第一个句子中it强调的是the cat,在第二个句子中it强调的是the cake。

4、长距离信息缺失

尽管RNN处理序列问题很拿手,但如果一个句子很长,那么我要一直把句首的信息携带到句尾,距离越长,信息缺失的可能性就会变大。

Self-Attention

attention的意思是我们给有意义的内容配以较高的权重,那么自己与自己做attention是什么意思?

比如这个句中的"green",self的意思就是说拿这个词与整个句子其他的词语分别算相似程度。如此便考虑了词与上下文和句子整体之间的关系。当然,自己与自己肯定是联系最紧密。我们的目的是让机器能够判定出某个词语与整个句子之间的关系。

那么,如何计算self-attenion呢?

首先将词编码成向量,总不大可能直接将词输进去。其次定义三个矩阵, 这三个矩阵分别代表了Query,Key,Value,分别代表去查询的,被查询的以及实际的特征信息。W的意思是权重的意思,可以类比于梯度下降,权重一般都是初始化一个参数,然后通过训练得出。最后用词向量与矩阵分别做点积即可得到q1,q2,k1,k2,v1,v2。

用q1,q2分别与k1,k2的转置做点积,q代表的要查的,而k是被查的。如此便可得到两者的关系了。

注意力一共分为additive attention和这里提到的dot product attention,那么为什么偏要用后者而非前者呢?

因为内积在实际中可以用高度优化矩阵运算,所以更快,同时空间利用率也很好。在此,简要解释一下内积可以表示两向量关系的原因,在坐标系中,当两个向量垂直时,其关系最小,为0。其实就是cos为0。假如a1,a2两个向量很接近,那么,它们之间的夹角会很小,可知cos就很大,代表联系就越紧密。

在K的维度很小的时候,两种注意力机制几乎一致,但是当K的维度上升之后,发现内积效果开始变差。其实,可以联系一下Softmax图像,当值变得很大的时候,梯度变化量几乎很难观察到,又被称为梯度消失问题,这是为什么做scale的第一个原因。

在论文中提到

两者做点积之后还需要除以矩阵K的维度开根号,Q,K,V矩阵维度是q x d_k,p x d_k,p x d_v,softmax是沿着p维进行的,但是很多时候大方差会导致数值分布不均匀,经过softmax之后就会大的愈大,小的愈小,这里除以一个矩阵K的维度其实类似于一个归一化,让它的方差趋向于1,分布均匀一点,这是第二个原因,所以在原paper里面又叫做Scaled Dot-Product Attention

那为什么除以一个矩阵K的维度开根号能使方差变为1呢?首先对于随机分布的q,k,方差均为1,期望均为0。我们把特定的一个q_i,k_i看成X,Y。

那么q与k做点积之后的结果均值为0,方差为d_k。方差太大不稳定,所以除以矩阵K的维度开根号,参照链接(https://www.zhihu.com/question/339723385) 。

例如 v = 0.36v1 + 0.64v2,v1,v2是矩阵V里的。

既然都是矩阵运算,那么都是可以并行加速的。

self-attention除了可以捕获到句子语法特征外,还可以在长序列中捕获各个部分的依赖关系,而同样的处理用RNN和LSTM需要进行按照次序运算,迭代几次之后才有可能得到信息,而且距离越远,可能捕获到的可能性就越小。而self-attention极大程度上缩小了距离,更有利于利用特征。

Multi-head Attention

理解了自注意力,那么什么是多头注意力呢?

类比一下CNN,当我们不断提取特征的时候会用到一个叫卷积核的东西(filter),我们为了最大化提取有效特征,通常选择一组卷积核来提取,因为不同的卷积核对图片的不同区域的注意力不同。比如,我们要识别一张鸟的图片,可能第一个卷积核更关注鸟嘴,第二个卷积核更关注鸟翅膀等等。

在Transformer中也是如此,不同的Q,K,V矩阵得出的特征关系也不相同,同样,不一定一组Q,K,V提取到的关系能解决问题,所以保险起见,我们用多组。这里可以把一组Q,K,V矩阵类比为一个卷积核,最后再通过全连接层进行拼接降维。

Positional Encoding

为什么要进行位置编码呢?

我上面阐述的注意力机制是不是只说了某个词与它所处的句子之间的关系,但是在实际自然语言处理中,只知道这个词与句子的关系而不知道它在哪个位置是不行的。

在这篇论文中,用到了正余弦函数,pos代表的是位置,i是位置编码的维度,d_model是输入的维度,因为位置编码要和输入加在一起,所以两者维度一致。那么,为什么用正余弦呢?原论文中说对于一个已知的PE_pos,对于一个确定的k,PE_pos+k都可以被表示为PE_pos的线性组合。

那么,既然有了公式,那位置编码是算出来的还是学出来的呢?其实算出来和学出来的效果差不多,但是考虑到算出来的可以接受更长的序列长度而不必受训练的干扰,所以在这个模型中,位置编码是通过公式算出来的。

Add & Norm

Add 的意思是残差相连,思路来源于论文Deep residual learning for image recognition(https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html),Norm指的是Layer Normalization,来源于论文Layer normalization(https://arxiv.org/abs/1607.06450)。

论文中指出

That is, the output of each sub-layer is LayerNorm(x + Sublayer(x)), where Sublayer(x) is the function implemented by the sub-layer itself

意思是上一层的输入和输出结果相拼接,然后进行归一化,这样可以更加稳定。肯定会有读者好奇为什么不直接将输出结果归一化,偏要把输入结果拼接到输出结果然后再归一化。

如果还有读者不明白Backprogation,建议看BP,这里简要说明一下,求后向传播的过程中,设残差相连之后输入的层为L层,那么,肯定要求这一层对残差相连的时候的偏导数,而这时x是作为自变量的,所以对于F(x)+ x,求偏导后x就会变为1,那么无论什么时候都会加上这个常数1,这样会一定程度上缓解梯度消失这个问题。

这里选取的是层归一化(Layer Normalization),用CNN举例,假如我们的输入是 ,分别代表样本数量(每一个神经元对应着一个样本),通道数,高度和宽度,那么LN就是对于单独的每一个样本做归一化,计算 个值的均值和标准差然后应用到这个样本里面。归一化的公式如下:

Feed Forward

Feed-Forward Network究竟做了啥呢?

首先它会引入RELU进行非线性变化,也就是公式前半部分所为,而且经过这一层之后会被升维,之后把这一层的结果连接到下一层进行线性变化,同时进行降维,保证输入输出维度一致。

Residual Dropout

在此模型中还在输入,输出层和位置编码拼接中采用了dropout,这里的比例是0.1。

Encoder To Decoder

接下来要把左侧的编码器和右侧的解码器进行相连,细心观察图会发现只有两个箭头到了右边,这两个箭头代表的是K,V矩阵,Q矩阵由右侧解码器提供。

另外,解码器会MASK掉序列的某些部分,因为如果要判断机器是否真正理解了整段句子的意思,可以把后面遮掉,它如果猜的出来,那么说明机器理解了。具体来说,对于位置i,通常会将i+1后面的全都MASK掉,这样机器就是从前面学到的,它没有提前看到后面的结果。

其他结构与编码器一致,最后再进行线性变化,最终用softmax映射成概率。

Shared Weights

我们需要把输入和输出转换为向量表示,而向量表示的方法是提前学到的。此外,最后用的线性转换以及softmax都是学出来的。和常规的序列模型一致,输入输出以及线性转换用的权重矩阵是共享的,只不过在输入输出层用的时候乘以模型维度开根号。

Effect

一般来说,维度d肯定比序列长度n大很多,所以每一层的复杂度此模型吊打RNN。模型结果对比没多说的,几乎是碾压式的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Pre-Training】关于 Transformer 那些的你不知道的事
本博客 主要 是本人在学习 Transformer 时的「所遇、所思、所解」,通过以 「十六连弹」 的方式帮助大家更好的理解 该问题。
阿泽 Crz
2020/07/29
9300
【Pre-Training】关于 Transformer 那些的你不知道的事
Transformer (Attention is all you need) 详解
在之前的博客中有简单讲到Transformer,这篇博客将会专门详细的一起看看内部的计算与实现。
大鹅
2021/08/26
2.7K1
AI生成中Transformer模型
在深度学习中,有很多需要处理时序数据的任务,比如语音识别、文本理解、机器翻译、音乐生成等。
Dlimeng
2023/12/20
8050
AI生成中Transformer模型
NLP界最强特征提取器--Transformer
前面介绍NLP领域词向量技术的时候提到了目前最炙手可热的语言模型BERT,而BERT之所以能取得这样的瞩目成就,离不开其采用的超强特征提取器Transformer。
流川枫
2020/04/24
5.2K0
保姆级教程:硬核图解Transformer | 留言送书
再比如 OpenAI 的 DALL·E,可以魔法一般地按照自然语言文字描述直接生成对应图片!
磐创AI
2021/01/27
1.2K0
保姆级教程:硬核图解Transformer | 留言送书
谷歌transformer模型简单介绍
谷歌的Transformer模型(2017年提出)是一种基于自注意力机制的神经网络架构,取代了传统的RNN和CNN,能并行处理序列数据。其核心是多头自注意力机制,结合编码器-解码器结构,高效捕捉长距离依赖关系。通过位置编码保留序列顺序信息,显著提升了机器翻译等任务的性能。该模型成为BERT、GPT等现代NLP技术的基础,并扩展至多模态领域。
zzh-dahai
2025/07/04
1140
音视频开发之旅(89) - Transformer论文解读和源码解析
Transformer是续MLP RNN CNN后又一个影响深远的模型,  之前CNN RNN基本上都在各自的领域发光发热,  但是Transformer 在很多领域都有着很广泛的应用. eg: chatgpt  llama等语言大模型, sd文生图模型, 以及多模态 llava等. 我们最近探索的视频&图像画质评测以及画质增强很多算法也都是基于Transformer. 所以加强对Transformer学习理解和应用迫在眉睫.
音视频开发之旅
2024/09/07
1660
音视频开发之旅(89) - Transformer论文解读和源码解析
【DL】Self-Attention与Transformer
答:编码器-解码器(Encoder-Decoder)模型最初是由Cho等提出应用在机器翻译中。由于在机器翻译中是文本到文本的转换,比如将法语翻译成英语,Sutskever等也称编码器-解码器模型为序列到序列学习(Seq2Seq)。
yuquanle
2020/02/25
1.2K0
《Attention Is All You Need》
本文是对Google2017年发表于NIPS上的论文"Attention is all you need"的阅读笔记.
JNJYan
2019/01/18
9310
Transformer
Transformer来自于谷歌的工作attention is you need!
opprash
2020/01/14
9000
想研究BERT模型?先看看这篇文章
序列转换方式由基于复杂递归神经网络(RNN)和卷积神经网络(CNN)的编码器和解码器模型主导。表现最佳的模型也只是通过一个注意力机制来连接了编码器和解码器。我们提出一个新的简单网络架构——Transformer。相比表现最佳的模型,该架构仅仅基于注意力机制,完全摒弃了递归和卷积。从两个机器翻译任务的实验结果显示,Transformer的效果更优秀,同时有更好的并行性,显著的减少了训练的时间。我们的模型在WMT2014年发布的“英-德”翻译任务上达到了28.4 BLEU【注解1】,超越了该任务上现有的最好的记录2个BLEU,包括总体效果。在英-法翻译任务上,我们的模型在8块GPU上训练了3.5天,并创造了单模型最好BLEU分数——41.8。相比文献中的最佳模型,这个训练成本不高。Transformer在其它任务上也有好的泛化能力,我们将其应用于English constituency parsing(英语成分句法分析),无论在大量的训练数据上还是有限的训练数据上都获得了成功。
AI粉嫩特工队
2019/09/23
8370
想研究BERT模型?先看看这篇文章
Transformer的基本原理
Seq2Seq[1]框架最初是在神经机器翻译(Neural Machine Translation,NMT)领域中提出,用于将一种语言(sequence)翻译成另一种语言(sequence)。其结构如下图所示:
felixzhao
2022/09/26
1.3K0
Transformer各层网络结构详解!面试必备!(附代码实现)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
mantch
2019/09/29
2.8K0
Transformer各层网络结构详解!面试必备!(附代码实现)
【NLP自然语言处理】深入探索Self-Attention:自注意力机制详解
self-attention是一种通过自身和自身进行关联的attention机制, 从而得到更好的representation来表达自身.
小言从不摸鱼
2024/11/24
4060
【NLP自然语言处理】深入探索Self-Attention:自注意力机制详解
【留言送书】跟我一起从源码学习Transformer!
近几年NLP领域有了突飞猛进的发展,预训练模型功不可没。当前利用预训练模型(pretrain models)在下游任务中进行fine-tune,已经成为了大部分NLP任务的固定范式。Transformer摒弃了RNN的序列结构,完全采用attention和全连接,严格来说不属于预训练模型。但它却是当前几乎所有pretrain models的基本结构,为pretrain models打下了坚实的基础,并逐步发展出了transformer-XL,reformer等优化架构。本文结合论文和源码,对transformer基本结构,进行详细分析。
lujohn3li
2021/01/12
6400
Transformer 原理解析
本文是对 Transformer 原始论文( Attention Is All You Need )的解读。
口仆
2020/08/17
1.7K1
Transformer 原理解析
【组队学习】Task02:学习Attention和Transformer
datawhale8月组队学习 -基于transformers的自然语言处理(NLP)入门
诡途
2022/01/07
4560
【组队学习】Task02:学习Attention和Transformer
Transformer 模型:入门详解(1)
众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是 BERT、GPT 和 T5 及其变体等革命性架构的基石。正如许多人所说,NLP 正处于黄金时代,可以说 transformer 模型是一切的起点。
数据科学工厂
2023/03/21
1.1K0
Transformer 模型:入门详解(1)
Attention Is All You Need
主流的Seq-Seq的模型通常采用RNN或者是CNN,一般在网络结构中都会用到encoder和decoder, 效果比较好的模型会通过attention(注意力机制)连接encoder和decoder。但是这种网络结构也存在一些问题:
张凝可
2019/08/22
6600
Transformer 工作原理
Transformer 是一种基于 自注意力机制(Self-Attention) 的深度学习模型架构,最初用于自然语言处理(NLP),但现已扩展到计算机视觉、语音处理等领域。以下是 Transformer 的工作原理及其核心机制的详细说明:
Linux运维技术之路
2025/02/04
5090
Transformer 工作原理
相关推荐
【Pre-Training】关于 Transformer 那些的你不知道的事
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档