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…

linux命令: rsync的使用

使用rsync同步本地文件夹到远程目录 rsync -zvrt /localdir/ -e ssh -p 30000 rootip:/remotedir/rsync -zvrt /localdir/ /remotedir/ 远程备份 rsync -avlR --delete -e ssh -p 3231 tangboqi221.122.114.27:backup ~/backup/ R表示保留目录结构,如果不保留…

基于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…

c# Bitmap

在C#中,Bitmap 类是一个表示位图图像的类,它属于 System.Drawing 命名空间。Bitmap 类是从 Image 类派生的,因此它继承了 Image 类的所有属性和方法,并添加了一些专门用于处理位图的功能。 以下是关于 Bitmap 类的一些基本信息和…

Supervisord控制进程举例

当使用Supervisord来控制进程时,通常会配置一个或多个进程组(program group),每个进程组负责监控和管理一个特定的进程或应用程序。以下是一个具体的例子: 假设我们有一个简单的 Flask 应用程序,我们希望使…

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

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

深入理解JS中的防抖节流

在Web开发中,防抖(Debouncing)和节流(Throttling)是两种常用的优化技术,用于提高页面性能和用户体验。它们通过限制函数执行的频率来减少计算资源的消耗,尤其是在处理频繁触发的事件时,如窗口大小调整、滚动、键盘输入等。 1、防抖(Debouncing) 防抖技术的核心思想是…

风景园林工程设计乙级资质业绩要求案例分析

项目数量与规模 数量要求:企业需要提供一定数量的已完成风景园林设计项目案例,这个数量可能依据具体政策而有所不同,但通常需要完成多个项目以展示设计团队的综合能力。 规模要求:项目规模需达到乙级资质标准所规定的级别&#…

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

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

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

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

C# 根据日期对mysql数据库数据筛选的一些操作函数

在C#中,根据日期筛选MySQL数据库中的数据是一个常见的操作。以下是一些基于日期的数据筛选操作函数示例: 1. 筛选特定日期的数据 public List<YourDataType> GetDataBySpecificDate(DateTime specificDate) {List<YourDataType> dataList = new List<YourDa…

Python8:线程和进程

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

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

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