⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

2.5 线性回归与逻辑回归

版本: v2.0 最后更新: 2026-05-27

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明

传统机器学习导论

为什么要学传统机器学习?

先看传统 ML,不是为了补历史背景,而是为了把后面的模型放回同一条主线:它们本质上都在做参数估计和目标函数最小化。

传统ML与深度学习的关系

传统 ML 不是和深度学习割裂的两套东西,它们之间有很直接的演化关系:

线性回归(2.5)
    ↓ (添加隐层和非线性激活)
神经网络回归

逻辑回归(2.5)
    ↓ (多层堆叠)
神经网络分类

SVM核方法(2.6)
    ↓ (自动学习特征)
深度学习特征学习

集成学习(2.7)
    ↓ (多个"专家"的融合)
多头机制的启发式类比

传统ML的三个层次

第一层:线性模型(2.5)

  • 线性回归:连续值预测
  • 逻辑回归:二分类
  • 重点:用最小化损失来学习参数

第二层:非线性模型(2.6)

  • SVM:最大间隔分类
  • 核方法:处理非线性问题
  • 重点:用边界和核函数处理非线性

第三层:集成模型(2.7)

  • 决策树:树模型
  • 随机森林:多个树的融合
  • 重点:用多个弱模型降低方差

本章学习路径

优化算法基础(2.1-2.3)
    ↓ (理解优化的本质)
传统机器学习(2.5-2.7)
    ├─ 线性模型(2.5)— 基础
    ├─ 非线性模型(2.6)— 进阶
    └─ 集成模型(2.7)— 高级
    ↓ (理解ML本质是优化问题)
深度学习(第3章)
    ↓ (自动特征学习)
LLM(第5-8章)

核心概念

机器学习的本质就是优化问题。线性回归和逻辑回归是最基础的两个监督学习算法,它们都通过最小化损失函数来学习参数。

线性回归(Linear Regression)

问题定义: 给定输入 X 和输出 y,学习参数 wb,使得 y^=Xw+b 尽可能接近 y

损失函数(MSE):

L(w,b)=1ni=1n(yiy^i)2

梯度:

Lw=2nXT(Xw+by)Lb=2ni=1n(Xw+by)i

更新规则(梯度下降):

wwαLwbbαLb

逻辑回归(Logistic Regression)

问题定义: 给定输入 X 和二分类标签 y{0,1},学习参数 wb,使得 P(y=1|X)=σ(Xw+b)

其中 σ(z)=11+ez 是Sigmoid函数。

损失函数(交叉熵):

L(w,b)=1ni=1n[yilog(y^i)+(1yi)log(1y^i)]

梯度:

Lw=1nXT(y^y)Lb=1ni=1n(y^iyi)

关键区别

方面线性回归逻辑回归
输出连续值概率(0-1)
损失函数MSE交叉熵
激活函数Sigmoid
应用回归问题分类问题

代码实验

完整的代码示例位于:code/ch02_optimization/linear_logistic_regression.py

运行方式:

bash
python code/ch02_optimization/linear_logistic_regression.py

代码包含:

  • 线性回归的实现
  • 逻辑回归的实现
  • 拟合曲线和决策边界可视化
  • 损失函数曲线

Linear and Logistic Regression代码文件: code/ch02_optimization/linear_logistic_regression.py
运行方式: python code/ch02_optimization/linear_logistic_regression.py

图2.5:线性回归的拟合曲线、逻辑回归的决策边界以及损失下降过程。它把“回归 vs 分类”这两个最基础监督学习问题放在同一张图里,帮助读者把损失函数、模型输出和优化过程联系起来。

与深度学习的联系

  • 线性回归神经网络回归(添加隐层和非线性激活)
  • 逻辑回归神经网络分类(多层堆叠)
  • Sigmoid激活深度学习中的激活函数

在LLM中的应用

线性映射在LLM输出层中的应用

虽然LLM使用深度学习,但线性回归的思想仍然存在:

  1. LLM的输出层是线性映射

    • 隐层表示:hRdmodel
    • 输出层:logits=Wh+b
    • 其中 WR|V|×dmodel|V| 是词汇表大小
    • 它更接近多分类的线性分类头,而不是线性回归
  2. 为什么LLM的输出层是线性的?

    • 隐层已经学到了复杂的特征表示
    • 输出层只需要将这些特征映射到词汇表
    • 线性变换足以完成这个任务

逻辑回归在LLM中的应用

逻辑回归的思想在LLM中也有应用:

  1. Token预测的本质是分类

    • 给定上文,预测下一个Token
    • 这是一个多分类问题(词汇表大小通常为50K-100K)
    • 使用交叉熵损失(来自逻辑回归)
  2. Softmax函数的应用

    逻辑回归:Sigmoid(z) = 1/(1+e^-z)  [二分类]
    LLM:Softmax(z) = e^z / Σe^z        [多分类]
    • Softmax是Sigmoid的多分类推广
    • 将logits转换为概率分布
  3. 交叉熵损失在LLM中的应用

    python
    # LLM训练的标准损失函数
    loss = CrossEntropyLoss(logits, target_tokens)
    • 衡量预测分布与真实分布的差异
    • 直接来自逻辑回归的交叉熵损失

特征工程思想在LLM中的应用

虽然LLM自动学习特征,但特征工程的思想仍然存在:

  1. 位置编码(Position Encoding)

    • 传统ML中的特征工程:添加位置信息
    • LLM中的位置编码:Sinusoidal或Learnable
    • 都是为了提供额外的信息
  2. Token嵌入(Token Embedding)

    • 传统ML中的特征表示:One-hot编码
    • LLM中的Token嵌入:学习的密集向量
    • 都是将离散的Token转换为连续的表示

LLM训练中的优化问题

LLM的训练本质上仍然是一个优化问题:

  1. 目标函数

    最小化:L = -Σ log P(y_i | x_1, ..., x_{i-1})
    • 这是逻辑回归交叉熵损失的推广
    • 最大化正确Token的概率
  2. 参数优化

    • 使用梯度下降(通过反向传播)
    • 使用自适应优化器(Adam、AdamW)
    • 使用学习率调度
  3. 规模化

    • 从逻辑回归的几个参数
    • 到LLM的数十亿参数
    • 优化的本质不变,只是规模不同

常见问题

Q: 为什么逻辑回归用交叉熵而不是MSE? A: 交叉熵对概率的惩罚更合理。当预测概率远离真实标签时,交叉熵的梯度更大,收敛更快。

Q: 线性回归能处理非线性问题吗? A: 不能。但可以通过特征工程(如多项式特征)或使用非线性模型(如SVM、神经网络)来处理。


下一步: 阅读 2.6 支持向量机与核方法

本教程采用 CC BY-NC-SA 4.0 许可协议