Transformer 论文通俗解读:FFN 中的非线性表达

本文是通俗解读Transformer 论文的FFN部分,你可以点击本文最后左下角的标签查看全部内容。

=================================================================

上一节介绍 FFN层时,提到了在 Transformer 架构中添加 FFN 层的一个作用:为了给神经网络增加非线性表达能力

非线性是学习神经网络时的一个基础知识。

虽然基础,但是我还是希望针对这部分内容做一个更加详细的说明,希望你可以对此有一个更深刻的认识,而不仅仅是 Transfomer 结构。

1、线性系统是什么样的?

请你先回忆一个基础知识:什么是线性函数?回忆完毕后,继续往下看。

假设有一个线性函数:y = kx + b, 这个函数画出来是下面的样子,此时我们可以说 y 和 x 是线性关系。

而如果又有一个线性函数 z = hy + d,那么,我们可以推断出,变量 z 和 x 同样也是线性关系。

为什么呢? 因为你可以通过下面的变量代入变换得到:

z = hy + d = z(kx + b) + d = zk x + zb + d = zk(x) + (zb + d)

如果令 K = zk,B = zb + d,那么 z 和 x 的关系就可以写出 z = Kx + B。

所以,z 和 x 同样是线性关系,这里就引出一个前提------

两个线性函数的叠加还是线性关系,同理,多个线性函数的叠加最终还是线性关系?

2、FFN 中的 FC 是非线性还是线性呢?

不好意思,FFN 中的全连接层(FC)本身就是一个线性系统。

为了说明这个问题,我询问了一个AI模型,让其来回答一下这个问题。

AI 模型对于这类问题回答的非常好(这里贴个图你可以看一下,也省去了我打字的时间花销😂)。

甚至,你可以将两个首尾相连的全连接层看作是一个全连接层。

看到这你或许对非线性有了一个更深刻的认识了吧------

事实上,神经网络中的很多基础且核心的运算,比如卷积,比如全连接(矩阵乘法),都是一种线性变换层。

如果这些层后面直接连接其他的线性变换层,那么多个线性变换层会退化成一个。

因此,在这类的线性变换层后面,要添加非线性的激活函数,使得整个变换不至于是线性变换,从而使得神经网络模型可以拟合成更加复杂多变的非线性系统。

如此一来,模型就可以处理复杂的任务,而不用担心模型在数学上仅仅是一个简单的线性模型了。

在 Transformer 的 FFN 结构中,先后添加了两个 FC 层,因此,在两个 FC 中间是一定要加入非线性激活函数的,这也是为什么论文中给出的公式是下面的样子:

其中的 max(0, xW1 + b1) 便是对第一个线性层施加 Relu 激活函数。

本文暂且不论 FFN 中添加 FC 的作用,你只需要了解在多个线性层中间一定要添加非线性层,来防止多个线性层叠加退化成一个线性层就可以了。

关于 FFN 中添加 FC,也就是线性层的作用,在后面的文章中会有介绍。

更多内容:关注我,不迷路:点这里

相关推荐
格林威1 小时前
常规线扫描镜头有哪些类型?能做什么?
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·工业镜头
程序员莫小特3 小时前
老题新解|大整数加法
数据结构·c++·算法
过往入尘土4 小时前
服务端与客户端的简单链接
人工智能·python·算法·pycharm·大模型
zycoder.4 小时前
力扣面试经典150题day1第一题(lc88),第二题(lc27)
算法·leetcode·面试
蒙奇D索大5 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
智驱力人工智能5 小时前
工厂抽烟检测系统 智能化安全管控新方案 加油站吸烟检测技术 吸烟行为智能监测
人工智能·算法·安全·边缘计算·抽烟检测算法·工厂抽烟检测系统·吸烟监测
程序员爱钓鱼6 小时前
Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
后端·算法·go
_Power_Y6 小时前
Java面试常用算法api速刷
java·算法·面试
艾醒(AiXing-w)6 小时前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
人工智能·深度学习·算法·语言模型·自然语言处理
天选之女wow7 小时前
【代码随想录算法训练营——Day32】动态规划——509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法·leetcode·动态规划