深入解析生成式大语言模型中的激活函数:从ReLU到SiLU,理解神经网络的核心组件!

发布时间:2026/8/27 14:19:04
深入解析生成式大语言模型中的激活函数:从ReLU到SiLU,理解神经网络的核心组件! 激活函数是神经网络中的核心组件它决定了神经元是否被激活以及如何将输入信号转换为输出信号也是将神经网络引入非线性表达能力的关键组件。在大型语言模型LLM中用于引入非线性变换使模型能够学习复杂的模式和关系。它们在模型的每一层尤其是前馈网络部分中起核心作用直接影响模型的表达能力和训练效果。趁着最近在学习生成式 LLM 的契机分享自己对激活函数的理解和思考。本文主要介绍现在主流生成式 LLM 所用的激活函数ReLUGPT2 中使用现在主流 LLM如 llama3、DeepSeek 等不再使用但是它是其他激活函数的改进的源头所以个人认为有必要介绍如有熟知的同学自行跳过GELU、Sigmod-GELU是 GELU 的近似版本、Swish、SiLU是 Swish 的特例。一、ReLUReLURectified Linear Unit修正线性单元是一种广泛使用的激活函数尤其在深度学习中表现优异它的数学形式非常简单但在神经网络中解决了传统激活函数如 Sigmoid、Tanh的一些关键问题。如计算复杂、输入值的绝对值较大的区域即饱和区容易发生梯度消失等问题。ReLU 的数学表达式如下当输入 x≥0 时输出为 x否则输出为 0。ReLU 的梯度数学表达式如下由此可知当输入 x 小于 0 时梯度为 0即发生梯度消失当输入 x 为 0 时梯度为无穷大梯度爆炸输入 x 大于 0 时梯度为 1。1ReLU 图像和梯度图像ReLU 图像和梯度图像ReLU 优点计算高效ReLU 的计算仅需判断输入是否大于零没有复杂的指数运算如 Sigmoid/Tanh因此在训练和推理时速度极快缓解梯度消失问题传统激活函数如 Sigmoid在输入较大或较小时会进入“饱和区”梯度接近零导致反向传播时梯度消失Vanishing GradientReLU 在正区间x0的梯度恒为 1避免了梯度消失问题使得深层网络更容易训练稀疏激活ReLU 会使负值输入直接输出零导致神经元的“稀疏激活”部分神经元不激活。这种特性可以减少参数之间的依赖性增强模型的泛化能力生物学合理性ReLU 的稀疏激活特性类似于生物神经元的“全或无”All-or-None激活模式被认为更接近人脑的工作机制。ReLU 缺点神经元死亡Dead Neurons当输入为负数时ReLU 的梯度为零。如果某个神经元在训练中始终输出负数例如权重初始化不当或学习率过高其梯度将永远为零导致该神经元永久失效“死亡”, 这种现象称为 Dying ReLU Problem。非零中心化ReLU 的输出范围为 [0,∞)导致激活值的分布不对称非零中心化可能影响梯度下降的效率。2ReLU 使用注意事项如下权重初始化建议使用 He 初始化针对 ReLU 设计以缓解神经元死亡问题学习率调整过高的学习率可能导致大量神经元死亡需谨慎选择结合 Batch Normalization可以进一步稳定训练过程。二、GELUGELUGaussian Error Linear Unit高斯误差线性单元是一种近年来被广泛使用的激活函数尤其在 Transformer 架构如BERT、GPT中表现优异。它结合了随机正则化的思想通过概率权重对输入进行非线性变换比传统激活函数如 ReLU、Sigmoid更符合神经网络的概率特性有点类似于自适应的 Dropout 机制因此 LLM 广泛使用类似这种激活函数或其变体。数学公式定义如下其中Φ(x) 是标准高斯分布正态分布的累积分布函数(CDF)即 Φ(x)P(X≤x)X∼N(0,1)由于高斯分布计算较为复杂一般会使用如下第二个公式来近似。其中 Φ(x) 是标准正态分布的累积分布函数 (CDF)ϕ(x) 是标准正态分布的概率密度函数PDF它的梯度表达如下GELU 梯度表达式如下其中 Φ(x) 表示输入x被激活的概率权重x⋅ϕ(x) 是输入对概率密度的动态调整项。1GELU 图像和梯度图像GELU 的图像和梯度图像2GELU 的理解概率视角GELU将输入 x 的激活权重与其在正态分布中的概率相关联。例如当 x 较大时神经元以高概率被激活输出接近 x当 x 较小时神经元以低概率被激活输出接近 0随机正则化GELU 的非线性可以被视为一种“自适应 Dropout”其权重由输入自身决定而非固定概率。GELU 优点平滑性GELU 在输入接近零时是连续可导的与 ReLU 的硬截断不同这使得梯度更新更稳定自适应激活激活权重 Φ(x) 随输入动态调整能更好地捕捉复杂模式概率解释结合正态分布的 CDFGELU 更符合神经网络的概率建模特性如贝叶斯网络在 Transformer 中的表现GELU 在自然语言处理NLP任务中表现优异尤其在 BERT、GPT 等模型中相比 ReLU 和 Swish 函数效果更好GELU 缺点计算成本较高: 精确计算 Φ(x) 需要积分运算尽管近似方法如 tanh 或 Sigmoid可以缓解这一问题可解释性较弱相比 ReLU 的直观截断GELU 的概率权重机制需要更深入的理论理解这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】三、Sigmod-GELUSigmoid-GELU 是 GELU高斯误差线性单元的一种近似实现方式通过 Sigmoid 函数替代高斯分布的累积分布函数CDF简化计算并保持 GELU 的核心特性。它就是上面 GELU 介绍中的及时方式它结合了 Sigmoid 的平滑性和 GELU 的概率权重机制广泛应用于需要高效计算的场景如 Transformer 模型。其数学表达式如下其中σ(⋅) 是 Sigmoid 函数系数 1.702 用于调整 Sigmoid 函数的陡峭度1.702 是一个经验值使其更接近 GELU 中高斯 CDF 的形状。Sigmod-GELU 的梯度表达式如下1Sigmod-GELU 的图像和梯度图像Sigmod-GELU 的图像和梯度图像Sigmod-GELU 的理解Sigmoid-GELU 通过 Sigmoid 函数模拟 GELU 的概率权重机制当输入 x 较大时σ(1.702x)≈1输出接近 x当输入 x 较小时σ(1.702x)≈0输出接近 0在中间区域输出平滑过渡保留了 GELU 的非线性特性2为什么要使用 Sigmod-GELU 来近似 GELU原始 GELU 的公式为 x⋅Φ(x)其中 Φ(x) 是标准正态分布的 CDF计算复杂需积分运算。Sigmoid-GELU 的提出是为了降低计算成本Sigmoid 函数可通过指数运算快速计算适合硬件加速保持性能实验表明当系数 1.702 时Sigmoid-GELU 与原始 GELU 的拟合误差极小Sigmod-GELU 的优点平滑非线性输出在正负区间均平滑可导梯度稳定适合深度网络训练自适应概率权重权重 σ(1.702x) 随输入动态调整既保留 ReLU 的稀疏性又避免硬截断高效计算仅需一次 Sigmoid 运算和乘法比精确计算高斯 CDF 快得多兼容性在 Transformer、BERT 等模型中可直接替换原始 GELU无需调整超参数Sigmod-GELU 的缺点系数 1.702 需要经验设定缺乏理论推导Sigmoid 函数在极端值时梯度仍可能消失相比 ReLU计算量略高因为需计算 Sigmoid四、SwishSwish 是由 Google 研究人员在 2017 年提出的一种激活函数结合了 Sigmoid 的平滑性和 ReLU 的稀疏激活特性。实验证明其在多种任务中优于 ReLU尤其在深层网络中表现优异也是现在主流 LLM如 llama、Qwen、DeepSeek中 FeedForward 层使用的激活函数。只是它们使用的是 Swish-1即接下来要解释得 SiLU 激活函数其数学表达式如下其中 σ(⋅) 是 Sigmoid 函数β是一个可学习参数或固定常数默认β1, 当β1 时Swish 激活函数就是接下来要说的 SiLU 激活函数Swish 梯度表达式如下当x0 时导数接近 1类似 ReLU当x0 时导数由β控制非零且平滑正是因为当x0 时导数由β控制则可以解决 ReLU 激活函数在输入值小于 0 时的梯度消失问题。1Swish 的图像和梯度图像Swish 的图像和梯度图像Swish 的理解Swish 对输入 x 进行 Sigmoid 加权输出范围为 (−0.278,∞)当 β→0 时Swish 退化为线性函数 x / 2当 β→∞ 时Swish 趋近于 ReLUx⋅σ(βx)≈x⋅阶跃函数Swish 的优点平滑非单调性Smooth Non-Monotonicity—非单调性当 x0 时Swish 可能先减小后增大与 ReLU 的硬截断不同----平滑性Swish 处处可导梯度变化连续缓解了 ReLU 在 x0 处的梯度突变问题自适应性----通过调整 βSwish 可以灵活适应不同任务----大 β接近 ReLU适合需要稀疏激活的任务如分类----小 β接近线性适合需要保留更多信息的任务如回归缓解梯度消失----在负区间x0Swish 的梯度非零避免了 ReLU 的“神经元死亡”问题输出非零中心化----Swish 的输出均值为正类似 ReLU可能需搭配 Batch Normalization 使用以加速训练Swish 的缺点计算成本略高于 ReLU需计算 Sigmoid输出非零中心化需配合 BatchNorm 使用五、SiLUSiLUSigmoid Linear Unit也称为 Swish-1是一种结合了 Sigmoid 函数平滑性和 ReLU 稀疏激活特性的激活函数。它由 Swish 激活函数的特定形式演化而来固定参数 β1,现在主流 LLM 的 FeedForward 模块中的激活函数都在使用 SiLU 作为激活函数。其数学表达式如下其中σ(x) 是 Sigmoid 函数它对应的梯度表达式如下通过 SiLU 激活函数可以得出正区间x≫0导数 ≈1(类似 ReLU)负区间x≪0导数 ≈0但非零保留微弱梯度零点附近x≈0导数约为 0.5梯度平滑过渡。1SiLU 的图像和梯度图像SiLU 的图像和梯度图像SiLU 的理解SiLU 对输入 x 进行 Sigmoid 加权输出范围为 (−0.278,∞)正区间x0输出接近线性增长类似 ReLU负区间x0输出平滑衰减至负值而非直接归零零点附近x≈0梯度连续避免硬截断SiLU 的优点平滑性与非单调性—平滑性SiLU 在所有输入点处连续可导梯度更新更稳定—非单调性当 x0 时SiLU 的输出先减小后增大极小值约在 x≈−1.278 处增强了非线性表达能力缓解梯度消失与神经元死亡—负区间梯度保留即使 x0梯度仍非零避免 ReLU 的神经元死亡问题—自适应激活通过 Sigmoid 权重动态调整激活强度平衡信息保留与稀疏性输出非零中心化—输出均值偏向正区间类似 ReLU可能需搭配 Batch Normalization 以加速训练收敛SiLU 的缺点计算成本略高于 ReLU需计算 Sigmoid输出非零中心化需配合 BatchNorm 使用ReLU/GELU/Sigmod-GELU/SiLU 的图像和梯度图像绘制 Python 代码import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm # Define the activation functions def relu(x): return np.maximum(0, x) def gelu(x): return x * norm.cdf(x) def sigmoid(x): return 1 / (1 np.exp(-x)) def sigmoid_gelu(x): return x * sigmoid(1.702 * x) def swish(x, beta1): return x * sigmoid(beta * x) def silu(x): return swish(x, beta1) # SiLU is Swish with beta1 # Define the derivatives def relu_derivative(x): return np.where(x 0, 1, 0) def gelu_derivative(x): return norm.cdf(x) x * norm.pdf(x) def sigmoid_derivative(x): s sigmoid(x) return s * (1 - s) def sigmoid_gelu_derivative(x): s sigmoid(1.702 * x) return s 1.702 * x * s * (1 - s) def swish_derivative(x, beta1): s sigmoid(beta * x) return s beta * x * s * (1 - s) def silu_derivative(x): return swish_derivative(x, beta1) # Generate x values x np.linspace(-5, 5, 1000) # Create the figure with two subplots fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 6)) # Plot activation functions ax1.plot(x, relu(x), labelReLU, colorblue) ax1.plot(x, gelu(x), labelGELU, colorgreen) ax1.plot(x, sigmoid_gelu(x), labelSigmoid-GELU, colorred) ax1.plot(x, swish(x), labelSwish, colorpurple) ax1.plot(x, silu(x), labelSiLU, colororange) ax1.set_title(Activation Functions) ax1.set_xlabel(x) ax1.set_ylabel(f(x)) ax1.grid(True) ax1.legend() # Plot derivatives ax2.plot(x, relu_derivative(x), labelReLU Derivative, colorblue) ax2.plot(x, gelu_derivative(x), labelGELU Derivative, colorgreen) ax2.plot(x, sigmoid_gelu_derivative(x), labelSigmoid-GELU Derivative, colorred) ax2.plot(x, swish_derivative(x), labelSwish Derivative, colorpurple) ax2.plot(x, silu_derivative(x), labelSiLU Derivative, colororange) ax2.set_title(Derivatives of Activation Functions) ax2.set_xlabel(x) ax2.set_ylabel(f(x)) ax2.grid(True) ax2.legend() # Adjust layout and display plt.tight_layout() plt.show()输入结果如下ReLU/GELU/Sigmod-GELU/SiLU 的图像和梯度图像六、如何学习AI大模型我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】第一阶段从大模型系统设计入手讲解大模型的主要方法第二阶段在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用第三阶段大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统第四阶段大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统第五阶段大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型第六阶段以SD多模态大模型为主搭建了文生图小程序案例第七阶段以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。学会后的收获• 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。1.AI大模型学习路线图2.100套AI大模型商业化落地方案3.100集大模型视频教程4.200本大模型PDF书籍5.LLM面试题合集6.AI产品经理资源合集获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】