第1章 机器学习基础

第1章 机器学习基础

一句话定位:用"找函数"视角搭起机器学习全流程。

文章导读(读完你将获得)

  • 能用一句话解释:机器学习到底在"学"什么、为什么要学它
  • 掌握一套可复用的训练流程:建模 → 定义损失 → 优化 → 评估
  • 分清回归/分类/结构化输出三类任务,并知道各自常用损失
  • 能手算一次梯度下降的参数更新,理解学习率与收敛/发散的关系
  • 知道模型失败的两大根因:模型偏差优化问题,并能从训练曲线读信号

1. 直觉引入

你每天都在做"凭经验做预测":

  • 看了上周销量,估今天订单会不会爆;
  • 看了体检指标,判断风险是不是升高;
  • 看了历史点击,猜明天视频会不会火。

核心矛盾/瓶颈(一句话):

我们想要一个能从数据中"自动找出规律"的函数,但人写不出来,只能让机器去"找"。

把机器学习想成:你给机器很多"例题"(输入 + 标准答案),机器要学出一套"解题公式"(函数),以后遇到新题也能做对。


2. 符号与概念速查

符号/术语 含义 常见误解
xxx 输入特征(feature) 误以为"特征越多越好",忽视噪声与泄漏
yyy 真实标签(label) 误以为标签一定准确;现实中常含噪声
y^\hat yy^ 模型预测值 误以为预测必须精确;更重要是可泛化
fθ(⋅)f_\theta(\cdot)fθ(⋅) 模型/函数,θ\thetaθ 为参数 误以为"模型=算法";模型是可学习的函数族
θ\thetaθ 参数(权重/偏置的集合) 误把超参数(学习率等)当参数
L(θ)L(\theta)L(θ) 损失函数:衡量参数好坏 误以为"损失越小越好"就等于"线上越好"
学习率 η\etaη 每步走多远 误以为越大越快;太大会发散
训练集/验证集/测试集 用来学习/调参/最终评估 误把测试集当验证集反复调参(信息泄漏)
过拟合 训练好、泛化差 误以为"测试差=过拟合";也可能是优化失败或数据不匹配
偏差/方差 欠拟合/对数据波动敏感 误把"模型深=一定过拟合"当定律

3. 核心机制

3.1 机器学习到底在做什么?

类比:

把"找函数"想成"给一条弹性很强的曲线定形"。训练数据是地面上的钉子,你希望曲线穿过钉子附近,同时别扭得太夸张(否则遇到新钉子就崩)。

最小必要定义:

机器学习就是在一个函数族 {fθ}\{f_\theta\}{fθ} 里,找到参数 θ\thetaθ,让预测 y^=fθ(x)\hat y=f_\theta(x)y^=fθ(x) 尽量贴近真实 yyy。

为什么需要它?不用会怎样?

  • 需要:复杂任务(语音识别/图像识别/推荐)无法手写规则。
  • 不用:你只能写"if-else 规则",遇到稍微变化的场景就失效,维护成本爆炸。

3.2 三类任务:回归、分类、结构化输出

  • 回归(输出一个数):房价、温度、PM2.5。常用损失:MSE/MAE。
  • 分类(输出一个类别):垃圾邮件、猫狗识别。常用损失:交叉熵。
  • 结构化学习(输出一个结构):生成文字、生成图像、翻译。常用损失:序列交叉熵或更复杂的对齐/感知损失。

3.3 微型例子(可手算/可推导):一次梯度下降到底在算什么?

我们用最简单的线性回归:
y^=wx+b \hat y = wx + b y^=wx+b

给两条训练数据:(x1,y1)=(1,2)(x_1,y_1)=(1,2)(x1,y1)=(1,2),(x2,y2)=(2,3)(x_2,y_2)=(2,3)(x2,y2)=(2,3)。

用均方误差(为了好算,写成平均平方误差的一半):
L(w,b)=12N∑i=1N(y^i−yi)2 L(w,b)=\frac{1}{2N}\sum_{i=1}^{N}(\hat y_i - y_i)^2 L(w,b)=2N1i=1∑N(y^i−yi)2

假设初始 w0=0,  b0=0w_0=0,\;b_0=0w0=0,b0=0,则预测:y^1=0,y^2=0\hat y_1=0,\hat y_2=0y^1=0,y^2=0。

误差:e1=−2,  e2=−3e_1=-2,\;e_2=-3e1=−2,e2=−3。

