找回密码
 会员注册
查看: 31|回复: 0

Transformer论文通俗解读:FFN的作用

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-10 11:25:12 | 显示全部楼层 |阅读模式
在经过前面3节关于Transformer论文的解读之后,相信你对提出Transformer架构的这篇论文有了一定的了解了,你可以点击下面的链接复习一下前3节的内容。《Attentionisallyouneed》通俗解读,彻底理解版:part1《Attentionisallyouneed》通俗解读,彻底理解版:part2《Attentionisallyouneed》通俗解读,彻底理解版:注意力机制的运算总的来说,这篇论文虽然重要且经典,但很多关于Transformer架构的技术细节并没有介绍的很清楚,因此读起来有些晦涩。之前的几节文章在通读这篇论文时,采用的是原文+注解的方式来进行的。这么做的目的也很简单:帮助你了解这篇论文中每一部分的写作意图是什么。至于论文中没有详细阐述的技术细节内容,本专栏后续会继续完善。本节开始解读一下论文的3.3节,主要是FFN层。3.3节:Position-wiseFeed-ForwardNetworks(FFN)Inadditiontoattentionsub-layers,eachofthelayersinourencoderanddecodercontainsafullyconnectedfeed-forwardnetwork,whichisappliedtoeachpositionseparatelyandidentically.ThisconsistsoftwolineartransformationswithaReLUactivationinbetween.FFN(x)=max(0,xW1+b1)W2+b2Whilethelineartransformationsarethesameacrossdifferentpositions,theyusedifferentparametersfromlayertolayer.Anotherwayofdescribingthisisastwoconvolutionswithkernelsize1.Thedimensionalityofinputandoutputisdmodel=512,andtheinner-layerhasdimensionalitydff=2048.关于FFN层,作者就在第3.3节写了上面一段话(真的非常简单😓)。每次看到这,都会触发我感慨一下:我之前也发表过英文论文,在自己发布的论文中,尤其是自己原创的内容时,恨不得将每一处细节都介绍清楚,恨不得把文章写的篇幅超长,以此来体现我的文章的专业和创新性(😅)。作者这种一笔带过的写法真的让人不太习惯。不过后来和其他人聊这个话题,有些人说可能是限于发表期刊的篇幅要求,导致很多细节不能写的过多(😝)。作者在这一段就介绍了FFN层的基本结构,并且默认读者对于其中的算法是非常了解的。在注意力层后面,无论是encoder结构还是decoder结构中,都设计了一个全连接前馈网络层(fullyconnectedfeed-forwardnetwork),也就是FFN层(如下红框所示)。FFN层实际上就是一个线性变换层,用来完成输入数据到输出数据的维度变换(细节这里不介绍,相关链接暂时留白)。这个FFN层是一个顺序结构:包括一个全连接层(FC)+relu激活层+第二个全连接层,其公式可以表示为:FFN(x)=max(0,xW1+b1)W2+b2。上式中,xW1+b1 为第一个全连接层的计算公式,max(0,xW1+b1) 为relu的计算公式,max(0,xW1+b1)W2+b2 则为第二个全连接层的计算公式。随后作者提到,添加这个FFN层的作用,主要是通过第一个FC层将输入词向量的512维变换到2048维,随后通过第二个FC层再将2048维变换回512维,从而保证FFN的输入输出维度一致。FFN层的结构展开可以表示如下:为什么要加FFN?你可能会有疑惑?既然FFN的输入和输出的维度都一样,那为什么还要加这个结构呢?首先从FFN中添加的Relu激活函数看起。如果你学过《AI视觉入门专栏》的话,肯定对Relu这一类的激活函数非常熟悉。Relu激活函数的重要作用是为模型施加非线性因素,从而可以使模型拟合出更加复杂的关系。关于线性和非线性的内容,可以参考这里 和 这里。因为FFN层由两个线性变换层(FC)和一个非线性激活函数(ReLU)组成,通过在两个FC中间添加非线性变换(这是非常常见的操作),可以增加模型的表达能力,使模型能够捕捉到复杂的特征和模式。怎么理解“使模型能够捕捉到复杂的特征和模式”呢?这就得看Relu前后的两个的FC层了:FC层线性变换的主要作用可以理解为数据的升维和降维,这一点通过FC的算法就可以看出来。设想一下,原始输入的特征维度为512维,也就是FFN之前的注意力层提取了单词(token)的512维特征。但很多时候512维不够用,我们希望模型可以提取出更多维度的特征,于是,通过FFN两个相邻FC层的运算,可以将512维扩展到2048维(FFN的隐层),随后再降维到512维作为FFN的输出。这种维度的一升一降,带来了两个变化:增加了两个可学习的权值矩阵,也就是上面表达公式中的两个 W 矩阵。通过和权值矩阵的相乘将输入512维度向量映射到隐层的2048维度空间中,使得输入数据可以完成更加丰富的特征表达和运算。虽然FFN的输入输出维度都是512,但是输出的512维度特征和输入的512为特征是不一样的。输出的512维度特征是在隐层空间(2048)的基础上进一步融合得到的。可以说,输出的512维比输入的512维具有更加丰富和准确的特征表示。如果把FFN中的隐层2048维看做2048个极具智慧的头脑,那么经过这2048个极具智慧的大脑的头脑风暴后,将输入512维特征进行了再加工,那么很明显输出就更具有代表性了。所以,总结一下FFN的作用:增强特征提取能力:这主要就是FC的线性变换到2048的高维空间带来的好处。提高计算效率:这一点是FC算法决定的。FC层的计算是可以并行的,这就使FFN层可以在GPU上高效地并行计算。相对于传统的循环神经网络(RNN)中由于时间步长的依赖导致无法并行的情况,基于Transformer结构的计算便可以大幅完成并行优化,从而极大提高模型的训练和推理效率。防止模型退化:这一点主要是在FFN中引入了Relu这种非线性激活函数带来的。如果没有FFN层的存在,Transformer模型可能会退化为简单的线性变换模型,从而失去捕捉复杂特征的能力。FFN层通过引入非线性变换,保证了模型能够保持其表达能力,有效捕捉到输入数据中的复杂特征。我的技术专栏已经有几百位朋友加入了。如果你也希望了解AI技术,学习AI视觉或者大语言模型,戳下面的链接加入吧,这可能是你学习路上非常重要的一次点击呀CV视觉入门第三版(细化版)完成我的Transformer专栏努力更新中最后,送一句话给大家:生活不止眼前,还有诗和远方,共勉~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-5 09:41 , Processed in 0.576235 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表