激活函数和损失函数
激活函数(Activation function):ReLU,Sigmoid / Logistic(和输出层用到的输出概率分布的推广Softmax)
损失函数(Loss function):Euclidean Loss(均方误差),Cross-Entropy Loss(交叉熵),其他任务的常见损失函数
需要注意的是,对于传统机器学习,损失函数一般仅指单个数据点的损失,而上述均方误差和交叉商家均属于代价函数(cost function)。但,因numpy,PyTorch,TenserFlow这些矩阵化机器学习工具的流行,名为Loss的函数都接受矩阵、向量化输入,所以慢慢损失(loss)函数这个名字就取代了代价(cost)函数,这与强化学习中 reward 和 value 的混用类似(最大化 value / return 用 reward 替代,虽然这个混用危险很多)。
本文直接用损失函数代指代价函数。
激活函数
Sigmoid
Sigmoid代指一类S形的函数,其中包括Logistic函数(还有比如Tanh函数):
\[\sigma(x)=\frac1{1+e^{-x}}\]
优点
- 输出单调递增,属于一个区间,如Logistic的(0,1),这个区间可以近似看成一个概率输出,增加了某种可解释性。
- 输出永远属于(0,1),可以看作是一种正则化。
- 函数处处可导,BP可以丝滑运行。
缺点
- Sigmoid函数很容易造成梯度消失的问题。具体来讲,当输入\(x\)特别大或者特别小的时候梯度几乎为0,更新十分缓慢。
- MLP中多层Sigmoid激活函数叠加会导致数值和梯度都变得极小,难以计算和训练。
- Logistic所有输出都为正,这导致了梯度在所有维度要么都是正要么都是负,收敛便慢。
Softmax
\[\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \quad \text{for } i = 1, \dots, K\]
Sigmoid每一个输入对应的输出彼此都是互相独立的,而Softmax的每一维输出依赖于所有输入。
Softmax的输出向量构成了一个概率分布,结合one-hot的ground truth可以用于CE损失函数的计算。
ReLU
\[\text{ReLU}(x)=\max(0,x)\]
现在主流激活函数都是ReLU。
优点
- 没有梯度消失问题,\(x>0\)时梯度为常数1。
- 梯度在BP过程可以无衰减的通过神经元(当\(x>0\)),变相的增加了模型可能的深度。
- 计算效率极快,无复杂的计算。
- 保证了MLP的稀疏性,那就是,当输入\(x<0\)时,ReLU输出为0。0的增加减少了MLP神经元之间的依赖关系,缓解过拟合,并且进一步的减少了计算量。
缺点
- \(x=0\)时不可导(没有梯度),这种情况可以通过次梯度subgradient解决(这里\(x=0\)的次梯度集合是区间\([0,1]\))。在工程上可以直接定义\(x=0\)处的梯度为0解决。\(x=0\)的情况十分罕见所以具体梯度是多少不重要。
- 所有输出都为正,也有类似Sigmoid的问题
- (神经元死亡问题Dying ReLU)如果一个神经元的输入在训练过程中恒为负数(例如,由于一个过大的负偏置项,或者在前向传播中遇到了一个较大的负权重,或者学习率设置不当导致权重更新过猛),那么这个神经元将始终输出 0,不再参与任何更新。
可以使用ReLU的推广,如Leaky ReLU,来解决神经元死亡问题:
\[\text{LReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \le 0 \end{cases}\]
其中 \(\alpha\) 通常是 0.01 或 0.1。或者在PReLU中\(\alpha\)可以看做成一个可学习的参数。
在现代CNN网络中,BN层通过正则化的方法变相的规避了”过大偏置/权重“引发的神经元死亡问题。
损失函数
不同的任务需要选择不同的损失函数来最小化我们期望的目标。
回归Regression
在回归任务,我们一般希望模型输出和真输出越接近越好,那就是,预测和真实值的欧氏距离(L2)越小越好。这种情况我们用均方误差MSE作为损失函数来调整模型。
\[\text{MSE}=\frac1N\sum_{i=1}^N(y_i-\hat{y}_i)^2.\]
MSE的梯度和\(y_i-\hat{y_i}\)成正比,这意味着预测误差越大,模型更新越明显,提高收敛了速度。
在回归任务,我们的目标是最小化预测值\(\hat{y}\)和真实值(ground truth)\(y\)之间的欧氏距离。
如果我们不希望损失函数被异常值影响到(更加鲁棒),可以使用变种MAE(平均绝对误差)和Hyber Loss(平滑的MAE)。
分类Classification
对于分类任务,我们先引入信息论中的KL散度(Kullback-Leibler Divergence)概念:
KL散度 \(D_{KL}(P || Q)\) 定义为真实分布 \(P\) 和近似分布 \(Q\) 之间对数概率比值的期望值,这个期望是根据真实分布 \(P\) 计算的。
对于离散型随机变量
\[D_{KL}(P || Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right)\]
其中:
- \(P(x)\) 和 \(Q(x)\) 分别是随机变量 \(X\) 取值 \(x\) 时在分布 \(P\) 和 \(Q\) 中的概率。
- \(\log\) 的底数决定了信息的单位(底数为 \(e\) 时单位是 nats,底数为 \(2\) 时单位是 bits)。
对于连续型随机变量
\[D_{KL}(P || Q) = \int_{-\infty}^{\infty} p(x) \log \left( \frac{p(x)}{q(x)} \right) dx\]
其中 \(p(x)\) 和 \(q(x)\) 分别是分布 \(P\) 和 \(Q\) 的概率密度函数。
然后,我们解释为什么交叉熵(Cross-Entropy)用在分类上比均方误差好。
交叉熵 \(H(P, Q)\)(Cross-Entropy)衡量的是使用分布 \(Q\) 进行编码时,对服从真实分布 \(P\) 的事件所需的平均比特数(或信息量)。
其公式根据随机变量的类型(离散或连续)而定:
离散型随机变量(分类任务常用)
假设随机变量 \(X\) 有 \(N\) 个可能的取值 \(x_1, x_2, \ldots, x_N\):
\[H(P, Q) = - \sum_{i=1}^{N} P(x_i) \log Q(x_i)\]
其中:
- \(P(x_i)\) 是真实分布(通常是真实标签的独热编码概率)。
- \(Q(x_i)\) 是近似分布(通常是模型预测的概率)。
- 求和符号 \(\sum\) 遍历所有可能的事件或类别。
更具体的,在机器学习我们定义交叉熵:
\[\text{CE}=-\frac1N\sum_{i=1}^N\sum_{k=1}^Ky_k^{(i)}\log\hat{y_k}^{(i)},\]
其中\(N\)是样本数量,\(K\)是类别数量,\(y_k^{(i)}\)是存储真实类别的one-hot向量,\(\hat{y}_k^{(i)}\)是模型最终激活函数(比如Softmax)得到的预测概率,这里\(\hat{y}_k^{(i)}\)必须满足一个概率分布,所以ReLU不能作为损失函数的输入,那就是,ReLU不能作为CE损失函数MLP的最终层激活函数。对于Sigmoid / Logistic可以使用二元交叉熵(Binary Cross-Entropy):
\[L(y, \hat{y}) = - \left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right].\]
从交叉熵的定义可以看到(每一个数据\(x^{(i)}\))的交叉熵(Cross-Entropy)\(H(P, Q)\) 与 KL散度有密切关系:
\[D_{KL}(P || Q) = H(P, Q) - H(P,P)\]
这里\(H(P,P)\)代表了真实分布\(P\)的信息熵,在机器学习中属于一个常数。所以,最小化KL散度等同于最小化交叉熵\(H(P,Q)\),也就是CE了。
其他任务
| 任务类型 | 损失函数/名称 | 核心用途和特点 |
|---|---|---|
| 序列生成 / 机器翻译 / 文本生成 | Perplexity (困惑度) | 实际上是负对数似然(CE)的指数形式。用于评估语言模型生成文本的流畅度和概率。 |
| 目标检测 / 语义分割 | Dice Loss / Jaccard Loss | 用于衡量预测掩码和真实掩码之间的重叠程度。特别适用于类别不平衡的医学图像分割。 |
| 度量学习 / 人脸识别 | Triplet Loss (三元组损失) | 学习一个嵌入空间,使得锚点(Anchor)与正样本(Positive)的距离小于与负样本(Negative)的距离,并保留一定的边际。 |
| 强化学习 (RL) | A2C / PPO Loss (策略梯度) | 用于优化智能体的行为策略,通常基于优势函数(Advantage Function)或新旧策略的比率。 |
| 一类分类 / 异常检测 | One-Class SVM Loss | 学习一个边界,将正常数据点圈起来,用于识别不属于该集合的新数据点。 |
| 生成对抗网络 (GANs) | Adversarial Loss (对抗损失) | 判别器(Discriminator)使用二元交叉熵,生成器(Generator)使用反转的二元交叉熵或 Wasserstein 距离。 |

1.压缩感知和稀疏编码
2.降维
3.深度学习是如何统治所有机器学习的学习类型的
4.机器学习的学习规则
5.线性回归和逻辑回归的区别
6.模型验证与评估
7.Logit, Logistic, Sigmoid, Softmax在MLP的区别
8.非线性卷积滤波