梯度(你只要记住:对 www 的导数会多乘一个 xxx):
∂L∂w=1N∑i=1N(y^i−yi)xi,∂L∂b=1N∑i=1N(y^i−yi) \frac{\partial L}{\partial w} = \frac{1}{N}\sum_{i=1}^{N}(\hat y_i-y_i)x_i \quad,\quad \frac{\partial L}{\partial b} = \frac{1}{N}\sum_{i=1}^{N}(\hat y_i-y_i) ∂w∂L=N1i=1∑N(y^i−yi)xi,∂b∂L=N1i=1∑N(y^i−yi)

代入数值(N=2N=2N=2):
∂L∂w=12[(0−2)⋅1+(0−3)⋅2]=12(−2−6)=−4 \frac{\partial L}{\partial w} = \frac{1}{2}[(0-2)\cdot 1 + (0-3)\cdot 2] = \frac{1}{2}(-2-6)=-4 ∂w∂L=21[(0−2)⋅1+(0−3)⋅2]=21(−2−6)=−4
∂L∂b=12[(0−2)+(0−3)]=−2.5 \frac{\partial L}{\partial b} = \frac{1}{2}[(0-2)+(0-3)] = -2.5 ∂b∂L=21[(0−2)+(0−3)]=−2.5

设学习率 η=0.1\eta=0.1η=0.1,梯度下降更新:
w1=w0−η∂L∂w=0−0.1⋅(−4)=0.4 w_1 = w_0 - \eta \frac{\partial L}{\partial w}=0-0.1\cdot(-4)=0.4 w1=w0−η∂w∂L=0−0.1⋅(−4)=0.4
b1=b0−η∂L∂b=0−0.1⋅(−2.5)=0.25 b_1 = b_0 - \eta \frac{\partial L}{\partial b}=0-0.1\cdot(-2.5)=0.25 b1=b0−η∂b∂L=0−0.1⋅(−2.5)=0.25

这一小步的意义:

你没有"拍脑袋调参数",而是沿着"让损失下降最快"的方向走了一步。学习率决定步子大小:太小走不动,太大跨过山谷直接飞出赛道。

3.4 图1(必须):机器学习全流程(可渲染 Mermaid)

偏差(模型不够)
优化/数据问题
过拟合
定义任务与指标

回归/分类/结构化
准备数据

特征x与标签y
选择模型族 f_θ

线性/树/神经网络
定义损失 L(θ)

MSE/交叉熵/正则
优化求 θ_opt

梯度下降/变体
评估与诊断

训练/验证/测试曲线
失败原因?
正则/早停/数据增强


4. 严谨表述

4.1 统一的数学框架

给定数据集 D={(xi,yi)}i=1N\mathcal D=\{(x_i,y_i)\}{i=1}^ND={(xi,yi)}i=1N,选择参数化函数族 fθf\thetafθ,学习问题写成:
θ∗=arg⁡min⁡θ  L(θ) \theta^* = \arg\min_{\theta} \; L(\theta) θ∗=argθminL(θ)

其中损失通常是经验风险 + 正则项:
L(θ)=1N∑i=1Nℓ(fθ(xi),yi)+λΩ(θ) L(\theta)=\frac{1}{N}\sum_{i=1}^{N}\ell\big(f_\theta(x_i),y_i\big) + \lambda\Omega(\theta) L(θ)=N1i=1∑Nℓ(fθ(xi),yi)+λΩ(θ)

  • ℓ(⋅)\ell(\cdot)ℓ(⋅):单样本损失(MSE、交叉熵等)
  • Ω(θ)\Omega(\theta)Ω(θ):复杂度惩罚(如 ∥θ∥22\|\theta\|_2^2∥θ∥22)
  • λ\lambdaλ:权衡拟合与复杂度的超参数

4.2 梯度下降与"为什么能工作"

基本更新:
θt+1=θt−η∇θL(θt) \theta_{t+1}=\theta_t-\eta\nabla_\theta L(\theta_t) θt+1=θt−η∇θL(θt)

关键假设(边界条件):

  • 如果 LLL 是凸的(如线性回归 + MSE),合适的 η\etaη 下可收敛到全局最优。
  • 深度网络的 LLL 往往非凸,但实践中仍常得到足够好的解;此时"能否学好"更依赖优化细节、初始化、归一化等工程因素。

常见误解澄清:

  • "卡在局部极小值"经常被过度强调;更常见的问题是:学习率不合适、梯度噪声过大、数据/标签质量差、训练策略不稳定。

