激活函数有什么用?有哪些常用的激活函数?

作者:aicoting日期:2025/12/29

在深度学习中,激活函数(Activation Function)是神经网络的灵魂。它不仅赋予网络非线性能力,还决定了训练的稳定性和模型性能。那么,激活函数到底是什么?为什么我们非用不可?有哪些经典函数?又该如何选择?本文带你全面解析。

所有相关源码示例、流程图、面试八股、模型配置与知识库构建技巧,我也将持续更新在Github:AIHub,欢迎关注收藏!

阅读本文时,请带着这三个问题思考:

  1. 什么是激活函数,为什么需要激活函数?
  2. 经典的激活函数有哪些?
  3. 怎么选择激活函数?

1. 什么是激活函数,为什么需要激活函数

激活函数的核心作用就是为神经网络引入非线性

  • 为什么需要非线性?
    想象一下,如果网络里每一层都是线性的(比如 y = Wx + b),无论堆叠多少层,最终网络都只是一条线性映射。深度堆叠就没有意义了,网络的表达能力非常有限。
  • 激活函数的作用
    激活函数在每个神经元输出前进行非线性变换,让网络可以拟合复杂的函数关系,从而解决分类、回归等非线性问题。

**直观理解一下,**激活函数就像神经网络里的“开关”或“滤镜”,它决定了每个神经元应该多大程度地“激活”,从而使网络具备强大的表达能力。

2. 经典的激活函数

在深度学习中,有几类经典激活函数,每种都有自己的优缺点:

1. Sigmoid

公式:

image

  • 优点:输出范围在 (0,1),可以表示概率
  • 缺点:容易饱和(输入过大或过小时梯度接近0,导致梯度消失)
  • 应用场景:二分类输出层

2. Tanh(双曲正切)

公式:

image

  • 优点:输出在 (-1,1),比 sigmoid 居中,对梯度更友好
  • 缺点:仍可能梯度消失
  • 应用场景:RNN 隐层

3. ReLU(Rectified Linear Unit)

公式:

image

  • 优点:计算简单,导数恒为1(正区间),缓解梯度消失
  • 缺点:负区间可能“死亡”,即神经元永远不激活
  • 应用场景:隐藏层主流激活函数

4. Leaky ReLU / Parametric ReLU(PReLU)

公式:

image

  • Leaky ReLU: 对负区间引入一个小斜率,避免神经元死亡
  • PReLU: 斜率可学习,更灵活

5. Softmax

公式

image

Softmax 输出的是一组归一化的概率,在图中使用 柱状图 (bar chart) 展示每个输入元素对应的概率值。

  • 作用:多分类输出概率分布
  • 应用场景:分类任务输出层

6.ELU(Exponential Linear Unit)

公式:
image

**特点:**负区间平滑非零,避免 ReLU 死区问题。
优点: 输出均值更接近 0,梯度更稳定。
常用于: 深层 CNN、MLP。

7.SELU(Scaled Exponential Linear Unit)

公式:
image
其中 λ≈1.05,α≈1.67。


**特点:**在特定初始化下能实现自归一化,保持激活均值和方差稳定。
优点: 无需 BatchNorm。
常用于: 自归一化神经网络(Self-Normalizing NN)。

8.GELU(Gaussian Error Linear Unit)

公式:
image
其中 Φ(x) 是标准正态分布 CDF。


**特点:**在 ReLU 的基础上引入概率思想,让激活与输入大小平滑相关。
优点: 更平滑、更稳定,效果普遍优于 ReLU。
常用于: Transformer(BERT、GPT、ViT)。

9.SiLU(Swish)

公式:
image


**特点:**与 GELU 类似,是一种平滑版 ReLU。
优点: 梯度连续,优化更稳定。
常用于: EfficientNet、Transformer。

10.GLU(Gated Linear Unit)

GLU/SwiGLU 在实际中是门控形式(two linear branches),是向量上的逐元素操作;为了在一维上可视化,我用简化的标量形式来画图 —— 把两条分支都用相同的输入值(即把 a=x, b=x),因此 GLU(x) = x * sigmoid(x),SwiGLU(x) = x * SiLU(x)。这能直观展示门控机制的形状差异。

公式:
image
其中第二个分支作为门控信号。


**特点:**通过门控机制控制信息流,增强非线性表达。
优点: 适合序列建模、控制性强。
常用于: Transformer FFN、语言模型。

11.SwiGLU(Swish-Gated Linear Unit)

公式:
image


**特点:**GLU 的改进版,把 Sigmoid 门换成 Swish 门。
优点: 表达力更强、梯度更平滑,性能优于 ReLU/GELU。
常用于: LLaMA、PaLM、GPT-NeoX 等现代 LLM。

3. 怎么选择激活函数

选择激活函数时,可以根据以下几个原则:

  1. 隐藏层
    • 优先使用 ReLU 或其变种(Leaky ReLU, ELU, PReLU)
    • 优点:计算快、缓解梯度消失
  2. 输出层
    • 二分类:Sigmoid
    • 多分类:Softmax
    • 回归:线性或无激活函数
  3. 网络结构和任务需求
    • RNN 中常用 tanh 或 ReLU
    • 深层网络推荐使用残差连接 + ReLU
    • 如果担心 ReLU 死神经元,可尝试 Leaky ReLU 或 ELU

小技巧

如果不确定用哪个激活函数,隐藏层可以先用 ReLU,输出层按任务选择;训练中注意梯度情况,如果梯度消失或爆炸,再考虑替换或调整激活函数。

4. 总结

