作者的话 :在前一篇文章中,我们学习了神经网络的基础结构------感知机和多层感知机。今天我们将深入探讨神经网络中至关重要的组成部分------激活函数。激活函数是神经网络的灵魂,它赋予了网络非线性能力,使其能够学习复杂的模式。
一、为什么需要激活函数?
1.1 线性模型的局限性
如果没有激活函数,无论神经网络有多少层,其本质都只是一个线性模型,这意味着深层网络与单层网络没有任何区别,无法学习复杂的非线性关系。
1.2 激活函数的作用
激活函数的核心作用:引入非线性、控制信息流动、输出范围限制、梯度传播。
二、Sigmoid函数
2.1 数学定义
Sigmoid函数将任意实数映射到(0, 1)区间:sigmoid(x) = 1 / (1 + e^(-x))
2.2 函数特性
输出范围(0,1),导数为sigmoid(x) * (1 - sigmoid(x)),关于点(0, 0.5)中心对称,具有饱和性。
2.3 优缺点分析
优点:输出
范围适合表示概率,平滑可导,单调递增。
缺点:梯度消失问题,输出非零中心化,计算量大。
2.4 适用场景
二分类问题的输出层、需要概率输出的场景。
三、Tanh函数
3.1 数学定义
Tanh(双曲正切)函数将任意实数映射到(-1, 1)区间:tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
3.2 函数特性
输出范围(-1,1),导数为1 - tanh(x)^2,零中心化,同样存在饱和性问题。
3.3 与Sigmoid的比较
优势 :零中心化输出,收敛速度比Sigmoid快。
劣势:仍然存在梯度消失问题。
3.4 适用场景
隐藏层的激活函数,循环神经网络(RNN)中常用。
四、ReLU函数
4.1 数学定义
ReLU(Rectified Linear Unit)是目前最常用的激活函数:ReLU(x) = max(0, x)
4.2 函数特性
输出范围[0, +∞),导数为x>0时1否则0,计算简单,缓解梯度消失。
4.3 优缺点分析
优点 :计算速度快,缓解梯度消失,稀疏激活。
缺点:死亡ReLU问题(负数区域梯度为0)。
4.4 ReLU的变体
Leaky ReLU :f(x) = max(ax, x),a通常取0.01。
PReLU :参数化的Leaky ReLU。
ELU :指数线性单元,负数区域使用指数函数。
Swish:f(x) = x * sigmoid(x),Google提出。
4.5 适用场景
卷积神经网络(CNN)的标准选择,大多数隐藏层的默认激活函数。
五、Softmax函数
5.1 数学定义
Softmax用于多分类问题的输出层,将向量转换为概率分布:Softmax(xi) = e^xi / sum(e^xj)
5.2 函数特性
输出范围(0,1),所有输出之和为1,可导,适用于多分类。
5.3 与Sigmoid的区别
Sigmoid用于二分类,Softmax用于多分类;Sigmoid独立处理每个输出,Softmax考虑所有输出。
5.4 适用场景
多分类神经网络的输出层,配合交叉熵损失函数使用。
六、激活函数选择指南
6.1 选择原则
隐藏层 :优先使用ReLU或其变体(Leaky ReLU、ELU)。
输出层-二分类 :使用Sigmoid。
输出层-多分类 :使用Softmax。
输出层-回归:不使用激活函数或使用线性激活。
6.2 各激活函数对比表
Sigmoid:适合二分类输出,存在梯度消失。
Tanh:适合隐藏层,零中心化。
ReLU:默认选择,计算快。
Leaky ReLU:解决死亡ReLU。
Softmax:多分类输出。
七、Python实战:激活函数可视化
7.1 绘制所有激活函数
使用matplotlib绘制激活函数及其导数的图像。
7.2 对比实验
在同一数据集上比较不同激活函数的训练效果。
八、激活函数与梯度消失/爆炸
8.1 梯度消失问题
Sigmoid和Tanh在饱和区梯度接近于0,导致深层网络梯度无法回传。
8.2 解决方案
使用ReLU、批归一化、残差连接、更好的初始化方法。
8.3 梯度爆炸问题
梯度值过大导致参数更新失控,使用梯度裁剪解决。
九、实战案例:MNIST分类
9.1 实验设置
使用不同激活函数训练神经网络,比较准确率。
9.2 结果分析
ReLU通常表现最好,收敛最快;Sigmoid和Tanh在深层网络表现较差。
十、总结与学习建议
10.1 核心要点
激活函数引入非线性;ReLU是隐藏层的首选;Softmax用于多分类;注意梯度消失问题。
10.2 快速选择指南
不知道选什么?用ReLU!二分类输出用Sigmoid,多分类用Softmax。
10.3 进阶学习
GELU、Mish等新型激活函数,激活函数搜索技术。
下一篇预告:【第17篇】损失函数详解:从MSE到交叉熵
本文为系列第16篇,详细讲解了神经网络的激活函数。有任何问题欢迎在评论区交流!
标签:激活函数、Sigmoid、ReLU、Tanh、Softmax、深度学习、神经网络、人工智能