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

在经过前面3节关于 Transformer 论文的解读之后,相信你对提出 Transformer 架构的这篇论文有了一定的了解了,你可以点击下面的链接复习一下前3节的内容。

《Attention is all you need》通俗解读,彻底理解版:part1

《Attention is all you need》通俗解读,彻底理解版:part2

《Attention is all you need》通俗解读,彻底理解版:注意力机制的运算

总的来说,这篇论文虽然重要且经典,但很多关于Transformer 架构的技术细节并没有介绍的很清楚,因此读起来有些晦涩。

之前的几节文章在通读这篇论文时,采用的是原文+注解的方式来进行的。这么做的目的也很简单:帮助你了解这篇论文中每一部分的写作意图是什么。

至于论文中没有详细阐述的技术细节内容,本专栏后续会继续完善。本节开始解读一下论文的3.3节,主要是 FFN 层。

3.3 节:Position-wise Feed-Forward Networks (FFN)

In addition to attention sub-layers, each of the layers in our encoder and decoder contains a fully connected feed-forward network, which is applied to each position separately and identically. This consists of two linear transformations with a ReLU activation in between. FFN(x) = max(0, xW1 + b1)W2 + b2 While the linear transformations are the same across different positions, they use different parameters from layer to layer. Another way of describing this is as two convolutions with kernel size 1. The dimensionality of input and output is dmodel = 512, and the inner-layer has dimensionality df f = 2048.

关于 FFN 层,作者就在第 3.3节写了上面一段话(真的非常简单😓)。

每次看到这,都会触发我感慨一下:我之前也发表过英文论文,在自己发布的论文中,尤其是自己原创的内容时,恨不得将每一处细节都介绍清楚,恨不得把文章写的篇幅超长,以此来体现我的文章的专业和创新性(😅)。

作者这种一笔带过的写法真的让人不太习惯。不过后来和其他人聊这个话题,有些人说可能是限于发表期刊的篇幅要求,导致很多细节不能写的过多(😝)。

作者在这一段就介绍了 FFN 层的基本结构,并且默认读者对于其中的算法是非常了解的。

在注意力层后面,无论是encoder结构还是decoder结构中,都设计了一个全连接前馈网络层( fully connected feed-forward network),也就是 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 的输出。

这种维度的一升一降,带来了两个变化:

  1. 增加了两个可学习的权值矩阵,也就是上面表达公式中的两个 矩阵。通过和权值矩阵的相乘将输入 512 维度向量映射到隐层的 2048 维度空间中,使得输入数据可以完成更加丰富的特征表达和运算。

  2. 虽然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专栏努力更新中

    最后,送一句话给大家:生活不止眼前,还有诗和远方,共勉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合合信息“大模型加速器”亮相2024世界人工智能大会

文章目录 📑引言一、大模型发展的挑战数据稀缺问题 二、大模型“加速器”解决方案概述文档解析引擎的特征 三、文档解析引擎的优势3.1 高速处理能力3.2 智能理解文档结构3.3 多种数据类型支持3.4 高精度数据提取3.5 应用广泛,适应性强 四、复杂图表解析4…

Auslogics Disk Defrag Pro v11激活版下载、安装、使用教程 (磁盘碎片整理工具)

前言 Auslogics Disk Defrag Pro 是一款支持 FAT16 文件系统的磁盘碎片整理工具,它可以快速整理磁盘碎片,使磁盘空间更加整洁,显著提升电脑的运行速度。该软件无需任何分析阶段,并且速度比大多数其他碎片整理软件更快。它可以帮助…

stm32 开发板可以拿来做什么?

STM32开发板可以用来做许多不同的事情,具体取决于您的应用需求和编程能力。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学,敲个22就可…

详解太阳能控制器PWM / MPPT极简方案其设计要点,台湾远翔FP7209升压24V,30V,36V,42V,48V

文章目录 前言 一、单节电池升压9V、12V、24V方案 二、单节电池升压30V,36V,42V,48V方案 三、芯片介绍 FP7209X与FP7209M的区别: 四、单节电池升压成为市面上太阳能控制器首选的原因? 总结 前言 太阳能是一种环保…

定时器TIM配置微妙延时函数