激活函数是神经网络不可或缺的魔法开关,让网络能够拟合复杂的非线性关系。

  • 核心作用:引入非线性,增强网络表达能力
  • 经典激活函数:Sigmoid、Tanh、ReLU及变种、ELU、Softmax
  • 选择策略:隐藏层用 ReLU 或变种,输出层根据任务选择,结合网络深度和训练表现调整

理解激活函数的本质和特点,有助于设计更稳定、高效的神经网络。

最后我们来回答一下文章开头提出的三个问题:

  1. 什么是激活函数,为什么需要激活函数?
    激活函数是神经网络中对每个神经元输出进行非线性变换的函数,它的作用是赋予网络非线性能力,使得深层网络可以拟合复杂的函数关系。如果没有激活函数,无论网络有多少层,其输出都只是输入的线性组合,无法处理复杂问题。
  2. 经典的激活函数有哪些?
    经典激活函数包括 Sigmoid、Tanh、ReLU 及其变种(如 Leaky ReLU、PReLU)、ELU 和 Softmax 等。其中,Sigmoid 和 Tanh 常用于小型网络或 RNN,ReLU 是深层网络隐藏层的主流选择,而 Softmax 常用于多分类任务的输出层。
  3. 怎么选择激活函数?
    选择激活函数时,隐藏层通常优先使用 ReLU 或其变种,因为它计算简单且能缓解梯度消失;输出层则根据任务选择,比如二分类用 Sigmoid、多分类用 Softmax、回归任务可用线性或无激活函数;在特定场景下,也可以结合网络深度和训练表现灵活调整。

关于深度学习和大模型相关的知识和前沿技术更新,请关注公众号coting!


激活函数有什么用?有哪些常用的激活函数?》 是转载文章,点击查看原文


相关推荐


别再死磕扩散模型了,MiniMax新开源揭示:视觉Tokenizer才是下一个金矿
墨风如雪2025/12/20

在AI绘画和视频生成卷到飞起的今天,不管是大厂还是开源社区,大家似乎都陷入了一个怪圈:拼命堆算力去训练更大的Diffusion Transformer(DiT),指望通过增加生成模型的参数来获得更好的画质。 但就在前两天,凭借海螺视频(Hailuo AI)在圈内名声大噪的MiniMax团队,突然开源了一个名为VTP(Visual Tokenizer Pre-training)的项目。看完他们的论文和代码,我不得不说,这帮人可能刚刚掀翻了视觉生成领域的桌子。 他们抛出了一个极其反直觉的结论:如果我


【转载】我们在大型开源项目上对 7 个 AI 代码审查工具进行了基准测试。以下是结果。
是魔丸啊2025/12/12

转载 2025年12月11日 TL;DR 我们在唯一的 AI 辅助代码审查公共基准测试上评估了七个最广泛使用的 AI 代码审查工具。Augment Code Review,由 GPT-5.2 驱动,以显著优势交付了最强的性能。它的审查既具有更高的精确度,又具有大幅更高的召回率,这得益于其独特强大的 Context Engine,能够持续检索正确的文件、依赖项和调用站点。虽然许多工具由于有限的上下文而产生嘈杂的评论或遗漏关键问题,但 Augment 作为唯一能够可靠地在整个代码库中进行推理并发现


Bun 卖身 Anthropic!尤雨溪神吐槽:OpenAI 你需要工具链吗?
也无风雨也雾晴2025/12/3

Anthropic 收购 Bun,Claude Code 半年营收破 10 亿美元 今天刷推的时候看到一条爆炸新闻:Anthropic 把 Bun 给收了。 是的,就是那个号称"比 Node.js 快得多"的 JavaScript 运行时。这也是 Anthropic 成立以来的第一笔收购。 更劲爆的是,官宣的同时还顺便秀了一把肌肉——Claude Code 上线半年,年化收入已经突破 10 亿美元。 网友速度很快,恶搞图已经出来了:Bun 屁股上印着 Claude 的 logo 先说说 Cla


小迪安全第二十六天
江边鸟2192026/1/6

写好这些配置好相应的数据库内容 发现不足套用模板使用模板框架 <!DOCTYPE html> <html> <head>    <meta charset="UTF-8">    <!-- 页面标题(动态变量) -->    <title>{page_title}</title>    <style>        /* 全局样式 */        body {            font-family: Arial, sans-serif;  /* 设置默认字体


WebSocket 在 Spring Boot 中的实战解析:实时通信的技术利器
苏渡苇2026/1/15

WebSocket 在 Spring Boot 中的实战解析:实时通信的技术利器 一、引言:为什么我们需要 WebSocket? 在传统的 Web 应用中,客户端(浏览器)与服务器之间的通信是 请求-响应 模式:客户端发起请求,服务器处理后返回结果。这种模式适用于大多数场景,但在需要 实时双向通信 的场景下(如聊天室、股票行情、在线协作、游戏等),频繁轮询(Polling)或长轮询(Long Polling)会带来高延迟、高开销的问题。 WebSocket 协议应运而生——它提供了一种全双工、低


Rust 所有权与借用:从堆栈开始建立心智模型
mCell2026/1/23

本文写作时,极大的借鉴了《The Rust Programming Language》(俗称“Rust 圣经”)中相关章节的内容和结构,在此表示感谢。 写 Rust 的第一道坎,不是语法,也不是宏,而是“我明明只是把变量传给你用一下,怎么它就不属于我了?” 这类困惑通常并不奇怪,因为我们习惯了别的语言那套“内存默认有人兜底”的模型,比如 Javascript、Golang 的自动垃圾回收机制。Rust 恰恰相反:它要求你把内存这件事想清楚,然后把规则写进类型系统,交给编译器在编译期强制执行——

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客