算法面试之transformer的结构和位置编码

1.结构

在这里插入图片描述在这里插入图片描述
Encoder和Decoder均由6个相同的层组成,可将上图简化为下图表示:(Encoder的输出与每个Decoder相连)
Encoder的每一层又包含两个sub-layers:
multi-head self-attention mechanism
简单的全连接层
Decoder的每一层除了在上述两个sub-layers的中间再插入一个encoder-decoder attention sub-layer。
在这里插入图片描述

2.位置编码(Positional Encoding)

仅仅只使用自注意力机制会丢失文本原有的序列信息
位置编码 来刻画数据在时序上的特征
在这里插入图片描述
横坐标表示输入序列中的每一个Token,每一条曲线或者直线表示对应Token在每个维度上对应的位置信息。在左图中,每个维度所对应的位置信息都是一个不变的常数;而在右图中,每个维度所对应的位置信息都是基于某种公式变换所得到。
换句话说就是,左图中任意两个Token上的向量都可以进行位置交换而模型却不能捕捉到这一差异,但是加入右图这样的位置信息模型却能够感知到。例如位置20这一处的向量,在左图中无论你将它换到哪个位置,都和原来一模一样;但在右图中,你却再也找不到与位置20处位置信息相同的位置

为什么transformer没用position embedding 而是position encoding:主要是transformer没有bert数据量大 encoding可能效果和embedding差不多

3.Encoder

对于Encoder部分来说其内部主要由两部分网络所构成:多头注意力机制和两层前馈神经网络。
self-attention能帮助当前节点不仅仅只关注当前的词,从而能获取到上下文的语义

同时,对于这两部分网络来说,都加入了残差连接,并且在残差连接后还进行了层归一化操作。这样,对于每个部分来说其输出均为在这里插入图片描述
,并且在都加入了Dropout操作。

·为什么加入残差
堆叠了很多层,容易梯度消失或是梯度爆炸。
·为什么Layer Norm
数据经过一层后偏差会越来越大,需要归一化防止落入激活函数饱和区。

4.Decoder

在这里插入图片描述在Decoder中一共包含有3个部分的网络结构。最上面的和最下面的部分(暂时忽略Mask)与Encoder相同,只是多了中间这个与Encoder输出(Memory)进行交互的部分,作者称之为“Encoder-Decoder attention”。对于这部分的输入,Q来自于下面多头注意力机制的输出,K和V均是Encoder部分的输出(Memory)经过线性变换后得到。而作者之所以这样设计也是在模仿传统Encoder-Decoder网络模型的解码过程。因此每个位置都能参与所有位置的attention计算

5.Encoder 和 Decoder 的区别

Mask 不同:Decoder 部分采用一个上三角掩码,来避免提前观察到后续位置
Transformer-Decoder 比 Encoder 多了一个融合层

6.多层enc-dec结构

在这里插入图片描述
多层的Transformer网络结构图(原论文中采用了6个编码器和6个解码器)
可以发现,它真的就是堆叠后的形式。不过需要注意的是其整个解码过程。在多层Transformer中,多层编码器先对输入序列进行编码,然后得到最后一个Encoder的输出Memory;解码器先通过Masked Multi-Head Attention对输入序列进行编码然后将输出结果同Memory通过Encoder-Decoder Attention后得到第1层解码器的输出;接着再将第1层Decoder的输出通过Masked Multi-Head Attention进行编码,最后再将编码后的结果同Memory通过Encoder-Decoder Attention后得到第2层解码器的输出,以此类推得到最后一个Decoder的输出。值得注意的是,在多层Transformer的解码过程中,每一个Decoder在Encoder-Decoder Attention中所使用的Memory均是同一个

7.中间层

在multi-head self-attention和FFN层之间,还有一个“intermediate layer”,即中间层,这个中间层将前面Attention-layer的hidden size扩大了4倍,然后再做一次非线性变换(即过一个激活函数,如gelu、relu),再将hidden size变回原size。中间这部分的功能,我个人理解,有点类似于“特征组合器”,增大神经元个数,增强Transformer对于distributed的文本特征的组合能力,从而获取更多、更复杂的语义信息。此外,中间层是Transformer中唯一一个过了激活函数的layer,所以也引入了非线性信息,当然从理论上也对提升模型的拟合不同语义信息能力有帮助。

上一篇:算法面试之seq2seq、attention、beam search
下一篇:算法面试之transformer的Attention和多头自注意力机制

注:本专题大部分内容来自于总结,若有侵权请联系删除。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
算法工程师面试中,可能会遇到有关Transformer模型的问题。Transformer模型是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务。以下是一些可能被问到的问题及其答案: 1. 请简要介绍一下Transformer模型。 Transformer模型是一种基于注意力机制的深度学习模型,用于处理序列数据,特别是在自然语言处理任务中取得了巨大成功。它由编码器和解码器两个部分组成,每个部分都包含了多个注意力机制层。编码器负责将输入序列转换为一个抽象的表示,解码器则根据这个表示生成目标序列。Transformer模型摒弃了传统的循环神经网络(RNN)结构,通过全局关注输入序列中的所有位置,从而能够处理长距离依赖关系。 2. Transformer模型中的非线性来自哪里? Transformer模型中的非线性主要来自于激活函数,其中一种常用的激活函数是GELU(Gaussian Error Linear Unit)。GELU激活函数在ReLU的基础上增加了随机因素,这使得输入值越小越容易被“mask”掉,从而引入了非线性。通过这种激活函数,Transformer模型能够更好地处理不同位置的特征。 3. 在Transformer模型中,self-attention是如何实现的? 在Transformer模型中,self-attention是通过计算输入序列中每个位置与其他位置之间的相关性得到的。具体来说,通过对输入序列中的每个位置进行线性变换,得到查询(query)、键(key)和值(value)三个向量。然后,通过计算查询向量与键向量的点积,并经过softmax归一化,得到每个位置与其他位置的注意力权重。最后,将注意力权重与值向量相乘并求和,得到最终的输出。 综上所述,算法工程师面试中可能会涉及到Transformer模型的基本原理、非线性来源以及self-attention的实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

持续战斗状态

很高兴可以帮到你

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

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

打赏作者

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

抵扣说明:

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

余额充值