定时器TIM配置微妙延时函数 文章目录 定时器TIM配置微妙延时函数开胃小菜(BOOT0、BOOT1)Boot0Boot1(如果有) 三种定时器高级控制定时器(TIM1,TIM8)通用定时器(TIM2, TIM3, TIM4, TIM…

基于Intel Chainer 和姿势检测的动作识别(人体、面部、手部关键点识别动作识别)

项目概述 目标 开发一个能够实时或近实时识别特定动作的系统,如运动姿势、表情变化或手势控制。实现对人体关键点的精确追踪,以便于分析和理解人的动态行为。 技术栈 Intel硬件:可能使用Intel的高性能计算平台,如Xeon处理器或…

【国潮】国产化系统甲方问题总结

持续更新。。。。。。。。。。。。。。。 【国潮】国产化系统甲方问题总结 1. 安全性问题2. 可靠性和稳定性问题3. 性能问题4. 符合军事标准问题5. 兼容性和集成问题6. 维护和升级问题7. 项目管理问题8. 隐私和合规性问题9. 灾难恢复和备份问题10. 技术支持和培训问题 引言&am…

zookeeper的shell操作

一:启动拽库的shell命令行 zkCli.sh -server localhost:2181 退出:quit 二:查询所有的命令 help 三:查询对应的节点 --查询zk上的根节点 ls / ls /zookeeper 四:查询对应节点的节点信息(节点的元数据&a…

[AI 大模型] 阿里巴巴 通义千问

文章目录 [AI 大模型] 阿里巴巴 通义千问简介模型架构发展新技术和优势示例 [AI 大模型] 阿里巴巴 通义千问 简介 阿里巴巴的 通义千问 是由阿里云开发的一款大型语言模型,旨在为用户提供高效、智能的自然语言处理服务。 通义千问能够处理多种语言输入&#xff0c…

免杀笔记 ---> Session0--DLL注入

刚更新完上一篇,于是我们就马不停蹄的去跟新下一篇!! Session0注入 :: 各位看官如果觉得还不错的可以给博主点个赞💕💕 这次,我把这个脚本直接传到Github上了 喜欢的师傅点个Star噢…

【C++报错已解决】Dangling Pointer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用智能指针2.2 方法二…

本地部署,GFPGAN: 实用的面部修复算法

目录 什么是 GFPGAN? 技术原理 主要功能 应用场景 本地安装 运行结果 结语 Tip: 在图像处理和计算机视觉领域,面部修复是一个重要且具有挑战性的研究方向。随着深度学习技术的不断进步,许多新的算法被提出,用于…

Python8:线程和进程

1.并发和并行 并发:在逻辑上具备同时处理多个任务的能力(其实每时刻只有一个任务) 并行:物理上在同一时刻执行多个并发任务 2.线程与进程 一个进程管多个线程,一个进程至少有一个线程 python多线程是假的&#xf…

【漏洞复现】docassemble——interview——任意文件读取

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 docassemble 是一款强大的开源工具,它让自动化生成和…

linux_进程概念——理解冯诺依曼体系结构

前言: 本篇内容是为了让友友们较好地理解进程的概念, 而在真正了解进行概念之前, 要先了解一下冯诺依曼体系结构。 所以博主会先对冯诺伊曼体系结构进行解释, 然后再讲解进程的概念。 ps: 本篇内容适合了解一些linux指…

openfoam生成的非均匀固体Solid数据分析、VTK数据格式分析、以及paraview官方用户指导文档和使用方法

一、openfoam生成的非均匀固体Solid数据分析 对于Solid/dealii-output文件,固体的数据文件, # vtk DataFile Version 3.0 #This file was generated by the deal.II library on 2024/7/10 at 9:46:15 ASCII DATASET UNSTRUCTURED_GRIDPOINTS 108000 do…

go1.21版本后,文件加载顺序

总结 显式引入: 同一个文件显式引入一个包,按照页面代码执行的函数的先后,来执行该函数的文件,不按照包内的文件首字母顺序 隐式引入: 同一个文件内隐式引入一个包,包内的多个文件会按照文件首字母顺序执行…

Qt(五)网络编程

文章目录 一、QTcpServer类(一)使用(二)示例1. 服务端2. 客户端: 二、 一、QTcpServer类 QTcpServer类用于监听客户端的连接,每当有一个客户端连接到服务端,都会生成一个新的QTcpSocket对象与客…

【每日一练】python面对对象的基本概念和用法(附实例)

面向对象编程(OOP)是一种程序设计方法,其基本概念包括对象、类、继承和封装。 对象:对象是系统中的基本单位,用于描述客观事物。每个对象包含一组属性和对这些属性进行操作的方法。对象是类的一个实例,具有…

Camera Raw:直方图

Camera Raw 的直方图 Histogram面板不仅提供了照片亮度和色彩分布信息,还具备多项实用功能,辅助评估和调整照片。 ◆ ◆ ◆ 直方图的构成 直方图是一个二维坐标系统,横坐标表示不同程度的像素亮度,从左到右通常对应的是 0 ~ 255…