S 型函数:Sigmoid 与 Tanh

Sigmoid 函数会将任何实数压缩到 (0, 1) 区间,非常适合用来表示概率。Tanh (双曲正切) 函数则将实数压缩到 (-1, 1) 区间。它们都存在梯度消失的问题,在现代深度网络中已较少作为主要的激活函数。

import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x)

修正线性单元:ReLU 与 Leaky ReLU

ReLU (Rectified Linear Unit) 是目前最流行的激活函数。它的形式非常简单:输入大于0时,输出等于输入;输入小于等于0时,输出为0。这使得计算非常高效,并有效缓解了梯度消失问题。但它也可能导致“神经元死亡”问题。

Leaky ReLU 是 ReLU 的一个变体,它允许在输入为负时有一个小的、非零的梯度,从而解决了“神经元死亡”的问题。

动手试试:

拖动滑块来调整 Leaky ReLU 的“泄漏”系数 (alpha),观察函数曲线如何从标准的 ReLU 变为 Leaky ReLU。

import numpy as np def relu(x): return np.maximum(0, x) def leaky_relu(x, alpha=0.1): return np.where(x > 0, x, x * alpha)

Softmax:多分类的概率转换器

Softmax 函数通常用在多分类神经网络的输出层。它能将一个包含任意实数的向量(模型的原始输出,称为 logits)转换成一个概率分布,其中每个元素都在 (0, 1) 之间,且所有元素之和为 1。

动手试试:

输入几个模型的原始输出分数 (Logits),观察 Softmax 如何将它们转化为各类别的预测概率。

import numpy as np def softmax(logits): exps = np.exp(logits - np.max(logits)) return exps / np.sum(exps) logits = [2.0, 1.0, 0.1] probabilities = softmax(logits) # probabilities ≈ [0.659, 0.242, 0.099]

输出概率