4.3 回归与分类的典型损失

  • 回归:MSE
    ℓMSE(y^,y)=12(y^−y)2 \ell_{\text{MSE}}(\hat y,y)=\frac{1}{2}(\hat y-y)^2 ℓMSE(y^,y)=21(y^−y)2
  • 二分类:对数似然/交叉熵(用 Sigmoid 概率 p=σ(z)p=\sigma(z)p=σ(z))
    ℓCE(p,y)=−(ylog⁡p+(1−y)log⁡(1−p)) \ell_{\text{CE}}(p,y)= -\big(y\log p + (1-y)\log(1-p)\big) ℓCE(p,y)=−(ylogp+(1−y)log(1−p))
  • 多分类:Softmax + 交叉熵(pk=ezk∑jezjp_k=\frac{e^{z_k}}{\sum_j e^{z_j}}pk=∑jezjezk)

4.4 批量(mini-batch)与 epoch(训练的时间单位)

在实现中通常用 mini-batch 近似全量梯度:
∇L(θ)≈1B∑i∈B∇ℓ(fθ(xi),yi) \nabla L(\theta) \approx \frac{1}{B}\sum_{i\in\mathcal B}\nabla\ell\big(f_\theta(x_i),y_i\big) ∇L(θ)≈B1i∈B∑∇ℓ(fθ(xi),yi)

  • 一次参数更新:用一个 batch 算梯度并更新
  • 一个 epoch:把全部数据都用过一次(可能发生多次更新)

5. 关键结论与失效场景

  1. 机器学习=在函数族里找最合适的函数。

    失效:函数族选得太窄(模型偏差大),再怎么训也上不去。

  2. 损失函数是"训练的方向盘",指标是"业务的终点"。

    失效:损失与业务指标不一致(如只优化点击率但忽略留存),训练越好线上越糟。

  3. 训练差不一定是过拟合,可能是优化没做对。

    失效:学习率过大导致震荡/发散,或初始化/归一化不当导致梯度异常。

  4. 更复杂的模型不是原罪;关键是泛化控制。

    失效:数据量少、噪声大、特征泄漏时,复杂模型容易记住训练集。

  5. "先基线、再加复杂度"是最稳的工程策略。

    失效:跳过基线直接上大模型,诊断空间爆炸,无法定位问题。


6. 工程视角:训练与实现的坑

  1. 训练损失不降
  • 现象:loss 基本水平线;accuracy 也不动。
  • 排查:学习率太小/梯度为零(激活饱和)、数据与标签对不上、模型输出维度错误。
  1. 训练损失下降但验证损失上升(典型过拟合):
  • 现象:train loss ↓,val loss ↑,val 指标开始变差。
  • 处理:正则化(L2L_2L2、dropout)、早停、数据增强、减少模型容量。
  1. 训练损失震荡甚至爆炸
  • 现象:loss 大幅波动,偶尔 NaN。
  • 处理:减小学习率、梯度裁剪、检查输入是否未归一化、混合精度的数值稳定性。
  1. 验证集"看起来很好",上线很差
  • 现象:离线指标高但线上不行。
  • 坑位:数据泄漏(未来信息混入特征)、切分方式不合理(同用户跨集合)、分布不匹配。
  1. batch size 改了,效果完全变样
  • 现象:大 batch 更稳但泛化变差,小 batch 噪声大但可能泛化更好。
  • 经验:先固定 batch,调好学习率/调度,再逐步尝试扩大 batch。
  1. 指标"卡住"别只加层
  • 现象:深一点反而更差。
  • 处理:先确认优化没问题(学习率、初始化、归一化、残差/跳连)。
  1. 训练曲线诊断口诀
  • train/val 都差:偏差大或优化失败
  • train 好 val 差:过拟合或验证集不匹配
  • train 波动大:学习率/批量噪声/数值不稳
  1. 别忘了最硬的基线
  • 线性模型/树模型往往能快速告诉你"数据有没有信号"。没有信号,上大模型只会更惨。

7. 本章练习

7.1 基础练习

  1. 题目: 你要预测"明天温度",这属于回归还是分类?请写出一个可能的输入特征集合。
    答案要点: 回归;特征可包括今天温度、湿度、气压、风速、历史同日温度等;强调特征必须可获得且不泄漏未来。

  2. 题目: 为什么我们要把数据分成训练集/验证集/测试集?
    答案要点: 训练集学参数;验证集选超参数与早停;测试集只做最终一次评估;反复用测试集调参会导致过度乐观(信息泄漏)。

  3. 题目: 学习率太大和太小各会出现什么训练现象?
    答案要点: 太大:loss 震荡或发散,可能 NaN;太小:loss 降得极慢,训练像"没学"。

