Transformer笔记/教程及扫盲--狸

文章详细介绍了Transformer的结构,包括Self-Attention的ScaledDot-ProductAttention和Multi-HeadAttention,以及Encoder和Decoder的工作原理。文中还探讨了不同类型的Mask在Transformer中的应用,并强调了理解各个组件的维度变化的重要性。虽然目前没有附带代码,但作者计划逐步添加和完善笔记。
摘要由CSDN通过智能技术生成

简介


网上Transformer的教程非常多,不同博主对Transformer关注的细节不一样。在写这篇文章之前,我看过李宏毅、李沐;b站up主deep_thoughts、蓝斯诺特、范仁义-AI编程;csdn博主Forforth、Queen_sy;知乎博主Jack CC、JFF比JF更强壮等等。

我出这个教程的目的是想:
(1) 加深自己对Transformer的印象;
(2) 把Transformer以更直观的形式展现给初学的读者,包括我自己画的图片和维度变化,帮助读者扫盲和更清晰更直观地理解Transformer;
(3) 拜托大佬提出意见和指正有问题的地方,来让我更正现有认知。

这篇笔记里,几乎都是图片,图里的内容都是我根据一些教程和代码总结而来的,除了论文原图和李宏毅老师视频的图片,其他都是我自己写和画的,画的我心累啊啊啊啊啊啊啊!

暂时还没有代码,以后慢慢附上,同时也会根据大家意见不断完善笔记。

看教程之前建议先看过有关的Transformer的教学视频,比如李宏毅的等等!

1. Transformer整体结构

Attention Is All You Need中的图片
这张图大家应该刷过很多次了,可能乍一看有点看不懂。。。
Transformer又分为Encoder和Decoder两部分:在这里插入图片描述

然后让我们换一种形式表示上面的图:
在这里插入图片描述
其中:
在这里插入图片描述

你是不是有点清晰了?还是依旧看得一头雾水?没事!
我们先把Encoder和Decoder放一放,到后面再讲。
我们先把细节部分讲一讲
 
接着看~
 
 

2. Self-Attention

2.1 Scaled Dot-Product Attention

如果你看过李宏毅的视频或网上的教学,你可能会见过这张图
在这里插入图片描述

然后就会看到矩阵运算…
如果你不知道为什么上图其实就是矩阵运算,可以看一下我画的图:
在这里插入图片描述

上图我们展示了(1)Q K.T和(2)A’ V的运算,其中A’ = softmax(Q K.T / sqrt(d_k))
那么softmax(Q K.T / sqrt(d_k)) V就是self-attention的公式了。

我们来详细看看self-attention的公式及其维度细节。
在这里插入图片描述
其实你会发现,self-attention的运算是在Q, K, V的最后两个维度进行的,最后输出结果的最后两个维度是len_q, d_v
在multi-head attention中,调用self-attention之后,再加上.trans.concat) W_0就可以了

2.2 Multi-Head Attention

【对应部分】
在这里插入图片描述

论文中multi-head attention的图里,是每个head分别做self-attention,再concat在一起。

但是在代码中每个head使用的是一个self-attention,用一条公式表达就是这样子:
在这里插入图片描述
具体维度变化参考Self-Attention部分的图中的“MHA”红框,最后得出维度是[batch_size, len_q, d_model]
可以看到,malti-head attention中需要学习的参数只有4个:W_Q, W_K, W_V, W_0,和len_q, len_k, len_v无关!

实现流程是这样子的:
在这里插入图片描述
 
 

3. FeedForward

【对应部分】
在这里插入图片描述

论文中的公式,其实就是这个意思。不多讲,看看ReLU的定义
在这里插入图片描述
 
 

4. Mask

Transformer里的mask有3个,分别在每一个attention中,即:(1) Encoder的Multi-Head Attention的mask;(2) Decoder的Masked Multi-Head Attention的mask;(3) Decoder的Multi-Head Attention的mask。
【对应部分里使用】
在这里插入图片描述

在mask中我们发现,而<P> * k_j不会被mask,而q_i * <P>会被mask掉

下面注意看维度!

4.1 (1) Encoder的Multi-Head Attention的mask 和 (3) Decoder的Multi-Head Attention的mask

这里我看见有2种写法

4.1.1 第一种写法

在这里插入图片描述

4.1.2 第二种写法

在这里插入图片描述

4.2 (2) Decoder的Masked Multi-Head Attention的mask

第1个mask和上面的第一种写法一样,第2个mask是上三角矩阵,
然后两个mask取并集!
在这里插入图片描述

5. Encoder和Decoder

5.1 Encoder和Decoder中的运作和维度

让我们重新上图
在这里插入图片描述

然让们看看Encoder和Decoder中的运作和维度
在这里插入图片描述
再接一张图
在这里插入图片描述

5.2 Encoder和Decoder中3个attention里的运作和维度

然后看看Encoder和Decoder中3个attention里的运作和维度
在这里插入图片描述
再接一张图
在这里插入图片描述

5.3 Train和Test或Predict的流程图

(该部分还存疑,欢迎大佬们来指正!)
在这里插入图片描述

 
 

结语

可能这篇文章对于没接触过transformer的人看起来会一头雾水,我本身的目的是想把它当成入门教程和初学扫盲的,但是我感觉这篇文章可能并不适合入门。不过我会慢慢改善的!请大家提意见~
 
 

References

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值