在深度学习领域,激活函数是一个看似基础却贯穿模型设计的核心组件。尤其是在Transformer架构的FFN(前馈网络)模块中,激活函数更是决定模型拟合能力、训练稳定性的关键一环。围绕激活函数的四大核心维度,从数学形式、位置作用到设计原则,系统化拆解这一基础组件,建立可关联、可复用的知识体系。
一、 激活函数的数学形式:经典函数的特性解析
激活函数的本质是通过非线性变换,为模型注入拟合复杂特征的能力,而不同的数学形式决定了其特性与适用场景。重点拆解最经典的Sigmoid、Tanh函数,以及Transformer中常用的变体,理清它们的核心差异。
1. Sigmoid函数:最早的非线性激活选择
Sigmoid函数的数学表达式的为:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
其核心特点的是将输入值映射到(0,1)区间,输出范围固定,适合用于二分类任务的概率输出。但在深层网络(如Transformer的FFN)中,它存在明显缺陷:当输入x的绝对值较大时,函数导数趋近于0,这会直接导致反向传播过程中梯度消失,使得深层网络难以训练。这也是Sigmoid逐渐被更高效激活函数替代的核心原因。
2. Tanh函数:改进型饱和激活函数
Tanh函数(双曲正切函数)的数学表达式为:
f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x
与Sigmoid相比,Tanh将输入映射到(-1,1)区间,且输出以0为中心,一定程度上缓解了Sigmoid的梯度偏移问题。但其本质仍属于"饱和型激活函数",当x趋近于正无穷或负无穷时,导数依然会趋近于0,梯度消失的问题并未完全解决,仅在表现上略优于Sigmoid。
3. 延伸:Transformer FFN中的优选激活函数
正因为Sigmoid和Tanh的饱和特性,Transformer及后续预训练模型(如BERT)更倾向于使用非饱和激活函数,典型代表为ReLU和GELU:
-
ReLU: f ( x ) = max ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x),计算高效,x>0时导数恒为1,能有效缓解梯度消失,是早期Transformer的常用选择;
-
GELU: f ( x ) = x ⋅ Φ ( x ) f(x)=x\cdot\Phi(x) f(x)=x⋅Φ(x)( Φ \Phi Φ为标准正态分布累积分布函数),平滑且连续可导,拟合能力更强,成为BERT、GPT等模型的首选。
二、 现代常用激活函数:从经典到前沿选型
随着深度学习模型的迭代,激活函数也从传统饱和型向非饱和、自适应型演进。除了上述经典的Sigmoid、Tanh,现代模型(尤其是大语言模型)更倾向于选用兼具拟合能力与训练稳定性的激活函数,典型代表包括ReLU、GELU、Swish等,其中Swish在DeepSeek等前沿大模型中有着广泛应用。
1. 经典非饱和激活函数:ReLU与GELU
作为现代深度学习的基础激活函数,ReLU和GELU凭借各自优势,成为不同场景下的优选:
-
ReLU: f ( x ) = max ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x),核心优势是计算高效、梯度稳定。x>0时导数恒为1,从根本上缓解了梯度消失问题,且仅需简单的大小比较运算,适合对训练速度有要求的模型,是早期Transformer、CNN的主流选择。但其存在"死亡ReLU"问题(x≤0时梯度为0,神经元永久失效),后续衍生出Leaky ReLU、PReLU等变体进行优化。
-
GELU: f ( x ) = x ⋅ Φ ( x ) f(x)=x\cdot\Phi(x) f(x)=x⋅Φ(x)( Φ \Phi Φ为标准正态分布累积分布函数),是平滑的ReLU变体。相较于ReLU的阶跃特性,GELU的连续可导特性能捕捉更精细的特征变化,拟合能力更强,成为BERT、GPT、LLaMA等主流预训练模型的首选激活函数,尤其适配自然语言处理中的复杂特征建模。
2. Swish激活函数:DeepSeek的优选方案
Swish是Google于2017年提出的自适应激活函数,其独特的自门控特性的使其在大语言模型中表现优异,被DeepSeek等前沿模型采用,成为现代激活函数的重要代表。
Swish函数的数学表达式为:
f ( x ) = x ⋅ σ ( β x ) f(x)=x\cdot\sigma(\beta x) f(x)=x⋅σ(βx)
其中 σ \sigma σ为Sigmoid函数, β \beta β为可训练参数(也可固定为1)。其核心特性与优势如下:
-
自适应自门控:通过Sigmoid函数对输入x进行权重调节,实现"输入越大,激活强度越高"的自门控效果,能动态筛选有效特征,适配大模型的复杂特征建模需求。
-
无明显饱和区:相较于Sigmoid、Tanh的饱和特性,Swish在输入绝对值较大时仍能保持一定的梯度,有效缓解梯度消失,适合深层大模型训练。
-
适配大语言模型:DeepSeek等大语言模型在FFN模块中选用Swish,正是看中其兼顾拟合能力与训练稳定性的特点,能在提升模型表达能力的同时,避免训练震荡,尤其适配海量文本数据的特征学习。
3. 现代激活函数选型核心逻辑
从ReLU到GELU再到Swish,现代激活函数的选型始终围绕"场景适配"展开:简单模型(如基础CNN、轻量Transformer)优先选ReLU(兼顾速度与稳定性);中大型预训练模型(如BERT、LLaMA)优先选GELU(拟合能力更强);前沿大语言模型(如DeepSeek)选用Swish(自适应特性适配复杂特征)。核心仍是平衡"非线性拟合能力、梯度稳定性、计算效率"三大要素。
三、 激活函数的位置:FFN中的非线性插入点
在基于MLP的FFN模块中,激活函数的位置有着固定且明确的设计逻辑------通常位于第一个线性升维操作之后,第二个线性降维操作之前,且针对升维后的张量进行逐元素运算。
Transformer FFN的完整链路可表示为:
输入张量 → 线性升维( W 1 x + b 1 W_1x + b_1 W1x+b1) → 激活函数 → 线性降维( W 2 x + b 2 W_2x + b_2 W2x+b2) → 输出张量
这一位置设计的核心原因有两点:一是升维后的数据维度更高、特征更丰富,此时引入非线性变换,能最大程度挖掘特征间的复杂关联;二是逐元素运算不改变张量维度,确保后续降维操作可顺利进行,维持整个FFN模块的维度一致性。若将激活函数放在降维后,升维过程中积累的线性特征会被压缩,非线性拟合的效果会大幅削弱。
四、 激活函数的核心作用:拒绝"无效升维"
激活函数最核心的价值,就是通过非线性处理,避免模型陷入"线性变换叠加=单层线性模型"的困境,防止升维操作失效。
从正反两个角度理解这一作用:
从正面看,深度学习模型要拟合的真实数据(如图像、文本、语音)往往具备复杂的非线性特征,线性变换只能学习简单的线性关联,无法捕捉数据中的深层规律。激活函数通过非线性映射,让模型具备拟合复杂特征的能力,使得FFN模块即便只有两层线性变换,也能实现远超单层线性模型的表达能力。
从反面看,若移除激活函数,FFN的两次线性变换会被合并为一次线性变换( W 2 ( W 1 x + b 1 ) + b 2 = ( W 2 W 1 ) x + ( W 2 b 1 + b 2 ) W_2(W_1x + b_1) + b_2 = (W_2W_1)x + (W_2b_1 + b_2) W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)),此时无论升维到多少维度,最终都等价于单层线性模型,升维操作完全失去意义,模型无法学习到复杂特征。
五、 激活函数的设计原则:以反向传播稳定性为核心
激活函数的设计并非随意选择,核心原则围绕"反向传播过程中的梯度稳定性"展开,其中最关键的一点就是:避免梯度消失现象。
梯度消失是深层网络训练中的经典难题,本质是反向传播时,梯度通过导数连乘不断衰减,导致深层参数无法有效更新。而激活函数作为梯度传播的关键节点,其导数特性直接决定了梯度的稳定性。基于这一原则,激活函数的设计需满足以下几点要求:
-
非饱和性:尽量避免在输入的大部分区间内导数趋近于0(如ReLU、GELU),确保梯度能有效传递到深层;
-
计算高效性:导数计算简单,避免复杂运算(如ReLU仅需比较大小,远快于Sigmoid的指数运算),提升模型训练速度;
-
梯度一致性:导数范围稳定,避免梯度波动过大(如Tanh导数峰值为1,优于Sigmoid的0.25),减少训练震荡。
值得注意的是,激活函数并非孤立存在,其设计需与模型的其他组件配合。例如Transformer中,除了选用非饱和激活函数,还通过残差连接(Add)和层归一化(LayerNorm)进一步稳定梯度,形成"激活函数+辅助结构"的梯度稳定体系。
六、 知识延伸:激活函数的跨领域关联
很多人学习激活函数时,容易局限在"Transformer/MLP"的单一场景中,难以实现跨领域联想。其实激活函数的核心逻辑(非线性拟合、梯度稳定)在整个深度学习领域都通用:
在CNN中,卷积层后引入ReLU激活函数,同样是为了注入非线性,缓解梯度消失;在RNN中,早期使用Tanh激活函数,后期逐渐被ReLU变体替代,核心矛盾仍是"拟合能力"与"梯度稳定性"的平衡;在音频大模型中,由于音频特征的连续性,GELU等平滑激活函数更受青睐,这与BERT的选型逻辑一致。
把握"非线性注入"和"梯度稳定"这两个核心,就能在不同知识领域中找到激活函数的关联点,实现知识的迁移复用。
七、 总结
激活函数看似是深度学习中的"小组件",却串联起数学形式、模块设计、训练逻辑三大核心层面。从Sigmoid到GELU的迭代,本质是对"非线性拟合"与"梯度稳定"需求的不断优化;而其在FFN中的固定位置,更是模型设计中"功能与结构匹配"的典型体现。