【经典论文阅读】如何理解Transformers以及Transfomer中的问题和解答————看李沐讲Transformers

本文主要是本人在看李沐讲Transformers中遇到的一些疑问,以及我自己寻找的疑问的答案。有一些问题网上的其他人都已经给出了很完美的答案了,我就作为一个收集,给出链接。Transformer代码的整体实现点这!!!

一、论文中的注意力机制

1.1 为什么论文使用 Scaled Dot-Product Attention?

因为注意力机制一般有两种,additive attention和dot-product attention,文章选择后者是因为实现起来简单,additive attention可以处理query和key不等长的情况

1.2 为什么注意力机制中要除一个 d k \sqrt{d_k} dk 呢?

在这里插入图片描述

这算是一个经典问题了,先看一下上图中的公式,可以看到在Q和K乘完以后,除以一个 d k \sqrt{d_k} dk ,原因是由于在反向传播的过程中需要求softmax函数的导数,但是该函数的导数在输入为类似为x=[0,0,0,1](即某个元素过于大,其他元素都很小)时候,其导数是0,导致反向传播过程中的链式求导为0,使得模型无法继续学习

关于上述回答具体的公式推导来自这里

二、多头注意力机制

2.1 多头注意力的多头是干什么?

沐神解释说由于CNN有一个卷积核就有一个输出通道,每个不同的输出通道分别识别不同的模式,这个是非常好的,为了使注意力机制也有类似的功能,文章采用多头来模拟CNN,使得不同的头提取出不同的特征

2.2 代码中是如何实现多头的?

// 代码不是整体代码,只包含关键步骤方便理解
self.h = 8
self.d_k = 64
self.linears = clones(nn.Linear(d_model, d_model), 4)
query, key, value = [
            lin(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
            for lin, x in zip(self.linears, (query, key, value))
        ]
output =  self.linears[-1](x)

多头本来的意思是使用24个512->64的线形层,每个 Q\K\V 使用8个,把Q,K,V从512映射成8×64,分成8组,分别进行计算注意力,最后再拼起来为512维,再经过一个线形层得到最后的输出,但是代码具体实现不是进行这么多次小矩阵乘法,而是使用一次大矩阵乘法代替8个小举证乘法,具体如下:实际的代码实现是用一个512---->512的大的线形层直接获得8组的总共的输出,再把输出划分为8×64

2.3 自注意力机制的原理以及内涵

具体分析在这个网站,下面有两个图配合配合讲解
在这里插入图片描述
在这里插入图片描述

总结来说,自注意力机制的最后的输出是向量[1.4,1.4,2,1.8,1],这个向量是"早"字词向量经过注意力机制加权求和之后的表示,也就是说此时“早”字这个向量不再是由它本身表示,而是由整个序列中所有的词向量加权表示,这样该向量就蕴含了整个序列的内容,可有效捕获序列中的长距离依赖,无论距离有多远。
PS:这个我具体也说不好,大概意思就是经过注意力机制计算后的向量包含的东西更多,还包含了这个词和序列中其他词的关系

三、归一化

batch normalization和layer normalization
为什么要归一化(Internal Covariate Shift问题)和btach_normalization中这里讲的比较清楚。对于下图。黄色的是layer normalization,蓝色的是batch normalization
在这里插入图片描述

四、Maximum path lengths、per-layer complexity和minimum number of sequential operations的比较

在这里插入图片描述
文中给了上图中的数据,具体每个怎么分析的可以看这里

五、沐神最后总结

  1. 虽然文章的名字叫你只需要注意力,但是实验表明Attention只是起到一个作用,把整个序列的信息给聚合起来,但后面的MLP、残差链接也是缺一不可。
  2. Attention不会对序列的顺序做建模,为什么可以打赢RNN?RNN可以显示的建模序列上的信息,理论上应该比Attention更好?

现在大部分认为Attention用了一个更广泛的归纳偏置,使得它可以处理更多更一般化的信息,使得它可以打赢RNN,但是代价是由于它的假设更一般,使得对数据的抓取信息的能力变差了,以至于说现在需要更大的模型和更大的数据才能得到好的效果

个人感悟

  由于导师最近让我研究计算机视觉的视听多模态方面,在读论文中发现很多算法用的都是Transformers的Encoder,以及有部分算法有位置编码等等,这些都是Transformers中所包含的,所以决定再读Transformers。
  第一次读Transformers是在大三做课程汇报时候,我记得是机器学习这门课,老师让每一个人汇报一篇文献,我选择了Transformers。当时阅读文献只是为了对付作业,草草读完,做了PPT,随便汇报一下就了事,没有详细阅读,更别说什么笔记了。
  现在回想起来总觉得愧对于这个汇报。既然要做了,那就做好,把文章搞明白。最最最关键的是做笔记,写博客,这样哪怕多年后再回头看这篇文章,对于自己不同的地方也能翻看博客复习。
  所以现在给自己定下了目标,对于经典文章要细读,把问题和问题的解答记下来,为自己也能为大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值