神经网络中,激活函数有哪些种类

举报
林欣 发表于 2025/08/24 22:48:42 2025/08/24
【摘要】 在神经网络中,激活函数通过引入非线性变换,使模型能够学习复杂的数据模式。以下是常见的激活函数分类及其详细说明,包括公式、特性、应用场景和优缺点: 一、基础激活函数 1. Sigmoid(Logistic)公式:σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1​输出范围:(0, 1)特性:连续、光滑、可微。将输入压缩到0到1之间,适合...

在神经网络中,激活函数通过引入非线性变换,使模型能够学习复杂的数据模式。以下是常见的激活函数分类及其详细说明,包括公式、特性、应用场景和优缺点:


一、基础激活函数

1. Sigmoid(Logistic)

  • 公式

    σ(x)=11+ex\sigma(x) = \frac{1}{1 + e^{-x}}

  • 输出范围(0, 1)
  • 特性
    • 连续、光滑、可微。
    • 将输入压缩到0到1之间,适合表示概率(如二分类输出层)。
  • 缺点
    • 梯度消失:当输入绝对值较大时,梯度接近0,导致深层网络训练困难。
    • 输出非零中心:可能引发梯度更新方向不稳定(如所有输出为正时,梯度更新偏向同一方向)。
  • 应用
    • 二分类问题的输出层(如逻辑回归)。
    • 早期神经网络(现多被ReLU替代)。

2. Tanh(双曲正切)

  • 公式

    tanh(x)=exexex+ex=2σ(2x)1\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = 2\sigma(2x) - 1

  • 输出范围(-1, 1)
  • 特性
    • 类似Sigmoid,但输出零中心,梯度消失问题仍存在(但比Sigmoid轻)。
  • 应用
    • 隐藏层(比Sigmoid更常用,因零中心性更好)。

3. ReLU(Rectified Linear Unit)

  • 公式

    ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)

  • 输出范围[0, +∞)
  • 特性
    • 计算高效:仅需比较和阈值操作。
    • 缓解梯度消失:正区间梯度恒为1,加速收敛。
  • 缺点
    • 神经元死亡:当输入始终为负时,梯度为0,神经元无法更新(权重永久失效)。
  • 应用
    • 隐藏层的默认选择(如CNN、MLP)。

二、改进型激活函数(解决ReLU问题)

