【神经网络】激活函数

1. 激活函数的作用

  • 引入非线性,无激活函数时,多层神经网络等价于单层线性模型,无法拟合复杂数据分布。引入激活函数之后,神经网络能够拟合任意复杂的曲线,做分类,深度学习。

  • 约束输出值域、保障梯度正常传递,支撑反向传播完成模型训练。

2. 常见的激活函数有哪些?

  • sigmoid:将输出映射到(0, 1)之间,常用于二分类输出层。

    • 公式:σ(x)= 1 / (1 + e-x)
    • 缺点:容易梯度消失,计算量大;【注意】Sigmoid在5层之内就会产生梯度消失现象。
    • 适用场景:二分类任务输出层、传统浅层网络
  • Tanh(双曲正切):输出范围[-1, 1],均值为0,收敛速度优于Sigmoid

    • 公式:tanh(x) = ex - e-x / (ex + e-x)
    • 缺点:依旧存在梯度消失问题。【注意】导数最大值为 1,原点附近梯度更友好,在浅层网络(5~10 层)中表现优于 Sigmoid,但在深层网络(尤其是 10 层以上)中依然会出现梯度消失
    • 适用场景:RNN(循环神经网络)、LSTM(长短期记忆网络,RNN进阶版)等循环网络隐藏层
  • ReLU(修正线性单元):最常用隐藏层激活函数,计算高效,环节梯度消失问题。

    • 公式:ReLU(x) = max(0, x)
    • 值域:[0,+∞],计算简单高效,大幅缓解梯度消失
    • 缺点:存在Dead ReLU问题(负区间梯度为 0,神经元失活)、输出非零均值
    • 适用场景:CNN、全连接网络等绝大多数模型的隐藏层(工业首选)
  • Leaky ReLU:解决ReLU"神经元死亡"问题,负值区域引入小斜率。

    • 公式:Leaky ReLU(x) = {x,ax, x>0 x<=0 (a通常取0.01)
    • 特点:负区间保留微小梯度,解决 Dead ReLU 问题
    • 适用场景:ReLU 表现不佳的网络结构
  • Softmax:它将输入向量转换为概率分布,所有输出值和为

    • 公式:softmax(xi) = exi / ∑j exj
    • 特点:所有输出求和为 1,输出结果代表类别概率分布
    • 适用场景:多分类任务输出层

3. 激活函数选型参考

网络位置 / 任务类型 推荐激活函数 使用频率
常规隐藏层(CNN / 全连接) ReLU / Leaky ReLU ★★★★★(最高,工业界通用首选)
二分类输出层 Sigmoid ★★★★☆(高频,标准搭配)
多分类输出层 Softmax ★★★★★(最高,多分类标配)
回归任务输出层 Identity(线性输出) ★★★★★(最高,回归通用规则)
循环网络 (RNN/LSTM) 隐藏层 Tanh ★★★★☆(高频,传统时序网络主流)

4. 代码示例

import torch
import torch.nn as nn

# 单独调用激活函数
x = torch.randn(5)
act_sigmoid = nn.Sigmoid()
act_tanh = nn.Tanh()
act_relu = nn.ReLU()
act_leaky_relu = nn.LeakyReLU(0.1)
act_softmax = nn.Softmax(dim=0)

# 嵌入神经网络使用
model = nn.Sequential(
    nn.Linear(10, 32),
    nn.ReLU(),
    nn.Linear(32, 2),
    nn.Softmax(dim=1)
)
posted @ 2026-05-29 23:32  静心笃行。  阅读(27)  评论(0)    收藏  举报