当前位置: 首页 > news >正文

语言模型常用的激活函数(Sigmoid ,GeLU ,SwiGLU,GLU,SiLU,Swish)

文章目录

    • 1. Sigmoid 函数
      • ✅ 数学表达式:
      • 📌 特性:
      • 📈 应用场景:
      • ⚠️ 缺点:
    • 2. GeLU(Gaussian Error Linear Unit)
      • ✅ 数学表达式:
      • 📌 特性:
      • 📈 应用场景:
      • 🧠 与 Sigmoid 的关系:
    • 3. GLU(Gated Linear Unit)
      • ✅ 数学表达式:
      • 📌 特性:
      • 📈 应用场景:
      • ⚠️ 实现细节:
    • 4. SwiGLU(Sigmoid-weighted Gated Linear Unit)
      • ✅ 数学表达式:
      • 📌 特性:
      • 📈 应用场景:
      • 🧠 与 GLU 的关系:
    • 5. SiLU(Sigmoid Linear Unit) / Swish
      • ✅ 数学表达式:
      • 📌 特性:
      • 📈 应用场景:
      • ⚠️ 扩展形式:
    • 6. GLU 与 SwiGLU 的对比
    • 7. 总结对比表
    • 8. 代码实现示例(PyTorch)
    • 9. 关键区别总结

以下是 SigmoidGeLUSwiGLUGLUSiLUSwish 这些激活函数的详细讲解,包括它们的数学表达式、特性、应用场景及与其他函数的关系。


1. Sigmoid 函数

✅ 数学表达式:

Sigmoid(x)=σ(x)=11+e−x\text{Sigmoid}(x) = \sigma(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=σ(x)=1+ex1

📌 特性:

  • 输出范围:(0,1)(0, 1)(0,1),适合二分类问题的概率输出。
  • 平滑性:连续可导,但梯度在输入较大或较小时接近于 0(导致梯度消失问题)。
  • 单调性:严格单调递增。

📈 应用场景:

  • 早期神经网络的激活函数(如逻辑回归、RNN)。
  • 二分类问题的输出层(如逻辑回归)。

⚠️ 缺点:

  • 梯度消失问题严重(尤其在深度网络中)。
  • 输出非零中心化,影响训练效率。

2. GeLU(Gaussian Error Linear Unit)

✅ 数学表达式:

GeLU(x)=x⋅Φ(x)\text{GeLU}(x) = x \cdot \Phi(x) GeLU(x)=xΦ(x)
其中 Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数(CDF):
Φ(x)=12(1+erf(x2))\Phi(x) = \frac{1}{2} \left(1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right) Φ(x)=21(1+erf(2x))
近似公式(用于高效计算):
GeLU(x)≈0.5x(1+tanh⁡[2π(x+0.044715x3)])\text{GeLU}(x) \approx 0.5x\left(1 + \tanh\left[\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right]\right) GeLU(x)0.5x(1+tanh[π2(x+0.044715x3)])

📌 特性:

  • 概率性“软开关”:输入值越大,输出越接近 xxx;输入值越小(负),输出越接近 0。
  • 平滑性:处处可导,梯度稳定。
  • 非单调性:在负区间有非零输出,缓解梯度消失问题。

📈 应用场景:

  • Transformer 模型(如 BERT、GPT)。
  • 需要平滑激活且保留部分负值信息的任务。

🧠 与 Sigmoid 的关系:

  • GeLU 可视为 Sigmoid 的加权版本,权重由输入值的高斯分布概率决定。

3. GLU(Gated Linear Unit)

✅ 数学表达式:

GLU(x)=(W1x+b1)⊗σ(W2x+b2)\text{GLU}(x) = (W_1 x + b_1) \otimes \sigma(W_2 x + b_2) GLU(x)=(W1x+b1)σ(W2x+b2)
其中 ⊗\otimes 表示逐元素乘法,σ\sigmaσ 是 Sigmoid 函数。

📌 特性:

  • 门控机制:将输入分为两部分,一部分作为内容,另一部分通过 Sigmoid 生成门控信号。
  • 非线性:通过门控机制引入非线性,增强模型表达能力。
  • 自适应性:根据输入动态调整信息流。

📈 应用场景:

  • 自然语言处理(如文本分类、机器翻译)。
  • Transformer 的 Feed-Forward 层(部分模型使用 GLU 替代传统 FFN)。

⚠️ 实现细节:

  • 输入维度需为偶数(需分两半)。
  • 例如,若输入为 x∈R2nx \in \mathbb{R}^{2n}xR2n,则前 nnn 维作为内容,后 nnn 维通过 Sigmoid 生成门控信号。

4. SwiGLU(Sigmoid-weighted Gated Linear Unit)

✅ 数学表达式:

SwiGLU(x)=SiLU(W1x+b1)⊗(W2x+b2)\text{SwiGLU}(x) = \text{SiLU}(W_1 x + b_1) \otimes (W_2 x + b_2) SwiGLU(x)=SiLU(W1x+b1)(W2x+b2)
其中:

  • SiLU(x)=x⋅σ(x)\text{SiLU}(x) = x \cdot \sigma(x)SiLU(x)=xσ(x)(即 Swish 函数)。
  • ⊗\otimes 表示逐元素乘法。

📌 特性:

  • 结合 SiLU 和 GLU:SiLU 提供平滑性,GLU 提供门控机制。
  • 增强非线性:比传统 GLU 更灵活,能捕捉更复杂的数据模式。
  • 计算高效:在现代 LLM 中(如 T5、Mistral)广泛应用。

📈 应用场景:

  • 大型语言模型(如 T5、PaLM、Mistral)。
  • 需要高效且灵活的门控机制的任务。

🧠 与 GLU 的关系:

  • SwiGLU 是 GLU 的改进版本,用 SiLU 替代了传统线性激活。

5. SiLU(Sigmoid Linear Unit) / Swish

✅ 数学表达式:

SiLU(x)=x⋅σ(x)=x1+e−x\text{SiLU}(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}} SiLU(x)=xσ(x)=1+exx

  • Swish 是 SiLU 的别名,由 Google 提出。

