【主线1】机器学习基础02--回归regression

3 阅读5分钟

1、朴素贝叶斯--generative生成式模型

预设样本来自一个概率模型,受data影响较小,在data少时不一定会正确。类似GAN等有生成式模型的优势。

求联合分布概率

2、逻辑回归(二分类)--线性到概率--discriminative判别式模型

2.1计算样本加权和

z=wTxz=w^Tx 类似线性回归

2.2 sigmoid映射

类似线性回归,二分类用sigmoid

2.3 损失函数

取交叉熵

原始分数-→取softmax转成和为1概率→取真实的yhat类别对应计算得到的概率→负对数→更新权重

交叉熵(负对数)越小,对应的概率越大,越预测正确,惩罚越小

Softmax 通常配合多分类交叉熵使用。对于真实标签 y(one-hot 向量,即正确类别位置为 1,其余为 0):

L=i=1Kyilog((yˆ)i)L=−∑_{i=1}^K​y_i​log⁡((y\^​)_i​)

因为 y 只有正确那一位是 1,公式可简化为:

L=log((y^)true)\mathcal{L} = - log ⁡ \left(\right. \left(\hat{y}\right)_{\text{true}} \left.\right)

梯度推导结果(非常优雅):

Lzi=(y^)iyi\frac{\partial \mathcal{L}}{\partial z_{i}} = \left(\hat{y}\right)_{i} - y_{i}

即:预测概率减去真实标签。

2.4 L2正则优化

权重更新公式加上L2正则

2.5 多分类扩展

sigmoid改成softmax回归,取概率最大的那个

Softmax(zi)=ezj/jeejSoftmax(z_i)=e^{z_j} / \sum_j{e^{e_j}}

  • 指数化 (ezi​):把任意实数变成正数,同时放大数值之间的差异(让大的更大,小的更小,拉开差距)。
  • 归一化 (除以总和):把所有正数压缩到 0~1 之间,并保证总和为 1。

什么时候用 Softmax?什么时候用 Sigmoid?

场景推荐函数理由
多分类(猫/狗/鸟,三选一)Softmax输出概率互斥,总和为 1
多标签分类(一张图同时有猫和狗)Sigmoid每个标签独立判断是/否,互不影响
二分类(是猫/不是猫)Sigmoid只有一个概率值,不需要归一化多个类别

2.6局限性

逻辑回归是画一条直线,但是会存在分不开的情况,可以通过多个逻辑回归模块叠加实现。

前面的逻辑回归模块先做特征转化,最后一个逻辑回归模块做分类。

which means类神经网络

拓展

  1. 为什么不用线性回归的mse而是交叉熵

Cross Entropy(交叉熵)  和 Mean Squared Error(MSE,均方误差)  都是衡量模型预测与真实值之间差距的损失函数,但它们服务的任务类型完全不同:

对比维度Cross Entropy (交叉熵)MSE (均方误差)
适用任务分类任务回归任务
输出类型概率分布(各类别的可能性,总和为 1)连续数值(可以是任意实数)
核心公式yilog(y^i)-\sum y_i \log(\hat{y}_i)1n(yiy^i)2\frac{1}{n}\sum (y_i - \hat{y}_i)^2
梯度特性配合 Softmax,梯度呈线性,收敛快配合 Sigmoid 时,梯度可能饱和导致收敛慢
PyTorch 实现nn.CrossEntropyLoss()nn.MSELoss()

1. 为什么分类任务必须用交叉熵?

结合你之前学的反向传播,关键原因在于梯度

如果强行用 MSE 做分类:

  • 模型最后通常接 Sigmoid 或 Softmax 把输出压到 0~1 之间。
  • 当模型预测非常离谱时(比如真值是 1,预测值是 0.01),Sigmoid 处于饱和区,其导数接近 0。
  • MSE 的梯度 = 2(y^y)σ(x)2(\hat{y} - y) \cdot \sigma'(x)。因为 σ′(x)≈0,整个梯度趋近于 0,模型几乎不更新,学不动。

而交叉熵配合 Softmax 的梯度恰好消掉了饱和项,梯度变为 y^​−y。预测越离谱,梯度越大,更新越猛,收敛极快。

2. 什么时候用哪个?

场景推荐损失函数理由
图像分类(猫/狗/鸟)Cross Entropy输出是互斥的类别概率
多标签分类(一张图同时有猫和狗)Binary Cross Entropy每个标签独立判断是/否
房价预测MSE输出是连续的金额
代码生成质量评分MSE预测分数是连续值
目标检测中的边框坐标MSE / L1坐标是连续数值

3. 与你之前知识的串联

  • 在反向传播中:交叉熵是分类网络反向传播的“第一推动力”,它决定了 loss.backward() 算出的梯度是否足够“有力”。
  • 在 PyTorch 中:当你搭建一个分类模型(比如 MNIST 手写数字识别),最后一层是 nn.Linear(..., 10),损失函数就应该选 nn.CrossEntropyLoss()。如果你错用了 nn.MSELoss(),模型可能完全不收敛。
  • 与 Softmax 的关系nn.CrossEntropyLoss() 在 PyTorch 中已经内置了 Softmax,所以你模型的最后一层不需要手动加 nn.Softmax(),直接输出原始 logits 即可。

4. 一个直观的例子

假设真实标签是 猫(类别1)

模型预测Cross Entropy LossMSE Loss梯度反馈
[猫:0.9, 狗:0.1]0.105(低)0.01(低)都认为“差不多对了”
[猫:0.1, 狗:0.9]2.30(高,猛罚)0.81(较高)交叉熵会剧烈更新,MSE 相对温和
[猫:0.99, 狗:0.01]0.01(极低)0.0001(极低)都认为“几乎完美”

可以看到,交叉熵对错误预测的“惩罚力度”更符合分类任务的需求——错得越离谱,罚得越重

一句话总结分类用交叉熵,回归用 MSE。  混用会导致梯度消失或收敛极慢,这是无数前人踩过的坑。---非凸优化

误差来源

算法假设分布MLE 推导出的损失函数
最小二乘 (线性回归)误差 ϵ∼N(0,σ2)均方误差 MSE
逻辑回归 (二分类)标签 y∼Bernoulli(p)交叉熵 Cross-Entropy
Softmax 回归 (多分类)标签 y∼Categorical(p)多分类交叉熵

假设模型为 y=wTx+ϵy = \mathbf{w}^{T} \mathbf{x} + \epsilon,且 ϵN(0,σ2)ϵ \sim N(0,σ2)

这意味着给定 x,目标值 y 服从高斯分布:

标签 y∈{0,1},模型预测概率为 y^=σ(wTx)\hat{y} = \sigma \left(\right. \mathbf{w}^{T} \mathbf{x} \left.\right)

这意味着 y 服从伯努利分布

带正则化的损失函数 = 极大似然估计 + 对参数分布的先验假设

L2 正则化:假设参数 w 服从高斯分布(均值为 0)。

L1 正则化:假设参数 w 服从拉普拉斯分布(均值为 0)。

组合拟合项 (似然)正则项 (先验)算法名称
高斯似然 + 高斯先验MSEL2Ridge 回归
高斯似然 + 拉普拉斯先验MSEL1Lasso 回归
伯努利似然 + 高斯先验交叉熵L2带正则化的逻辑回归