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

news2024/9/20 5:44:11

在经过前面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.coloradmin.cn/o/2065450.html

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

相关文章

基于ssm+vue+uniapp的跑腿平台小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

qt的QCustomPlot绘制实时曲线图总结

一、组件的下载 下载下来后文件如下图所示,具有丰富的例程,这个很好,注意后面要用到的c文件和头文件,听说还有丰富的帮助文档,暂时没有时间去找,大概翻看了一下没有看到 二、拷贝.h 和c文件到工程目录&…

asp.net Core blazor学习笔记

最近在研究学习blazor,为了加深记忆,手动记录一下,以下内容为个人理解记录,仅供参考: Blazor开发学习 一 分类1 Blazor Server 应用2 Blazor WebAssembly 应用3 Blazor Hybrid 应用和 .NET MAUI 二 基础知识1 路由2 组…

使用预训练的 ONNX 格式的 YOLOv8n 模型进行目标检测,并在图像上绘制检测结果

目录 __init__方法: pre_process方法: run方法: filter_boxes方法: view_img方法: ​​​​​​​__init__方法: 初始化类的实例时,创建一个onnxruntime的推理会话,加载名为yolo…

电机启动对单片机重启的影响

单片机使用ASM1117对9V电压降压供电,IO口接三极管控制电机 ,接9V;每次启动瞬间,单片机重启 试进行分析 网上参考,添加滤波,电容,阻容;分开电源处理(双电源)&…

JVM虚拟机(二)如何定位垃圾、判断对象是否死亡?垃圾回收算法、垃圾回收器、CMS、G1垃圾回收器

一、GC基本信息 1.1 什么是GC,垃圾回收? JVM的垃圾回收(Garbage Collection,GC)是一种自动内存管理机制,其主要目的是识别并清除不再使用的对象,释放内存空间以供应用程序中的其他部分使用。G…

go+gin+vue入门

后端框架 1、安装go、goland 2、创建空项目 3、下载要用的包:命令行输入go get -u github.com/xxxx 4、安装mysql数据库,使用navicat创建数据库。 5、按照项目框架搭建目录、文件、代码:如router、model… 6、运行测试,go run ma…

C语言基础(十一)

1、指针: C语言中的指针是一种非常重要的数据类型,可以直接访问和操作内存地址。指针存储变量的内存地址,而不是变量的值本身。通过使用指针,可以灵活地控制数据的存储和访问,实现复杂的数据结构如链表、树。 定义指…

C++操作excel,即使函数设置了不备份,但保存后,excel依然会自动生成备份文件的原因分析,及如何来禁止自动备份

开发环境 操作系统:windows 10 编译器:Visual Studio 2010、2015、2017、2022 office 2016、2019、2021 wps 2019、2024 问题描述 通过C操作excel,保存后,excel会自动生成备份文件。 void CExcelDemoDlg::OnBnClickedButton1() …

Open3D mesh 隐藏点移除

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2去除隐藏点后的点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新&…

力扣 128. 最长连续序列

题目描述 我的思路 我的思路比较暴力,就是首先将数组从小到大进行排序,然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1:nums [100, 4, 200, 1, 3, 2],第一步先将数组进行排序得到sort_nums [1, 2, 3,…

Android Studio(3) 使用 Kotlin DSL和 Gradle 8.7 打包远程库到 AAR 的自定义方法

背景介绍 在 Gradle 7.3 及更早版本中,通常使用 com.kezong.fat-aar 插件来打包远程库到 AAR 中,随着 Gradle 的不断升级,尤其是到 8.7 版本后,Kotlin DSL开发逐渐成为主流,fat-aar 社区没有更新,插件的兼容性问题逐渐显现。我探索一种新的自定义方法,能够在 Kotlin DS…

js逆向学习

目前本人大三下,想要学习js逆向同学的可以联系我:2697279763qq.com 上面是本人做的一些比较复杂的项目,还有很多简单的项目,这里给出图片。 还有一些简单的js逆向。 教你各种补充环境,各种js算法,教你各种底…

(软工) 四代软件架构

🔢前言 当今软件架构中,拥有四代软件架构。这四个都是基于所在时代,技术,需求等多种因素应运而生的。 在未来是否会有第五代软件架构,无人可知。笔者大胆推测,这第五代很可能与人工智能的大语言模型有关&…

Windows—UDP编程

Client骨架&#xff1a; #include <iostream> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib")int main() {//启动Winsock DLLWORD wVersionRequested MAKEWORD(2, 2);WSADATA lpWSAData;WSAStartup(wVersionRequested, &lpWSAData);//…

【数据结构】线性表的顺序表示(顺序表的定义和基本操作)

计算机考研408-数据结构笔记本之——第二章 线性表 2.2 线性表的顺序表示&#xff08;顺序表的定义和基本操作&#xff1a;初始化/插入/删除/查找&#xff09; 2.2.1 顺序表的定义 1.定义 顺序表是线性表的顺序存储。 所谓顺序存储&#xff0c;就是把逻辑上相邻的元素存储在物…

预约咨询小程序搭建开发,uniapp前端,PHP语言开发

目录 前言&#xff1a; 一、预约小程序搭建功能介绍 二、示例代码片段 前言&#xff1a; 预约咨询小程序适合需付费咨询和交流的场景&#xff1a;比如讲师,摄影,婚庆&#xff0c;美发,律师,心理等等支持商家入驻支持视频、图文、线下、电话等方式在线支付咨询。 一、预约小程…

代码随想录 刷题记录-14 回溯(3)字符串、子集、排列问题

字符串 1.131.分割回文串 思路 本题这涉及到两个关键问题&#xff1a; 切割问题&#xff0c;有不同的切割方式判断回文 切割问题&#xff0c;也可以抽象为一棵树形结构&#xff0c;如图&#xff1a; 回溯三部曲 递归函数参数 全局变量数组path存放切割后回文的子串&…

《计算机操作系统》(第4版)第5章 虚拟存储器 复习笔记

第5章 虚拟存储器 一 、虚拟存储器概述 1. 常规存储管理方式的特征和局部性原理 (1)特征 ①一次性。 ②驻留性。 (2)局部性原理 局部性原理表现在时间局部性和空间局部性两方面。 2.虚拟存储器的定义和特征 (1)虚拟存储器的定义 虚拟存储器是指具有请求调入功能和置换功能&…

java之表格数据存储

java之表格数据存储 摘要表格数据存储javabean 介绍javabean 设计类表格数据存储 摘要 本博客主要讲述java如何存储表格数据。 表格数据存储 在解决实际问题的时候&#xff0c;需要涉及到如何存储表格的数据&#xff0c;这里讲述了一种使用javabean的方法存储表格 javabea…