如是我闻: 激活函数赋予神经网络非线性能力,从而使其能够处理复杂的任务。以下是我们为什么需要激活函数:
1. 引入非线性
- 问题 :
- 如果没有激活函数,神经网络的每一层实际上只是线性变换(矩阵乘法和加法)。
- 线性变换的组合仍然是线性,因此无论网络有多少层,最终输出仍然是输入的线性函数。
- 解决 :
- 激活函数引入非线性,使神经网络能够近似复杂的非线性函数。
- 这使得神经网络可以学习更复杂的映射,比如图像分类、语音识别等。
2. 增强表达能力
- 神经网络的目标是通过学习参数来逼近输入和输出之间的映射。
- 激活函数帮助网络捕获数据的复杂模式,例如分类边界或特征关系。
- 线性网络 无法表示非线性边界,而非线性网络(通过激活函数)可以轻松表示复杂边界。
3. 提供梯度流
- 在神经网络训练过程中,需要通过反向传播算法计算梯度以更新参数。
- 激活函数决定了梯度流的特性:
- 非饱和激活函数(如 ReLU)可以缓解梯度消失问题。
- 平滑激活函数(如 sigmoid 或 tanh)可以帮助梯度变化更平滑,但可能导致梯度消失。
4. 类型多样化以适应不同任务
不同的激活函数适用于不同任务和场景:
- Sigmoid :
- 将输出映射到 (0, 1),适合二分类任务。
- Tanh :
- 输出范围为 (-1, 1),适合对称的数据分布。
- ReLU :
- 简单高效,广泛用于深层网络,能缓解梯度消失问题。
- Leaky ReLU / Parametric ReLU :
- 解决了 ReLU 的"死亡神经元"问题。
- Softmax :
- 用于多分类任务,将输出转化为概率分布。
5. 控制输出范围
- 激活函数可以对网络的输出进行约束,使其更易于解释或适配特定任务:
- Sigmoid 和 Softmax 输出概率值(0 到 1)。
- Tanh 输出在 -1 到 1 范围内,适合正负对称的数据。
例子对比:没有激活函数 vs. 有激活函数
-
没有激活函数的网络 :
f ( x ) = W 2 ( W 1 x + b 1 ) + b 2 f(x) = W_2(W_1x + b_1) + b_2 f(x)=W2(W1x+b1)+b2是一个简单的线性函数,无法解决复杂的分类或回归问题。
-
有激活函数的网络 :
f ( x ) = W 2 σ ( W 1 x + b 1 ) + b 2 f(x) = W_2\sigma(W_1x + b_1) + b_2 f(x)=W2σ(W1x+b1)+b2其中 σ \sigma σ 是激活函数(如 ReLU 或 sigmoid),可以通过分段非线性实现复杂映射。
激活函数的存在赋予神经网络非线性能力,使其可以建模复杂的关系。它增强了网络的表达能力,控制了输出范围,并确保了梯度流动,最终使深度学习成为解决现实问题的强大工具。
以上