自然语言处理(1):Transformer模型实现原理详解

划时代的产物

在2018年,谷歌推出了BERT模型之后,该模型在11项NLP任务中夺得STOA结果,引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最早是用于机器翻译任务,当时达到了STOA效果。

Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行。并且Transformer可以增加到非常深的深度,充分发掘DNN模型的特性,提升模型准确率。在本文中,我们将研究Transformer模型,把它掰开揉碎,理解它的工作原理。

近期发现,在图像识别领域,Transformer表现出来的效果出乎意料的好,竟然有取代CNN的势头!

传统的解决方案遇到的问题

传统的RNN

  • 传统的RNN有依赖关系,不能实现并行,但是Transformer可以
  • Self-Attention注意力机制来进行并行计算,在输入与输出相同
  • 输出的结果是同时被计算出来的,现在基本已经取代了RNN

模型对比

在这里插入图片描述

传统的word2vec

  • 使用词向量模型,是预先对词语训练好词向量,然后这个向量就不变了,然后去寻找文本中的词,将其转换为词向量,再输入到RNN中网络模型中。

    但是呢,相同的词在不同的语境中,表达的意思可能不同,例如:干哈捏。

  • 使用BERT模型,可以考虑到上下文的影响,在不同的输入当中,对应词向量也就不同了哦。太牛了吧!

如图:两句话中的it就是不同的,指代的意思也不同!

在这里插入图片描述

注意力机制的作用

提取特征的时候,什么是重点,就是去发现你的数据的重点在哪。如下图,我们前面输入了一个序列,当我不强调哪个词重要,我得到的结果可能是平行的。

在这里插入图片描述

但是呢,这个判断过程不是你认为加进去的,是交给计算机,让他去判断的哦!!!

在一句话中,每一个词(中文是字),都会结合上下文判断句子中其余词和自己关系的远近,如图,it中animal就关系影响很大:

在这里插入图片描述

self-attention如何计算

整体流程如下

在这里插入图片描述

①首先将x1、x2两个词进行编码得到向量

在这里插入图片描述

②经过计算得到每个词的三个特征矩阵Q、K、V

在这里插入图片描述

Q:第一个词做了啥贡献、第二个词做了啥贡献,就要去查一查和第一个词关系咋样,和第二个词关系咋样。

K:被查的,q1和k1就是第一个词的与第一个词的关系,q1和k2就是第一个词和第二个词的关系。

V:每个关系都查到了,关系大的多点输入,关系少的少点输入,v1就代表x1的特征表达,v2就代表x2的特征表达,表示实际的特征信息

③回顾

在这里插入图片描述

计算q1·k1是使用内积计算的,当线性无关的时候就会垂直,即内积为0,当相关性越大,关系就越大哦!

④最终的value计算

softmax计算流程

分值->e^x->归一化

在这里插入图片描述

计算每一个词语对该词语的影响权重,计算公式:

在这里插入图片描述

然后再计算对应词的value与计算到的权重的乘积之和,就能得到第一个词的影响力。如下图所示:

在这里插入图片描述

在这里插入图片描述

⑤整体回顾

在这里插入图片描述

再次声明:咱们的计算是并行加速计算的,即使用矩阵乘法(不是使用for循环,多low哦)!直接就出来了,是不是很牛批,呜呜呜我爱线代❤️

multi-head(多头机制)的作用

一个词已经得到了一个q、k、v,参考卷积神经网络的卷积和与特征图,我们一组qkv得到了一种特征表达,如果能有多种qkv,我们就能得到多种当前特征的表达。

多头不是越多越好,一般而言是8个。

在这里插入图片描述

堆叠在一起,得到最后的注意力!嘿嘿,机智哦宝贝!!!

在这里插入图片描述

这是两个头,图中可以看到,和自己的注意力是挺大的,离得越远可能就注意力会小一下

在这里插入图片描述

堆叠多层:经过多头机制,一个不太好看的向量转化为了差不多的向量,我们重复多次提取,得到最后好看的向量!

在这里插入图片描述

位置编码与归一化

位置编码

在self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,但是这跟实际就有些不符合了,例如:我今天下午想去打球,肯定下午和打球是重点呀,于是我们希望模型能对位置有额外的认识。

这个人家已经写好了,不用管太多,BERT是使用正弦周期变化来进行位置编码。

归一化

下图所示,self-attention之后呢,有一个LayerNorm归一化,但是,什么叫对层进行归一化??

LayerNorm就是没有Batch概念了,对他的一组数据,使得均值为0,平方差为1。

在这里插入图片描述

虚线部分是连接,用的是基本的残差连接方式,得到两个数据,模型自己去选择,至少不比原来差

在这里插入图片描述

整体梳理

多了Decoder-Encoder-attention机制

在这里插入图片描述

在这里插入图片描述

除了self-attention机制之外,BERT还加入了Decoder-Encoder-attention机制,充分利用数据的特征,通过Q来从解码器中查一查编码器中的K、V对应的是啥。

加入了MASK机制(别透题)

比如使用机器翻译,当前词无法使用后面词的信息,但是又不得不考虑,因此我们引入MASK机制,前面有的我们就能用,后面没有的我们就是当做黑盒子。

在这里插入图片描述

最终输出结果

就是得到一个分类,经过Softmax层即可

在这里插入图片描述

效果展示

在这里插入图片描述

经过训练,计算机可以知道it指代的是什么。天呐,计算机要成神了!!!

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Transformer 模型是一种基于注意力机制(Attention Mechanism)的深度神经网络模型,主要用于自然语言处理任务,如语言建模、机器翻译、文本生成等。相较于传统的循环神经网络(RNN)和卷积神经网络(CNN),Transformer 模型能够更好地处理长序列数据,并且并行化计算效率更高。下面详细介绍 Transformer 模型的原理。 Transformer 模型主要由编码器(Encoder)和解码器(Decoder)两部分组成,其中编码器和解码器都是由多层的自注意力机制(Self-Attention)和前馈神经网络(Feed-Forward Neural Network)组成。 编码器的输入是一段文本序列,经过多层的自注意力机制和前馈神经网络,在每一层中都会生成一个新的表示向量。自注意力机制主要是通过计算文本序列中每个词与其他词之间的注意力得分,来确定每个词在当前上下文中的重要程度,进而计算加权和作为新的表示向量。这样的处理方式能够有效地捕捉序列中每个词的语义信息,并且能够处理长序列数据。 解码器的输入是目标语言的词汇序列,解码器的每一步都会生成一个新的词汇,并且在生成每个词汇时都会考虑前面已经生成的词汇。因此,解码器在每一步中都会通过注意力机制来计算上下文向量,将其与当前输入进行融合,从而生成新的输出词汇。解码器的最终输出是一个完整的目标语言句子。 在 Transformer 模型中,自注意力机制和注意力机制的计算都是通过“多头注意力(Multi-Head Attention)”实现的。多头注意力机制能够同时计算多个不同的注意力,从而更好地捕捉序列中的上下文信息。同时,前馈神经网络也是多层的,并且每一层都会使用残差连接(Residual Connection)和层归一化(Layer Normalization)技术,从而避免梯度消失和梯度爆炸问题。 总之,Transformer 模型通过自注意力机制和前馈神经网络实现了序列到序列的建模,能够有效地处理长序列数据,是目前自然语言处理领域的主流模型之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笼中小夜莺

嘿嘿嘿,请用金钱尽情地蹂躏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值