3.3 激活函数(下)
深度学习中的激活函数
在深度学习中,激活函数扮演着至关重要的角色,它们为神经网络引入了非线性特性,从而增强了模型的表达能力。以下是几种常见的激活函数及其简介、代码实现、优缺点等详细介绍。
1. Sigmoid激活函数
简介:
Sigmoid函数是一个经典的激活函数,其输出范围在(0, 1)之间,常用于二分类任务中作为输出层的激活函数,表示概率。Sigmoid函数的数学表达式为:
代码实现(Python,使用NumPy库):
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 示例
x = np.array([-1.0, 0.0, 1.0, 2.0])
y = sigmoid(x)
print(y) # 输出Sigmoid函数值
优缺点:
- 优点:输出值在(0, 1)之间,适合二分类问题的概率输出;平滑且易于求导,适合梯度下降算法。
- 缺点:容易出现梯度消失问题,当输入值非常大或非常小时,梯度接近于0,导致训练困难;输出不是以0为中心,可能影响模型收敛速度;计算复杂度高,涉及指数运算。
2. Tanh激活函数
简介:
Tanh函数与Sigmoid函数类似,但其输出范围在(-1, 1)之间,且以0为中心。Tanh函数的数学表达式为:
代码实现(Python,使用NumPy库):
def tanh(x):
return np.tanh(x) # NumPy库已提供tanh函数
# 示例
x = np.array([-1.0, 0.0, 1.0, 2.0])
y = tanh(x)
print(y) # 输出Tanh函数值
优缺点:
- 优点:输出以0为中心,有助于加快收敛速度;比Sigmoid函数具有更强的非线性表达能力。
- 缺点:仍然存在梯度消失问题;计算复杂度高,涉及指数运算。
3. ReLU激活函数
简介:
ReLU(Rectified Linear Unit)函数是目前深度学习中最常用的激活函数之一,其数学表达式为:
代码实现(Python,使用NumPy库):
def relu(x):
return np.maximum(0, x)
# 示例
x = np.array([-1.0, 0.0, 1.0, 2.0])
y = relu(x)
print(y) # 输出ReLU函数值
优缺点:
- 优点:计算速度快,不涉及指数运算;能够缓解梯度消失问题;在输入为正时,梯度恒为1,有助于加速收敛。
- 缺点:当输入为负时,神经元会“死亡”,即梯度为0,不再参与训练;输出不是以0为中心。
4. LeakyReLU激活函数
简介:
LeakyReLU是对ReLU的改进,它在输入为负时引入了一个小的正斜率,以避免神经元“死亡”问题。其数学表达式为:
[
LeakyReLU(x) = \begin{cases}
x & \text{if } x > 0 \
\alpha x & \text{if } x \leq 0
\end{cases}
]
其中,
α
\alpha
α是一个小的正数,通常取0.01。
代码实现(Python,使用NumPy库):
def leaky_relu(x, alpha=0.01):
return np.where(x > 0, x, alpha * x)
# 示例
x = np.array([-1.0, 0.0, 1.0, 2.0])
y = leaky_relu(x)
print(y) # 输出LeakyReLU函数值
优缺点:
- 优点:解决了ReLU的“死亡”神经元问题;增加了模型的非线性表达能力。
- 缺点:超参数 α \alpha α需要手动调整;在某些情况下,可能不如ReLU效果好。
以上是深度学习中几种常见的激活函数的介绍、代码实现及优缺点分析。在实际应用中,应根据具体任务和数据集的特点选择合适的激活函数。