常用激活函数与损失函数
激活函数
激活函数(Activation Function) 在神经网络中扮演着至关重要的角色。它引入了非线性,使得神经网络能够学习和逼近复杂的函数关系。如果没有激活函数,无论神经网络有多少层,它都只会是一个线性模型,无法处理非线性的数据。
具体作用:
- 引入非线性: 这是最核心的作用。现实世界中的数据往往是非线性的,激活函数使得神经网络能够学习和表示这些非线性关系。
- 增强模型的表达能力: 通过非线性变换,神经网络可以学习到更复杂的特征组合,从而提高模型的表达能力。
- 控制输出范围: 某些激活函数可以将神经元的输出限制在特定的范围内,这对于某些任务(如分类)非常有用。
常用的激活函数及其应用场景:
- Sigmoid 函数
- 公式: \sigma(x) = \frac{1}{1 + e^{-x}}
- 特点: 将输入值压缩到 (0, 1) 之间。
- 优点: 输出范围明确,可以解释为概率。
- 缺点:
- 梯度消失(Vanishing Gradient): 当输入值非常大或非常小时,函数的梯度会趋近于0,导致反向传播时梯度很小,网络权重更新缓慢,甚至停滞。
- 非零中心输出: 输出不是以0为中心,这可能导致下一层的输入都是正数,从而在梯度下降时产生“锯齿”现象,影响收敛速度。
- 常用场景:
- 早期神经网络的隐藏层。
- 二分类问题的输出层(将输出解释为属于某一类别的概率)。
- 不推荐用于深层网络的隐藏层。
- Tanh 函数 (Hyperbolic Tangent)
- 公式: \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
- 特点: 将输入值压缩到 (-1, 1) 之间。
- 优点:
- 输出是以0为中心的,这有助于解决Sigmoid的非零中心问题,使得梯度下降更稳定。
- 相比Sigmoid,梯度消失问题略有缓解,但仍然存在。
- 缺点: 仍然存在梯度消失问题。
- 常用场景:
- 早期神经网络的隐藏层。
- 循环神经网络(RNN)中,由于其输出范围的对称性,常用于门控机制。
- ReLU 函数 (Rectified Linear Unit)
- 公式: \text{ReLU}(x) = \max(0, x)
- 特点: 当输入大于0时,输出等于输入;当输入小于等于0时,输出为0。
- 优点:
- 解决了梯度消失问题: 在正区间内,梯度恒为1,避免了梯度消失。
- 计算效率高: 只需要判断正负,计算速度快。
- 稀疏激活: 负数输入会直接输出0,导致部分神经元不被激活,从而产生稀疏性,有助于提高模型的泛化能力。
- 缺点:
- 死亡ReLU问题(Dying ReLU): 当输入为负数时,梯度为0,导致该神经元及其连接的权重无法更新。如果学习率设置不当,可能导致大量神经元“死亡”。
- 非零中心输出。
- 常用场景:
- 目前深度学习中最常用的激活函数,广泛应用于各种神经网络的隐藏层,尤其是卷积神经网络(CNN)。
- Leaky ReLU 函数
- 公式: \text{Leaky ReLU}(x) = \max(\alpha x, x),其中 \alpha 是一个很小的正数(通常为0.01)。
- 特点: 解决了ReLU的死亡问题,当输入为负数时,仍然有一个很小的非零梯度。
- 优点: 解决了死亡ReLU问题,保留了ReLU的优点。
- 缺点: 性能不总是优于ReLU,需要手动设置 \alpha 值。
- 常用场景: 当ReLU出现死亡神经元问题时,可以尝试使用Leaky ReLU。
- PReLU 函数 (Parametric ReLU)
- 公式: \text{PReLU}(x) = \max(\alpha x, x),其中 \alpha 是一个可学习的参数。
- 特点: 将Leaky ReLU中的固定参数 \alpha 变为可学习的参数,使得模型可以自适应地学习负区间的斜率。
- 优点: 进一步优化了Leaky ReLU,理论上性能更好。
- 缺点: 增加了模型的参数量。
- 常用场景: 在某些需要更高性能的场景下,可以尝试使用PReLU。
- ELU 函数 (Exponential Linear Unit)
- 公式:
\text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (e^x - 1) & \text{if } x \le 0 \end{cases}
其中 \alpha 是一个正数,通常取1。 - 特点: 在正区间是线性,在负区间是指数衰减。
- 优点:
- 结合了ReLU的优点,避免了梯度消失。
- 在负区间有非零输出,有助于将输出均值推向0,缓解了非零中心问题。
- 在负区间有平滑的曲线,有助于减少梯度震荡。
- 缺点: 计算量比ReLU稍大。
- 常用场景: 在某些深度网络中,ELU可能比ReLU表现更好。
- Softmax 函数
- 公式: 对于一个包含 K 个元素的向量 \mathbf{z} = [z_1, z_2, \dots, z_K],Softmax 函数的输出是另一个 K 维向量 \mathbf{\sigma}(\mathbf{z}),其中第 i 个元素为:
\sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} - 特点: 将一个任意实数向量转换为一个概率分布,即所有输出元素的和为1,且每个元素都在 (0, 1) 之间。
- 优点: 非常适合多分类问题,输出可以直接解释为属于每个类别的概率。
- 缺点: 通常只用于输出层。
- 常用场景:
- 多分类问题的输出层。
损失函数
损失函数(Loss Function),也称为成本函数(Cost Function)或目标函数(Objective Function),用于衡量模型预测值与真实值之间的差异。在训练过程中,模型的目标就是最小化这个损失函数。
常用的损失函数及其应用场景:
- 均方误差 (Mean Squared Error, MSE)
- 公式: L(\mathbf{y}, \hat{\mathbf{y}}) = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2
其中 y_i 是真实值,\hat{y}_i 是预测值,N 是样本数量。 - 特点: 计算预测值与真实值之差的平方的平均值。对较大的误差惩罚更重。
- 优点: 易于理解和计算,在数学上可导,方便优化。
- 缺点: 对异常值(outliers)敏感,因为平方会放大误差。
- 常用场景:
- 回归问题: 最常用的损失函数之一,例如预测房价、股票价格等连续值。
- 线性回归、多项式回归等。
- 平均绝对误差 (Mean Absolute Error, MAE)
- 公式: L(\mathbf{y}, \hat{\mathbf{y}}) = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i|
- 特点: 计算预测值与真实值之差的绝对值的平均值。
- 优点: 对异常值不那么敏感,因为是绝对值而不是平方。
- 缺点: 在0点处不可导,可能导致优化困难(尽管在实践中通常不是大问题)。
- 常用场景:
- 回归问题: 当数据中存在较多异常值时,MAE可能比MSE更鲁棒。
- 需要更平滑的误差惩罚时。
- 交叉熵损失 (Cross-Entropy Loss)
-
特点: 主要用于分类问题,衡量两个概率分布之间的差异。
-
优点:
-
在分类问题中,当预测概率与真实标签相差较大时,会产生较大的梯度,有助于模型快速学习。
-
与Sigmoid或Softmax激活函数结合使用时,可以避免梯度消失问题。
-
常用场景:
-
分类问题:
-
二元交叉熵损失 (Binary Cross-Entropy Loss, BCE)
-
公式: L(y, \hat{y}) = -[y \log(\hat{y}) + (1-y) \log(1-\hat{y})]
其中 y 是真实标签(0或1),\hat{y} 是模型预测的属于类别1的概率。 -
常用场景:
-
二分类问题: 例如判断邮件是否为垃圾邮件、图片中是否包含猫等。通常与Sigmoid激活函数结合使用。
-
多类别交叉熵损失 (Categorical Cross-Entropy Loss)
-
公式: L(\mathbf{y}, \hat{\mathbf{y}}) = -\sum_{i=1}^{K} y_i \log(\hat{y}_i)
其中 K 是类别数量,y_i 是真实标签的one-hot编码(如果样本属于第 i 类则为1,否则为0),\hat{y}_i 是模型预测属于第 i 类的概率。 -
常用场景:
-
多分类问题: 例如识别手写数字(0-9)、图片分类(猫、狗、鸟等)。通常与Softmax激活函数结合使用。
-
- Hinge Loss (合页损失)
- 公式: L(y, \hat{y}) = \max(0, 1 - y \cdot \hat{y})
其中 y 是真实标签(通常为-1或1),\hat{y} 是模型的预测输出(通常是分类器的原始得分)。 - 特点: 当预测正确且置信度足够高时,损失为0;否则,损失随预测值与真实值之间的差距线性增加。
- 优点: 鼓励模型不仅要正确分类,还要以一定的间隔(margin)进行分类,这有助于提高模型的泛化能力。
- 缺点: 在 y \cdot \hat{y} = 1 处不可导。
- 常用场景:
- 支持向量机 (SVM): Hinge Loss是SVM的核心损失函数。
- 最大间隔分类器。
- Huber Loss (平滑平均绝对误差)
- 公式:
L_\delta(y, \hat{y}) = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & \text{if } |y - \hat{y}| \le \delta \\ \delta |y - \hat{y}| - \frac{1}{2}\delta^2 & \text{if } |y - \hat{y}| > \delta \end{cases}
其中 \delta 是一个超参数,定义了从平方误差到绝对误差的切换点。 - 特点: 结合了MSE和MAE的优点。当误差较小时,使用MSE(对小误差敏感);当误差较大时,使用MAE(对大误差不敏感)。
- 优点: 对异常值具有鲁棒性,同时在误差较小时保持了MSE的平滑性。
- 缺点: 需要调整超参数 \delta。
- 常用场景:
- 回归问题: 当数据中可能存在异常值,但又希望在正常范围内保持MSE的平滑性时。
- 自动驾驶、机器人控制等对误差敏感度有特定要求的场景。