1. Leaky ReLU

  • 公式

    LeakyReLU(x)={xif x0αxif x<0(α(0,1),如0.01)\text{LeakyReLU}(x) = \begin{cases} x & \text{if } x \geq 0 \\ \alpha x & \text{if } x < 0 \quad (\alpha \in (0, 1), \text{如0.01}) \end{cases}

  • 特性
    • 为负输入引入小斜率(如0.01),避免神经元死亡。
  • 应用
    • 图像分类(如ResNet中常用)。

2. Parametric ReLU (PReLU)

  • 公式

    PReLU(x)={xif x0αxif x<0(α为可学习参数)\text{PReLU}(x) = \begin{cases} x & \text{if } x \geq 0 \\ \alpha x & \text{if } x < 0 \quad (\alpha \text{为可学习参数}) \end{cases}

  • 特性
    • 通过反向传播自动学习负区间的斜率,比Leaky ReLU更灵活。
  • 应用
    • 需精细调参的任务(如某些计算机视觉任务)。

3. Exponential Linear Unit (ELU)

  • 公式

    ELU(x)={xif x0α(ex1)if x<0(α>0)\text{ELU}(x) = \begin{cases} x & \text{if } x \geq 0 \\ \alpha (e^x - 1) & \text{if } x < 0 \quad (\alpha > 0) \end{cases}

  • 特性
    • 负区间平滑(指数函数),输出均值接近零,缓解梯度消失。
    • 计算成本略高于ReLU。
  • 应用
    • 需稳定训练的深层网络(如某些RNN变体)。

4. Swish

  • 公式

    Swish(x)=xσ(βx)(β可学习或固定为1)\text{Swish}(x) = x \cdot \sigma(\beta x) \quad (\beta \text{可学习或固定为1})

  • 特性
    • 自门控机制(类似LSTM中的门控),平滑且非单调。
    • 在深度网络中表现优于ReLU(如Google的MobileNetV3)。
  • 缺点
    • 计算成本较高(需Sigmoid和乘法操作)。
  • 应用
    • 计算机视觉和自然语言处理(如BERT的变体)。

三、特殊场景激活函数

1. Softmax

  • 公式

    Softmax(xi)=exij=1Kexj(对K维向量操作)\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^K e^{x_j}} \quad \text{(对K维向量操作)}

  • 输出范围(0, 1),且所有输出之和为1。
  • 特性
    • 将向量转换为概率分布,适合多分类输出层。
  • 应用
    • 多分类任务的输出层(如图像分类、语言模型)。

2. GELU(Gaussian Error Linear Unit)

  • 公式

    GELU(x)=xΦ(x)(Φ(x)为标准正态分布的CDF)\text{GELU}(x) = x \cdot \Phi(x) \quad (\Phi(x) \text{为标准正态分布的CDF})

    近似形式:

    GELU(x)0.5x(1+tanh(2/π(x+0.044715x3)))\text{GELU}(x) \approx 0.5x(1 + \tanh(\sqrt{2/\pi}(x + 0.044715x^3)))

  • 特性
    • 结合ReLU的稀疏激活和ELU的平滑性,在Transformer中表现优异。
  • 应用
    • BERT、GPT等Transformer模型。

3. Mish

  • 公式

    Mish(x)=xtanh(softplus(x))=xtanh(ln(1+ex))\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x)) = x \cdot \tanh(\ln(1 + e^x))

  • 特性
    • 平滑、非单调、自正则化,在深层网络中表现稳定。
  • 应用
    • 计算机视觉(如YOLOv4)。

四、激活函数对比与选择建议

激活函数 输出范围 梯度特性 计算成本 适用场景
Sigmoid (0, 1) 梯度消失 二分类输出层
Tanh (-1, 1) 梯度消失 隐藏层(早期)
ReLU [0, +∞) 梯度恒定(正) 极低 隐藏层默认选择
Leaky ReLU (-∞, +∞) 梯度恒定(全区间) 避免神经元死亡
Swish (-∞, +∞) 自适应门控 深度CNN/Transformer
Softmax (0, 1) 概率归一化 多分类输出层

选择建议

  1. 默认选择:隐藏层用ReLU或Leaky ReLU(简单高效)。
  2. 深层网络:尝试Swish、GELU或Mish(需权衡计算成本)。
  3. 输出层:二分类用Sigmoid,多分类用Softmax。
  4. RNN/LSTM:Tanh或ReLU变体(如Gated ReLU)。

五、代码示例(PyTorch实现)

import torch
import torch.nn as nn
import torch.nn.functional as F

# 定义激活函数
activations = {
    "Sigmoid": nn.Sigmoid(),
    "Tanh": nn.Tanh(),
    "ReLU": nn.ReLU(),
    "LeakyReLU": nn.LeakyReLU(0.1),
    "Swish": lambda x: x * torch.sigmoid(x),  # 近似Swish
    "Softmax": nn.Softmax(dim=1)
}

# 测试输入
x = torch.tensor([-1.0, 0.0, 1.0])

# 打印各激活函数输出
for name, func in activations.items():
    if name == "Softmax":
        output = func(x.unsqueeze(0))  # Softmax需2D输入
    else:
        output = func(x)
    print(f"{name:10}: {output.numpy()}")

输出示例

Sigmoid    : [0.26894143 0.5        0.7310586 ]
Tanh       : [-0.7615942  0.         0.7615942]
ReLU       : [0. 0. 1.]
LeakyReLU  : [-0.1        0.         1.       ]
Swish      : [-0.2689414  0.         0.7310586]
Softmax    : [[0.09003057 0.24472848 0.6652409 ]]

通过理解不同激活函数的特性,可以更灵活地设计神经网络结构,提升模型性能。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。