开场总览:机器学习的两大基柱
回归与分类是机器学习的两大核心任务,前者预测连续值(如线性/多项式回归),后者预测离散类别。虽然线性回归可勉强用于二分类,但这并非最佳实践。高维输入既带来"维数灾难"也带来"维数祝福",需要谨慎处理。
整体演进结构
核心洞见:从线性基础到非线性扩展,再桥接分类与高维挑战,构成了机器学习的基础框架。
一、回归 vs. 分类:本质差异
理论定义与解释
- 回归(Regression):预测连续数值输出,估计条件期望 (给定输入 下输出 的平均值)。例如预测房价、温度等具体数值。
- 分类(Classification):预测离散类别标签,估计条件概率 (给定 下 属于某类的概率)。例如判断垃圾邮件、图像识别等。
本质差异:回归关注"量"(连续值),分类关注"质"(类别)。在深度学习中,回归常用于预测任务(如股票价格),分类用于识别任务(如图像分类)。
公式视角
- 回归:最小化均方误差(MSE)损失,公式为 ,假设噪声服从高斯分布,等价于极大似然估计(MLE)。
- 分类(二分类):使用交叉熵损失 ,其中 ,基于伯努利分布假设。多分类使用 softmax + 交叉熵。
实际例子
- 回归:预测身高(输入年龄、体重,输出身高值如 175.5 cm)
- 分类:判断肿瘤良恶性(输入肿瘤大小、形状,输出概率如 ,通过阈值 0.5 决定类别)
历史背景
- 回归源于 Gauss 的最小二乘(1801 年用于天体轨道)
- 分类的逻辑回归由 Cox 在 1958 年推广
- Fisher 在 1936 年用线性判别分析奠定分类基础
总结对比
| 内容 | 回归 | 分类(二分类) |
|---|---|---|
| 输出 | 连续值 | 0 或 1 |
| 分布假设 | 正态分布 | 伯努利分布 |
| 损失函数 | MSE | 交叉熵 |
| 模型输出 | ||
| 深度学习输出层 | 线性激活 | Sigmoid/Softmax |
处理流程图
核心洞见:回归关注连续期望,分类关注离散概率,这种根本差异决定了损失函数与模型选择的不同。
二、线性回归(Linear Regression)
核心原理
- 模型公式: ,其中 是权重, 是偏置, 是噪声(假设 )。预测值为
- 假设:线性关系、样本独立性、同方差性、无多重共线性
训练过程
- 损失函数:最小化 MSE
- 求解方法:
- 闭式解(若 可逆):
- 梯度下降:迭代更新 (深度学习优化基础)
正则化变体
- 岭回归(L2):加 ,防过拟合
- Lasso(L1):加 ,促稀疏
实际例子
预测房价(输入面积、房间数,输出房价)
历史背景
- Legendre 在 1805 年首次发表最小二乘
- Gauss 声称 1795 年已发明,用于拟合小行星轨道
结构图
核心洞见:线性回归是回归分析的起点,简单高效但假设严格,对非线性数据容易欠拟合。
三、多项式回归(Polynomial Regression)
核心思路
- 特征扩展:将原始输入 扩展为多项式基底 \phi(x) = [1, x, x^2, \dots, x^M],然后应用线性回归
- 特点:对参数线性,对原输入非线性,可拟合曲线关系
详细过程
- 例子:温度与冰淇淋销量(销量随温度先增后降,二次多项式可捕捉峰值)
- 风险:阶数 过大会过拟合
- 缓解策略:交叉验证选 、加 L2 正则(岭回归)
历史背景
- 多项式拟合源于 Lagrange 插值(18 世纪)
- 作为回归由 Gergonne 在 1815 年引入
特征扩展图
核心洞见:多项式回归通过特征工程引入非线性,是通向更复杂模型的桥梁,但需要谨慎控制模型复杂度。
四、用"线性回归"做二分类:能用,但不优雅
方法
- 使用线性回归输出 ,通过阈值(如 0.5)判断类别
- 或加 Sigmoid 函数 输出概率,但仍使用 MSE 损失
问题分析
- 输出不受限(可能小于 0 或大于 1),缺乏概率解释
- MSE 损失非凸(加 Sigmoid 后),优化困难,易陷局部最优
- 对离群点敏感,分类边界学习低效
何时可用?
数据线性可分且噪声较小时,可作为简单基线
更好替代:Logistic 回归
- 模型:
- 损失:交叉熵(凸优化,易全局最优)
- 深度学习连接:相当于神经网络输出层使用 Sigmoid 激活
历史背景
- 早期分类用线性回归阈值
- 1958 年 Cox 引入 Logistic 回归取代
- Perceptron(1957 年 Rosenblatt)是线性分类的先驱
技术演进流程图
✅ 最佳实践:对于二分类问题,应使用 Logistic回归(Sigmoid + 交叉熵损失),而不是线性回归加阈值或非线性回归(Sigmoid + MSE损失)。
五、高维输入情况(Curse vs. Bless)
维度灾难(Curse of Dimensionality)
- 定义:特征维数 增大时,数据变稀疏,距离度量失效,需指数级样本
- 影响:过拟合风险高、计算代价大(如图像像素维度高)
- 例子:文本分类中词袋特征数万维
维度祝福(Blessing of Dimensionality)
- 定义:高维空间线性可分性增加(如 SVM 核技巧)
- 例子:深度学习通过嵌入将低维投射到高维,捕捉复杂模式
应对策略
- 降维:PCA、t-SNE、特征选择
- 正则化:L1(稀疏性)、L2(权重衰减)、Elastic Net
- 增加样本量、数据增强
- 深度学习:卷积/注意力机制自动提取特征
历史背景
- "维数灾难"由 Bellman 1961 年命名
- "祝福"源于 Donoho 2000 年高维统计
- Vapnik 的 SVM(1995)巧用高维线性可分
高维处理管线
一般准则
样本数 与特征维数 比例越小时,越需要强正则或先验结构。
核心洞见:高维是一把双刃剑,既是挑战也是机遇,需要合适的工具和策略来平衡。
广义线性模型(GLM)统一框架详解
GLM 作为统一母体
核心本质:广义线性模型(GLM)提供了一个统一框架,通过线性预测、链接函数和概率分布三大组件,将回归、分类、计数等任务纳入同一体系。其基本流程是:输入通过特征映射后线性打分,再经链接函数转换为有意义的输出(概率或期望),最后配合适当的概率分布定义损失函数(通常为负对数似然)。
通用流程图:
日常比喻("打分器 + 安全旋钮 + 发电厂"):
- 打分器:线性预测子 η 生成任意实数分数
- 安全旋钮:链接函数逆变换 g⁻¹ 将分数压缩至合法区间(如概率 [0,1])
- 发电厂:不同的概率分布(高斯/伯努利/泊松)产生不同的输出类型
六、输入—输出映射与链接函数(GLM 视角)
核心框架
GLM 通过三个核心组件建立输入到输出的映射:
- 特征映射:使用 将原始输入转换为特征表示(可线性或非线性)
- 线性预测子:,作为"打分器"
- 链接函数:,其中 ,等价地
常见任务的实现方式
| 任务类型 | 分布假设 | 链接函数 g(μ) | 逆变换 μ = g⁻¹(η) | 输出解释 |
|---|---|---|---|---|
| 回归 | 高斯分布 | 恒等链接:g(μ) = μ | 连续值预测 | |
| 二分类 | 伯努利分布 | Logit 链接: | 类别概率 | |
| 多分类 | 范畴分布 | Softmax 链接 | 各类别概率 | |
| 计数 | 泊松分布 | Log 链接:g(λ) = log(λ) | 事件发生率 |
理论基础与历史背景
- 指数族与规范链接:GLM 假设响应变量来自指数族分布,使用规范链接函数可使自然参数等于线性预测子 η,使梯度计算简洁优雅
- 历史发展:
- GLM 由 John Nelder 与 Robert Wedderburn 于 1972 年系统化提出
- Logistic 曲线可追溯到 Pierre François Verhulst 的人口增长模型(1838)
- 泊松分布由 Siméon Denis Poisson 在 19 世纪提出并应用于概率论
核心洞见:GLM = 特征映射 + 线性打分 + 链接函数 + 概率分布;改变链接函数和分布假设即可适应不同任务类型。
七、用"非线性回归"做二分类(两条路径)
路径 A:概率路线(推荐)
- 目标:直接建模条件概率
- 模型:
- 损失函数:伯努利负对数似然(等价于二元交叉熵)
- 梯度特性:(简洁高效)
- 决策机制: 判为 1(阈值 τ 可调,优化 F1/召回率/AUC)
- 优点:概率校准良好;理论基础牢固;处理类别不平衡能力强
路径 B:回归路线(次选)
- 目标:将分类视为回归问题,
- 损失函数:MSE 或 Huber 损失
- 局限性:
- MSE 隐含高斯噪声假设,与伯努利分布本质不匹配
- 概率输出通常未校准,对阈值敏感
- 对类别不平衡问题处理不佳
非线性来源的两种方式
- 特征空间非线性:通过特征映射 引入非线性(多项式特征、RBF核等)
- 模型本体非线性:使用神经网络、决策树等非线性模型直接学习决策边界
实践建议:优先选择概率路线(Sigmoid + 交叉熵),因其提供校准概率和更稳定的训练特性。
八、训练非线性回归/分类模型
损失函数与分布假设的匹配
| 任务类型 | 分布假设 | 损失函数 | 公式 |
|---|---|---|---|
| 回归 | 高斯分布 | MSE | |
| 二分类 | 伯努利分布 | 二元交叉熵 | |
| 多分类 | 范畴分布 | 交叉熵 | |
| 鲁棒回归 | Laplace分布 | MAE |
正则化技术与先验对应
- L2 正则化(权重衰减): ↔ 高斯先验
- L1 正则化: ↔ Laplace 先验
- 早停(Early Stopping):通过验证集监控防止过拟合
- Dropout:神经网络特有的正则化技术
- 数据增强:通过扩展训练数据提高泛化能力
优化策略与实践
- 优化器选择:SGD(带动量)、Adam、AdamW 等自适应学习率算法
- 学习率调度:热身(Warmup)、余弦退火、阶梯下降等策略
- 数值稳定技巧:使用
with logits版本的损失函数,避免数值溢出
数据工程与模型评估
- 数据预处理:输入标准化、缺失值处理、特征编码
- 数据集划分:训练集/验证集/测试集分离,监控过拟合
- 类别不平衡处理:
- 重采样(过采样少数类、欠采样多数类)
- 损失函数加权(类别权重)
- Focal loss(降低易分类样本的贡献)
- 决策阈值调整
- 概率校准:Platt scaling、等距回归(isotonic regression)
- 评估指标:
- 回归:RMSE、MAE、R²
- 二分类:ROC-AUC、PR-AUC、F1-score、KS统计量
- 多分类:宏/微平均 F1、准确率
训练流程示意图:
核心洞见:成功的模型训练需要四个要素的协调配合:模型结构、损失函数(匹配分布假设)、正则化策略和优化算法。
九、正态分布假设(回归的概率基础)
数学模型与推导
回归任务中,GLM 假设响应变量服从正态分布:
其中 为线性预测, 为独立同分布的高斯噪声。
似然函数与最大似然估计:
- 单样本似然:
- 数据集负对数似然:-\log p(\mathcal{D}|w) = \text{常数} + \frac{1}{2\sigma^2}\sum_i (y_i-\mu_i)^2 最大化似然等价于最小化 MSE 损失
扩展与变体
- 异方差回归:,采用加权最小二乘
- 鲁棒回归:
- Laplace 假设 → MAE 损失(对异常值更鲁棒)
- Huber 损失:小误差时类似 MSE,大误差时类似 MAE
- 贝叶斯视角:权重高斯先验 等价于 L2 正则化
模型诊断与实践建议
- 残差分析:绘制残差图、QQ图检查正态性和同方差性
- 变换处理:对于非对称或厚尾数据,考虑响应变量变换(如对数变换)
- 正则化选择:L2 正则化(岭回归)与高斯先验对应
历史背景:最小二乘法由 Legendre(1805)和 Gauss(1809)分别独立提出,Gauss 将其用于行星轨道计算,并推导出正态分布(又称高斯分布)。
核心洞见:回归中使用 MSE 损失不是任意选择,而是基于正态分布假设的最大似然估计的自然结果。
十、伯努利分布假设(二分类的概率基础)
概率建模
对于二分类问题 ,GLM 使用伯努利分布建立概率模型:
其中条件概率 通过 logit 链接函数与线性预测子关联:
最大似然估计
- 负对数似然(二元交叉熵):
- 梯度计算:
形式简洁,利于高效优化
- 决策边界:
解释与扩展
- 几率解释:(对数几率线性)
- 贝叶斯视角:Beta-Bernoulli 共轭先验便于贝叶斯推断
- 类别不平衡处理:损失函数加权、Focal loss、阈值调整
历史背景:伯努利分布以 Jacob Bernoulli 命名;logit 函数由 Joseph Berkson 于 1944 年提出;logistic 曲线由 Verhulst 用于人口增长建模。
核心洞见:二分类中的 Sigmoid 函数和交叉熵损失源于伯努利分布假设下的最大似然估计,而非经验选择。
加餐:多分类的 Softmax + 交叉熵
统一框架
多分类是二分类的自然扩展,使用范畴分布(Categorical distribution)建模:
其中 为第 k 类的线性预测子。
损失函数与优化
- 负对数似然(交叉熵损失):
- 梯度特性:
直观解释
Softmax 函数将各类别的"得分"转换为概率分布,交叉熵损失鼓励模型为真实类别分配高概率,同时抑制其他类别的概率。
核心洞见:Softmax + 交叉熵不是独立的组件,而是范畴分布假设下最大似然估计的统一框架。
Logistic 回归
一、Logistic 回归:核心思想
要解决什么问题?
在二分类问题中,我们想要模型输出一个概率值,而不仅仅是一个0或1的硬判断。比如“这张图是猫的概率为90%”,这比单纯说“是猫”包含更多信息。
如何解决?
Logistic 回归不再使用线性函数直接预测结果,而是预测一个事件发生的概率。
核心组件:Sigmoid 函数
它将任何实数“压缩”到 (0, 1) 之间,完美契合概率的定义。
📌 例子:
- :
- :(概率很高)
- :(概率很低)
在Logistic回归中,,所以:
二、最大化条件数据似然(Maximum Conditional Likelihood)
大白话理解
我们手头有一堆数据(比如一堆猫和狗的图片和标签)。我们想要找到一组参数 (, ),使得我们模型**“猜中”这些已有标签的可能性最大**。
🎯 好比是:你有一个总爱猜硬币的朋友。你扔了10次硬币,结果是【正,正,反,...,反】。他现在要调整自己的“猜测策略”(模型参数),使得他猜对这个序列的可能性最高。调整策略的过程就是“最大化似然”。
数学建模
写出“猜中”所有标签的概率(似然函数): 假设数据点之间独立,那么模型猜中所有标签的概率是每个点概率的乘积:
对于每个样本,其概率为:
一个巧妙的写法: 可以将上述两种情况合并成一个简洁的公式:
- 当 时,后半部分指数为0,结果为1,公式变为 。
- 当 时,前半部分指数为0,结果为1,公式变为 。
因此,总的似然函数为:
(其中 )
最大似然估计: 我们的目标就是找到使得 最大的参数 和 。
三、交叉熵误差函数(Cross-Entropy Error)
从似然到损失函数
乘积形式的似然函数 计算起来比较麻烦(容易下溢),而且我们通常的优化算法是最小化损失,而非最大化似然。
取对数(Log-Likelihood): 乘积取对数会变成求和,简化计算,且对数函数是单调的,最大化对数似然等价于最大化似然。
取负,变为可最小化的损失函数: 为了让“最大化似然”变为标准的“最小化损失”,我们对数似然取负。
这个函数就是交叉熵误差函数。它是衡量两个概率分布(真实分布
t和预测分布σ)差异的经典指标。
直观理解交叉熵
- 预测完全正确:如果真实标签 ,模型预测 ,那么损失为 。
- 预测完全错误:如果真实标签 ,模型预测 ,那么损失为 ,趋向于无穷大!这意味着错误预测受到了“严厉的惩罚”。
📌 例子: 假设一个样本真实标签为 1 ()。
- 模型A预测 : (损失很小)
- 模型B预测 : (损失很大)
四、训练和测试
训练(Training)
定义总损失:通常使用平均交叉熵损失。
为了防止过拟合,可以加入L2正则化项:
(注意:通常不对偏置 做正则化)
计算梯度: 通过反向传播(Backpropagation)计算损失函数关于参数 和 的梯度。
这个结果非常简洁和优美! 梯度正好是 (预测值 - 真实值) × 输入。
更新参数(梯度下降):
其中 是学习率(Learning Rate)。
测试(Testing/Inference)
训练完成后,对于一个新的输入 :
- 计算其输出概率:
- 根据概率进行分类决策:
五、利用回归方法进行二分类:总结
我们可以把线性回归“改造”成二分类器,下图清晰地展示了这个技术演进路线:
✅ 最佳实践:对于二分类问题,应使用 Logistic回归(Sigmoid + 交叉熵损失),而不是使用线性回归或非线性回归(Sigmoid + MSE损失)。因为交叉熵损失对于Sigmoid函数能产生凸的优化问题,保证找到全局最优解,而MSE损失则不会。
一、向量的线性回归(Multi-output Linear Regression)
要解决什么问题?
之前的回归问题,输出都是一个标量(Scalar),比如房价。但现在输出可能是一个向量(Vector)。 例如:
- 预测一个人的身体健康指标(身高、体重、血压)
- 预测一辆车的多项性能数据(加速度、油耗、最高时速)
模型如何设计?
为输出的每一个维度都训练一个独立的线性回归模型。
数学表示
假设输出是 维向量 ,输入是 维向量 。 我们对每一个输出维度 都定义一个线性模型:
其中,
- 是对应于第 个输出的权重向量
- 是对应于第 个输出的偏置项
损失函数:MSE
损失函数是每个输出维度上MSE的总和:
📌 例子: 要预测一辆车的“加速度”和“油耗”()。
- → 专门预测加速度
- → 专门预测油耗
二、向量-矩阵形式(Vector-Matrix Form)
为什么要用矩阵形式?
为了更简洁的表示和更高效的计算。我们可以把 组参数 合并成一个矩阵 。
定义参数矩阵
整合模型
整个模型的预测输出可以写成一个非常简洁的向量形式:
这里, 是一个 维向量,其第 个分量就是 。
损失函数
(向量二范数的平方,即所有维度误差平方的和)
三、类别标签的表示(Label Representation)
从回归到分类
现在我们进入核心:如何用回归方法解决多分类问题? 首先需要解决如何用数学表示一个类别标签。
两种表示方法
假设有一个5分类问题(类别:猫、狗、鸟、车、船)。
| 表示方法 | 例子(标签“猫”) | 优点 | 缺点 |
|---|---|---|---|
| 标量表示 | t = 1 | 简单,存储空间小 | 隐含了类别间的顺序关系(1<2<3?),但分类问题中类别是无序的 |
| One-Hot 编码 | t = [1, 0, 0, 0, 0]^T | 明确表示类别,无顺序关系 | 存储空间大,是稀疏向量 |
✅ 机器学习中几乎总是使用 One-Hot 编码。
- 性质1:向量中每个元素
- 性质2:所有元素之和为 1 ()
四、利用回归进行多标签分类
核心思想
既然标签 可以被表示成一个向量(如 One-Hot),那么我们就可以用向量的线性回归模型 来直接预测这个标签向量!
流程
存在的问题
模型 的输出是一个任意实数值的向量。
- 无法保证所有输出值的和為1。
- 输出值可能是负数,无法直接解释为概率。
❗ 结论:直接使用线性回归进行多分类,输出值没有概率意义,只是为我们提供了一个决策依据(取最大值索引 argmax)。我们需要对其进行改造,使其输出具有概率分布的特性。
五、正态分布假设(用于分类?)
回顾回归中的假设
在回归问题中,我们假设目标值 给定 后,服从一个正态分布,其均值就是模型的预测值 :
最大化这个条件似然等价于最小化 MSE 损失。
将其用于分类问题
如果我们强行把分类问题的 One-Hot 标签 当作一个连续向量,同样假设:
那么最大化似然仍然等价于最小化 MSE:。
为什么不合适?
- 分布不匹配:One-Hot 向量是离散的、稀疏的,而正态分布描述的是连续的、密集的数据。这个假设非常别扭。
- 概率解释缺失:模型的输出 没有任何约束,不能解释为概率。
✅ 我们需要一个更合适的概率分布假设来描述分类标签。
六、分类的Multinoulli分布假设
正确的分布选择
对于多分类问题,标签 服从范畴分布(Categorical Distribution),也称为 Multinoulli 分布。它是伯努利分布在多个类别上的推广。
- 伯努利分布:描述二分类问题(如抛一次硬币)。
- Multinoulli 分布:描述多分类问题(如掷一次骰子)。
概率表示
用一个概率向量 来表示每个类别发生的概率,其中:
对于 One-Hot 编码的标签 ,其概率质量函数为:
📌 例子:一个3分类问题,真实类别是第2类。
- One-Hot 标签:
- 模型预测的概率分布:
- 该样本的似然为:
一、Softmax 函数:从任意值到概率分布
1. 它要解决什么问题?
在多分类问题中,模型的原始输出(通常称为 logits)是一组任意的实数值。这些值:
- 可能很大,也可能很小,甚至有正有负。
- 它们的和不为1,因此无法直接解释为概率。
我们需要一个“转换器”,把这些任意值变成一个合法的概率分布。 这个转换器就是 Softmax 函数。
2. 数学定义
对于一个包含 个类的分类问题,给定模型的原始输出向量 ,Softmax 函数的计算公式为:
3. 核心特性与直观理解
Softmax 函数有两大核心特性,使其成为完美的概率转换器:
- 输出范围在 (0, 1) 之间:因为指数函数 ,分母是所有分子的和,所以每个输出 都是一个正数,且小于1。
- 所有输出之和为 1:。这完美满足了概率公理。
它的工作原理是“赢者通吃”:它会放大最大值与其余值的差距。假设 是 中最大的值,那么 会远大于其他的 ,从而使得 的值非常接近 1,而其他的 则接近 0。
📌 例子: 假设一个三分类模型的原始输出为 。
- 计算:
- 分母:
- Softmax 输出:
可以看到,最大的值 2.0 被赋予了最高的概率(0.66),并且所有输出之和为 1,成为一个完美的概率分布。
二、最大条件似然:衡量模型“猜得有多准”
1. 大白话理解
似然(Likelihood) 就是“可能性”。最大条件似然估计 的核心思想是:
我们已经看到了一堆事实(训练数据),我们要找到一组模型参数,使得模型**“最有可能”产生出我们现在看到的这堆数据**。
换句话说,就是找到最能让模型对训练数据“自圆其说”的参数。
2. 数学建模
假设:对于样本 ,其标签 服从以 为参数的 Multinoulli 分布。 就是 Softmax 函数的输出,即模型预测的概率分布。
单个样本的似然:模型“猜中”一个真实标签 的概率是: (因为标签 是 one-hot 向量,只有真实类别 的位置 ,其他为0,所以这个连乘的结果其实就是 ,即模型预测的真实类别的概率)。
整个数据集的似然:假设样本间独立,模型猜中所有标签的概率是每个样本概率的乘积:
我们的目标就是最大化这个似然函数 。
📌 例子: 一个样本的真实标签是第2类,。
- 如果模型A预测 ,则
- 如果模型B预测 ,则
- 模型A的似然更高,因为它预测得更准。
三、交叉熵误差函数:最大似然的实践者
1. 为什么需要它?
直接最大化似然函数 在数学上很麻烦:
- 它是连乘形式,容易造成数值下溢(很多小概率相乘会得到一个极小的数)。
- 优化算法通常设计为最小化一个损失函数,而不是最大化。
2. 从似然到交叉熵
我们通过两步转换来解决上述问题:
取对数(Log-Likelihood):
- 乘积变求和,解决了数值下溢问题。
- 对数函数是单调的,最大化似然 等价于最大化对数似然 。
取负号:
- 将最大化问题转化为最小化问题。
- 最终得到的就是交叉熵误差(Cross-Entropy Error, CEE):
3. 直观理解:交叉熵如何惩罚错误
交叉熵衡量的是模型预测的概率分布 与真实的概率分布 之间的“距离”或“差异”。
- 预测完全正确:如果真实类别是 (),且模型预测 ,则损失为 。
- 预测完全错误:如果真实类别是 ,但模型预测 ,则损失为 ,趋近于无穷大。这是一种非常严厉的惩罚。
📌 例子(接上一个例子): 真实标签 。
- 模型A预测 :
- 模型B预测 :
模型A的损失更小,因为它预测得更准。
总结:三者的关系
这三个概念构成了一个完美的闭环,是多分类问题的理论基石:
- Softmax 函数:将模型的原始输出映射为一个概率分布,为计算似然提供基础。
- 最大条件似然:提供了衡量模型好坏的理论标准——“猜中的可能性”要最大。
- 交叉熵误差函数:是最大条件似然原理的具体实现形式,它是一个可最小化的、具有良好数学性质的损失函数。
它们的共同目标是:驱使模型预测的概率分布 无限接近真实的标签分布 。当预测分布和真实分布完全一致时,交叉熵损失达到最小值(0),模型也就达到了最优状态。
七、系统阐述:Softmax 回归
现在,我们将前面所有内容结合起来,正式阐述 Softmax 回归(也称为多项逻辑回归)的完整框架。
1. 模型定义(System Formulation)
我们的目标是让模型直接预测 Multinoulli 分布的参数,即概率向量 。 我们让线性回归的输出 (称为 logits)作为 Softmax 函数的输入。
Softmax 函数:
其中 。
Softmax 函数的作用:
- 将任意实数的输出向量 归一化为一个概率分布。
- 放大大的 的概率,抑制小的 的概率(因为指数函数增长迅速)。
2. 最大条件似然与交叉熵损失
给定数据集,其条件似然为:
取负对数,得到交叉熵损失函数:
📌 例子:真实标签 ,模型预测 。 该样本的损失为: 如果预测得更准 ,损失更小:
3. 训练与测试
- 训练:通过梯度下降法最小化交叉熵损失 ,求解最优参数 和 。
- 测试:对于新样本 ,计算其概率分布 ,选择概率最大的类别作为预测结果:
总结:Softmax 回归 vs. Logistic 回归
| 特征 | Logistic 回归 (二分类) | Softmax 回归 (多分类) |
|---|---|---|
| 输出分布 | 伯努利分布 (Bernoulli) | 范畴分布 (Categorical) |
| 激活函数 | Sigmoid | Softmax |
| 损失函数 | 二元交叉熵 | 交叉熵 |
| 标签表示 | One-Hot 向量 |
Softmax 回归是 Logistic 回归的自然推广,是处理多分类问题最基础、最核心的模型之一,也是深度学习中分类网络最后一层的标准配置。
一、回顾:两步求导(链式法则)
在神经网络和复杂模型中,梯度计算依赖于链式法则(Chain Rule)。它的核心思想是:如果一個变量 依赖于 ,而 又依赖于 ,那么 相对于 的导数可以通过 对 的导数乘以 对 的导数得到。
通用公式
对于一个标量输出 和输入向量 ,如果有中间变量 ,则:
在 Softmax 回归中的意义
在 Softmax 回归中,损失 的计算路径很长: 输入 x -> 线性变换 u = θx -> Softmax 函数 h = softmax(u) -> 交叉熵损失 E
为了计算损失 对最底层参数 θ 的梯度 \frac{\partial E}{\partial θ},我们需要沿着这条路径,一步一步地反向传播梯度:
\frac{\partial E}{\partial θ} = \frac{\partial E}{\partial h} \cdot \frac{\partial h}{\partial u} \cdot \frac{\partial u}{\partial θ}二、计算梯度(The Gradient)
我们来具体执行上述的链式求导过程,这是理解模型如何学习的关键。
定义与设定
- 损失函数(单个样本):
- Softmax 输出:
- 线性层输出: ( 是第 类的参数向量)
分步计算
计算 :
计算 (Softmax 的导数): 这是最精妙的一步。Softmax 的导数需要分情况讨论:
- 如果 (求导变量是分子本身):
- 如果 (求导变量是分母中的一项):
- 可以统一用一个优雅的公式表示: 是 Kronecker delta 函数,当 时为1,否则为0)
计算 : 应用链式法则,并对所有输出 求和:
结论:这个结果非常简洁而强大!对于第 个类别的线性输出 ,其梯度就是预测值 减去真实值 。
计算 :
✅ 最终梯度:整个数据集上的平均梯度为:
三、向量-矩阵形式(Vector-Matrix Form)
在实际的代码实现中,我们总是使用矩阵和向量操作来代替繁琐的循环,因为这可以利用线性代数库进行高速的并行计算。
定义
参数矩阵 : 将所有的参数向量 堆叠成一个矩阵:
梯度矩阵 : 同样,梯度也可以写成一个矩阵:
- 是一个 的向量。
- 是一个 的行向量。
- 它们的外积结果是一个 的矩阵,与参数矩阵 的维度完全一致。
这种形式极其简洁,是深度学习框架实现梯度计算的基础。
四、训练和测试(Training & Testing)
训练(Training)
- 前向传播(Forward Pass):对于一批数据 ,计算预测值 。
- 计算损失(Loss Calculation):计算交叉熵损失 。
- 反向传播(Backward Pass):使用链式法则计算梯度 。
- 参数更新(Parameter Update):使用梯度下降算法更新参数: ( 为学习率)
测试(Testing / Inference)
训练完成后,对于一个新样本 :
- 计算得分: (或 ,如果包含偏置)
- 计算概率:
- 做出决策: 即选择概率最大的那个类别作为预测结果。
五、回顾:随机梯度下降(SGD)
批量梯度下降(使用全部数据计算梯度)在大数据集上非常缓慢。随机梯度下降(Stochastic Gradient Descent, SGD) 是其高效变体。
- 核心思想:每次迭代只随机抽取一个小批量(Minibatch) 数据来计算梯度和更新参数。
- 优势:
- 更快:一次迭代的计算量大大减少。
- 可以逃离局部最优点:梯度的随机性有助于跳出尖锐的局部极小点,有可能找到更平坦的极小点,从而提升模型泛化能力。
- 迭代过程:
六、引入偏置(Bias)
在前面的推导中,我们将线性部分简写为 。更完整的写法应包含偏置项(Bias) :
偏置项代表了当输入全部为0时,该类别的原始输出得分。它的梯度推导非常简单:
所以,
在参数更新时, 和 一起更新:
七、Softmax 过度参数化(Overparameterization)
这是一个有趣的性质。观察 Softmax 函数:
其中 是任意向量。你会发现,从所有参数 中同时减去一个向量 ,Softmax 的输出结果完全不变!
这意味着,模型的解不是唯一的。有无穷多组参数 ( 和 ) 会产生完全相同的预测结果。
- 在实践中:这通常不是一个问题,因为优化算法会收敛到众多等价解中的某一个。
- 应对策略:我们通常会进行正则化(Regularization),例如 L2 正则化 ()。正则化项会倾向于选择参数范数较小的那个解,从而消除这种不确定性。
八、Softmax 回归和 Logistic 回归的关系
Logistic 回归是 Softmax 回归在二分类情况下的特例。
假设我们有一个二分类问题 ()。根据 Softmax 公式:
\begin{align*} P(t=1 | x) &= h_1(x) = \frac{\exp(\theta^{(1)^T} x)}{\exp(\theta^{(1)^T} x) + \exp(\theta^{(2)^T} x)} \\ &= \frac{1}{1 + \exp((\theta^{(2)} - \theta^{(1)})^T x)} = \sigma((\theta^{(1)} - \theta^{(2)})^T x) \end{align*}我们定义一个新的参数 ,上式就变成了标准的 Logistic 回归形式:
同理,。
- 结论:在二分类时,Softmax 回归的参数虽然有两个向量 (),但实际起作用的只是它们的差值 。这再次印证了其过度参数化的性质。Logistic 回归是更简洁的实现。
