No history yet

现代激活函数与优化逻辑

告别梯度消失

你可能还记得,在深度神经网络的早期,Sigmoid和Tanh函数是激活层的首选。但它们都有一个致命弱点:饱和区。当输入值变得很大或很小时,它们的导数会趋近于零。在深层网络中,这些接近零的梯度在反向传播过程中连乘,导致靠近输入层的梯度变得极小,也就是所谓的“梯度消失”问题。这使得网络几乎无法学习。

为了解决这个问题,修正线性单元(ReLU)应运而生。它的思想极其简单:小于零的输入直接归零,大于零的则保持不变。

f(x)=max(0,x)f(x) = \max(0, x)

ReLU的计算效率极高,并且在很大程度上缓解了梯度消失问题,因为它在正区间的导数恒为1。然而,它也引入了一个新问题:。如果一个神经元的输入在训练过程中总是负数,那么它的输出和梯度将永远是零。这个神经元将不再对任何数据有响应,也无法通过梯度下降进行更新,就像“死掉”了一样。

为了解决神经元死亡的问题,研究者们提出了一系列ReLU的变体。

变体公式优点缺点
Leaky ReLUf(x)=max(0.01x,x)f(x) = \max(0.01x, x)允许负值区域有微小梯度,避免神经元死亡。负区间的斜率 α\alpha 是一个需要手动设置的超参数。
PReLUf(x)=max(αx,x)f(x) = \max(\alpha x, x)α\alpha 作为一个可学习的参数,让网络自己决定最佳斜率。增加了模型的参数量,有潜在的过拟合风险。
ELUf(x)={xx>0α(ex1)x0f(x) = \begin{cases} x & x > 0 \\ \alpha(e^x - 1) & x \le 0 \end{cases}输出均值接近于零,有助于加速学习。负区间的饱和特性使其对噪声更具鲁棒性。计算中包含指数运算,比ReLU计算量大。

平滑的非单调函数

ReLU及其变体都是分段线性的,在零点处不可导。虽然这在实践中通常不是大问题,但更平滑的函数能为优化过程带来更稳定的梯度。近年来,一些更先进的激活函数被提出,它们不仅平滑,而且还是非单调的,这意味着它们允许在负值区域出现轻微的“凸起”,这被认为有助于表达更复杂的模式。

其中,是一个代表。它由Google的研究人员提出,其形式非常简洁,是通过自门控机制将输入值与一个Sigmoid函数相乘。

f(x)=xσ(βx)f(x) = x \cdot \sigma(\beta x)

另一个在Transformer模型中广泛应用的激活函数是GELU(高斯误差线性单元)。它从概率角度出发,用标准正态分布的累积分布函数来对输入进行加权。直观上,一个输入值越有可能大于其他输入(即它在分布中的位置越靠右),它被保留的权重就越大。

GELU(x)0.5x(1+tanh[2π(x+0.044715x3)])GELU(x) \approx 0.5x \left(1 + \tanh\left[\sqrt{\frac{2}{\pi}} \left(x + 0.044715x^3\right)\right]\right)

Mish是另一个表现优异的激活函数,它借鉴了Swish的思想,但使用了不同的函数组合。它同样具有平滑、非单调的特性,并在许多计算机视觉任务中取得了顶尖的成果。

f(x)=xtanh(softplus(x))f(x) = x \cdot \tanh(\text{softplus}(x))

选择正确的目标

选择合适的激活函数很重要,但为你的模型设定一个正确的目标——即选择合适的损失函数——同样至关重要。损失函数衡量模型预测与真实标签之间的差距,是模型优化的直接驱动力。

你的损失函数应该与你的业务目标和评估指标紧密对齐。如果评估模型用的是准确率,但优化的是均方误差,结果可能不会理想。

对于不同的任务,我们需要不同的损失函数。

回归任务

目标是预测一个连续值,比如房价或气温。

  • 均方误差 (MSE): 计算预测值与真实值之差的平方的均值。它对误差大的点(离群点)惩罚很重。
  • 平均绝对误差 (MAE): 计算预测值与真实值之差的绝对值的均值。它对所有误差的惩罚是线性的,对离群点不那么敏感。
  • Huber损失: 结合了MSE和MAE的优点。在误差较小时,它像MSE一样是平方的;当误差超过某个阈值时,它变为线性的,从而降低了对离群点的敏感度。

分类任务

目标是预测一个离散的类别,比如一张图片是猫还是狗。

  • 交叉熵损失 (Cross-Entropy Loss): 这是分类任务中最常用的损失函数。它衡量模型预测的概率分布与真实的类别分布之间的差异。当模型对正确类别的预测概率越高,损失就越小。
  • : 它是对交叉熵损失的一种改进,旨在解决类别不平衡问题。在目标检测等场景中,绝大多数样本都是容易分类的“背景”,只有少数是“前景”物体。Focal Loss会降低这些“容易”样本在总损失中的权重,让模型更专注于学习那些“困难”的、难以区分的样本。

无论是选择激活函数还是损失函数,都没有放之四海而皆准的答案。最好的方法是理解它们背后的原理,然后根据你的具体任务、数据分布和模型架构进行实验,找到最优的组合。

Quiz Questions 1/5

在深度神经网络的早期,Sigmoid和Tanh函数为何会导致“梯度消失”问题?

Quiz Questions 2/5

ReLU激活函数引入的主要问题是什么?