📌 特性:

  • 平滑性:处处可导,梯度稳定。
  • 非单调性:允许负值部分传递信息,缓解梯度消失。
  • 自正则化:实验表明其具有一定的正则化效果。

📈 应用场景:

  • 深度神经网络(如 CNN、Transformer)。
  • Google 的 Swish 激活函数(在 ImageNet 等任务中表现优于 ReLU)。

⚠️ 扩展形式:

Swish(x)=x⋅σ(βx)\text{Swish}(x) = x \cdot \sigma(\beta x) Swish(x)=xσ(βx)
其中 β\betaβ 是可学习参数(如 β=1\beta=1β=1 时退化为 SiLU)。


6. GLU 与 SwiGLU 的对比

特性GLUSwiGLU
公式a⊗σ(b)a \otimes \sigma(b)aσ(b)SiLU(a)⊗b\text{SiLU}(a) \otimes bSiLU(a)b
激活函数SigmoidSiLU (Swish)
平滑性一般更平滑
非线性能力中等更强
应用场景传统 NLP、Transformer FFN大型语言模型(如 Mistral)

7. 总结对比表

函数表达式特性应用场景
Sigmoid11+e−x\frac{1}{1 + e^{-x}}1+ex1平滑,梯度消失,单调二分类输出层
GeLUx⋅Φ(x)x \cdot \Phi(x)xΦ(x)概率性软开关,平滑,非单调Transformer 模型
GLU(W1x)⊗σ(W2x)(W_1 x) \otimes \sigma(W_2 x)(W1x)σ(W2x)门控机制,非线性NLP、Transformer FFN
SwiGLUSiLU(W1x)⊗(W2x)\text{SiLU}(W_1 x) \otimes (W_2 x)SiLU(W1x)(W2x)结合 SiLU 和 GLU,更灵活大型语言模型(如 T5、Mistral)
SiLU/Swishx⋅σ(x)x \cdot \sigma(x)xσ(x)平滑,非单调,自正则化深度神经网络,ImageNet

8. 代码实现示例(PyTorch)

import torch
import torch.nn as nn
import torch.nn.functional as F# Sigmoid
sigmoid = nn.Sigmoid()# GeLU (exact)
gelu_exact = nn.GELU()# GeLU (approximate)
def gelu_approx(x):return 0.5 * x * (1 + torch.tanh(torch.sqrt(torch.tensor(2.0 / torch.pi)) * (x + 0.044715 * x**3)))# GLU
class GLU(nn.Module):def __init__(self, dim):super().__init__()self.dim = dimself.W1 = nn.Linear(dim, dim)self.W2 = nn.Linear(dim, dim)def forward(self, x):a = self.W1(x)b = self.W2(x)return a * torch.sigmoid(b)# SwiGLU
class SwiGLU(nn.Module):def __init__(self, dim):super().__init__()self.W1 = nn.Linear(dim, dim)self.W2 = nn.Linear(dim, dim)def forward(self, x):a = self.W1(x)b = self.W2(x)return F.silu(a) * b

9. 关键区别总结

  • Sigmoid vs GeLU:GeLU 是概率性软开关,Sigmoid 是硬阈值。
  • GLU vs SwiGLU:SwiGLU 用 SiLU 替代了 GLU 的线性激活,增强非线性。
  • SiLU vs Swish:两者是同一函数,SiLU 是正式名称,Swish 是 Google 提出的别名。
http://www.xdnf.cn/news/1114309.html

相关文章:

  • 【论文阅读】基于注意力机制的冥想脑电分类识别研究(2025)
  • LeetCode第 458 场周赛题解
  • 字符串问题(哈希表解决)
  • 【论文阅读】Think Only When You Need with Large Hybrid-Reasoning Models
  • 【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署
  • 编译器优化——LLVM IR,零基础入门
  • 我做了一个windows端口占用查看跟释放工具
  • Spring AI 项目实战(十六):Spring + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • linux-shell脚本
  • SpringCloud云间剑歌 第四章:藏经阁与信鸽传书
  • 打造你的专属智能生活:鸿蒙系统自定义场景开发全流程详解
  • package.json 与 package-lock.json
  • Redis缓存设计与性能优化指南
  • Web攻防-PHP反序列化原生内置类Exception类SoapClient类SimpleXMLElement
  • 分类问题-机器学习
  • 011_视觉能力与图像处理
  • 力扣面试150题--单词搜索
  • MySQL 分表功能应用场景实现全方位详解与示例
  • Flink学习笔记:整体架构
  • Docker(02) Docker-Compose、Dockerfile镜像构建、Portainer
  • 13. Flink 高可用机制简述(Standalone 模式)
  • 14.ResourceMangaer启动解析
  • 鸿蒙项目构建配置
  • LabVIEW智能避障小车
  • Http与Https区别和联系
  • [NCTF2019]Fake XML cookbook
  • 六、深度学习——NLP
  • Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
  • 编程与数学 03-001 计算机组成原理 04_非数值数据表示与校验码
  • Rerank模型