24[NLP训练营]Transformer

本文深入解析Transformer模型,探讨其如何实现长距离依赖,自注意力、编码器-解码器注意力及解码器注意力的区别,以及如何编码不同词序。通过具体结构和代码示例,帮助读者全面理解Transformer的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


公式输入请参考: 在线Latex公式

概述

前一节已经讲了Transformer模型的attention机制。并且提出了时序类模型(RNN/LSTM)的缺点,然后这节来看看解决这些个问题的Transformer。
之前paper带读也有一些笔记,估计没这里通俗易懂,就当做二刷吧。
理解Transformer就是要弄清楚下面三个问题:
· How does Transformer implement long-term dependency?(i.e., to replace LSTM time dependency)
· How does self-attention, encoder-decoder attention, decoder attention differs?
· How does Transformer encodes diferent ordering of words
先贴下原文的图:
在这里插入图片描述
里面每个模块的结构:
在这里插入图片描述
可以看到,整个大模型和RNN/LSTM时序模型不一样,句子向量是直接一起输入的,然后可以并行计算,而且它是纵向上的深度模型。

Encoder模块

Transformer模型包含Encoder和decoder两个大模块,
每个Encoder和decoder大模块各自又有很多layer,每个Encoder和decoder的layer有自己的block。
Encoder的block如下图(虚线部分是残差连接):
在这里插入图片描述
上图中对于只注意力机制模块的输入x和输出z是如何运作的可以看上一节最后的例子(这里有一个细节上节没有提,就是加入了位置信息,位置信息是提前定义好的,这里不是concat的操作,而是直接做向量的相加)。
对应的代码也是两个部分:自注意力和前向传播层(主要负责非线性变换)
在这里插入图片描述

MultiHeadAttention

代码中用的MultiHeadAttention不是Self-Attention
实际上很好理解,上节中讨论的一个单词转换为特征向量(上图中的绿色部分)后,输入Self-Attention,这里如果和一套QKV进行计算,得到一个结果,如果和多套QKV计算,就得到多个结果,然后把结果concat后降维,这个过程就是多头注意力,这里的多头表现在多套QKV来进行计算(使用多头的原因是希望模型能够捕获不同的注意力关系)。
注意:单词之间计算score采用的是一个mask来实现的,这个mask和Decoder中的attention使用的mask不一样。
在这里插入图片描述
下面就是一个单词用了8个头的自注意力,得到8个z,然后concat后和权重矩阵 W 0 W^0 W0进行降维,得到最后的Z就是包含了所有多头注意力的结果的向量。这里Z的维度是和原来的输入维度一样。
在这里插入图片描述

Add & Normalize

下面看模块中的另外一个部分。
在这里插入图片描述
对应代码:
在这里插入图片描述
注意代码中有对应的残差。

Decoder模块

在这里插入图片描述
从结构上看可以重用Encoder端的自注意力和FF模块。
在这里插入图片描述
从代码上看,Encoder-Decoder Attention用的框架和Self-Attention是一样的。实际上Self-Attention是针对句子内部各个单词之间的关系(这里从参数可以看出来,所有的输入都是dec_inputs),Encoder-Decoder Attention是针对Encoder和Decoder之间的关系。

dec_outputs,dec_self_attn=self.dec_self_attn(dec_inputs, dec_inputs, dec_inputs, dec_self_attn_mask)
dec_outputs,dec_enc_attn=self.dec_enc_attn(dec_outputs, enc_outputs, enc_outputs, dec_enc_attn_mask)

从代码中看到Self-Attention的输入都是:dec_inputs, dec_inputs, dec_inputs
Encoder-Decoder Attention的输入是:dec_outputs, enc_outputs, enc_outputs
只不过用不同的mask来进行初始化。
相当于找到当前Decoder的输出与Encoder的各个输出之间的关系。例如,输入9个单词,经过Encoder得到输出:9个Z,然后用Decoder和这九个Z分别两两进行QKV的attention操作

位置信息

关于位置信息是用位置向量与词向量进行相加(不是点乘也不是concat)来处理的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值