7.2 进阶练习

  1. 题目: 对线性回归 y^=wx+b\hat y=wx+by^=wx+b 与 MSE,推导 ∂L∂w\frac{\partial L}{\partial w}∂w∂L、∂L∂b\frac{\partial L}{\partial b}∂b∂L。
    答案要点: 使用链式法则;得到 1N∑(y^i−yi)xi\frac{1}{N}\sum (\hat y_i-y_i)x_iN1∑(y^i−yi)xi 与 1N∑(y^i−yi)\frac{1}{N}\sum (\hat y_i-y_i)N1∑(y^i−yi);说明为何对 www 会出现 xix_ixi。

  2. 题目: 你训练一个更深的网络,发现 5 层的训练损失反而比 4 层大。请给出至少 3 种可能原因,并说明你会看哪些曲线/日志来验证。
    答案要点: 可能是优化失败(学习率、初始化、梯度消失/爆炸)、正则/归一化配置不当、训练策略差(batch/调度);看 train loss 是否震荡、梯度范数、学习率曲线、激活分布、是否出现 NaN。


8. 小结与下一章衔接

这一章把机器学习抽象成"找函数":你先选一个函数族 fθf_\thetafθ,用损失 L(θ)L(\theta)L(θ) 衡量好坏,再用优化算法把参数推向更小的损失。现实中失败常来自三类:模型不够(偏差)、优化不给力、以及训练与泛化不一致(过拟合/分布不匹配)。下一章会把这些失败模式拆开,给出更系统的实践方法论与诊断手段。

下一章会复用的 3 个点:

  1. 训练/验证/测试的分工与信息泄漏风险
  2. 从训练曲线判断"偏差 vs 优化 vs 过拟合"
  3. 超参数(学习率、batch size、正则)对结果的决定性影响

图2(必须):训练循环与数据划分

测试(最终评估) 验证(调参/早停) 训练(更新参数) 数据集 测试(最终评估) 验证(调参/早停) 训练(更新参数) 数据集 loop [每个 epoch] 训练集(多次 epoch) 前向预测 ->> 计算损失 ->> 反向传播 参数更新(一次或多次 batch) 输出模型(当前 θ) 评估并选择超参数/早停点 反馈(继续训练 or 停止) 最终模型(冻结) 只评估一次,报告指标


本章参考资料

  • 课程:李宏毅,《机器学习(2021 春)》第 1 讲(Machine Learning basics:Regression / Classification / Optimization)。
  • 教材:Ian Goodfellow, Yoshua Bengio, Aaron Courville,《Deep Learning》,Chapter 5--6(Optimization & Training)。
  • 教材:Christopher M. Bishop,《Pattern Recognition and Machine Learning》,Chapter 1--3(Probabilistic modeling, linear models)。
  • 教材:Kevin P. Murphy,《Machine Learning: A Probabilistic Perspective》,Chapter 3--8(Supervised learning, linear regression/classification)。
  • 书籍:Trevor Hastie, Robert Tibshirani, Jerome Friedman,《The Elements of Statistical Learning》,Chapter 2--7(Bias-variance, linear methods)。
  • 官方文档:PyTorch Docs,Autograd & Optimizers(理解梯度、更新与学习率调度)。
相关推荐
wyw00002 小时前
目标检测之SSD
人工智能·目标检测·计算机视觉
AKAMAI2 小时前
圆满循环:Akamai 的演进如何为 AI 推理时代奠定基石
人工智能·云计算
幻云20102 小时前
AI自动化编排:从入门到精通(基于Dify构建AI智能系统)
运维·人工智能·自动化
CoderJia程序员甲2 小时前
GitHub 热榜项目 - 日榜(2026-1-13)
人工智能·ai·大模型·github·ai教程
梦梦代码精3 小时前
《全栈开源智能体:终结企业AI拼图时代》
人工智能·后端·深度学习·小程序·前端框架·开源·语音识别
suyong_yq3 小时前
RUHMI & RA8P1 教程 Part4 - 使用 RUHMI 转换 AI 模型文件
人工智能·ai·嵌入式·arm
程序员欣宸3 小时前
LangChain4j实战之十三:函数调用,低级API版本
java·人工智能·ai·langchain4j
charlie1145141913 小时前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
咚咚王者3 小时前
人工智能之核心基础 机器学习 第十二章 半监督学习
人工智能·学习·机器学习