想象有一所特殊的学校,专门培养“AI 小厨师”。每名小厨师(模型)都靠阅读菜谱(数据)学会做菜(预测),他们的终极考核只有一项:面对从未见过的食材,也要做出味道正确的菜(泛化能力)。为了做到这一点,学校在怎么教学、怎么分班、怎么考试上,沉淀了一整套方法论——这套方法论,就是机器学习的基础。 本文会用这所学校的一整年,把机器学习面试中最常被问到的七个板块串起来:学习范式(不同的教学方式)、数据划分(练习与考试的边界)、模型拟合(背菜谱与真理解的差别)、偏差方差(教学风格与发挥稳定性)、损失函数(怎么打分)、梯度下降(怎么进步)、模型评估(怎么评定成绩)。无论你是第一次接触 AI,还是正在准备 ML/DL 岗位面试,这套“做饭逻辑”都能帮你把零散的知识点织成一张牢固的网。

岗位关联

机器学习基础是 AI 面试的“地基”板块。掌握了它,你才能把深度学习、推荐系统、大模型等上层话题讲得又稳又深。本文用故事帮你把核心概念一次串牢,面试时拿得出框架、答得上细节。

目录
  1. 可视化演示
  2. 学习范式
  3. 数据划分
  4. 模型拟合
  5. 偏差方差
  6. 损失函数
  7. 梯度下降
  8. 模型评估
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示机器学习基础精讲的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

机器学习基础精讲:监督学习 监督学习与无监督学习区分 过拟合欠拟合与正则化方法 核心机制可视化 机器学习基础精讲整体架构与关键组件

学习范式

开学第一天,AI 烹饪学校的老师们要决定怎么教。有的班由师傅手把手示范——每道菜都有标准配方,小厨师照着学,这叫监督学习;有的班只有一筐食材和一排调料,老师让小厨师自己摸索搭配规律,这叫无监督学习;还有的班直接把小厨师丢进厨房,做一道菜端给顾客,顾客说好吃或难吃,小厨师据此调整配方,这叫强化学习。

面试中,绝大多数问题都会先问“你用过哪些学习范式”,候选人的第一句话就暴露功底。监督学习解决的是“有标准答案”的问题:输入是特征,输出是标签;无监督学习面对的是“没有标准答案”的问题:只有特征,希望找出数据里隐藏的结构;强化学习的标准答案藏在多次交互的累积奖励里。半监督学习则是一种务实折衷:手头只有少量标准配方,却有大量待摸索的食材,先用少量标签帮助大量无标签数据学习。

在监督学习中,我们收集 $n$ 条样本,目标是找到一个映射函数 $f$,使它对每条样本的预测值与真实标签的差距尽可能小。无监督学习的代表任务是聚类与降维,就像把食材按风味自动分成“香辣系”和“清淡系”。强化学习则用“状态-动作-奖励”三元组描述:智能体在状态 $s$ 下选择动作 $a$,环境返回奖励 $r$,目的是学到一个能累积高奖励的策略。

选择哪种教学方式,不看老师的喜好,而看手头有没有标准答案、能不能与顾客互动。面试官问学习范式,其实是在问:你是否能根据业务场景的数据形态,快速选出合适的学习方式。

f∗=arg⁡min⁡f∈F1n∑i=1nL(f(xi),yi)\displaystyle f^{\ast} = \arg\min_{f \in \mathcal{F}} \frac{1}{n}\sum_{i=1}^{n} L\big(f(\boldsymbol{x}_i), y_i\big)
这个公式说的是:在候选模型集合里,挑出一个让所有样本平均损失最小的模型。
  1. 特征向量$\boldsymbol{x}_i$ 表示第 $i$ 条样本的特征向量,相当于一份食材清单。
    xi\displaystyle \boldsymbol{x}_i
  2. 真实标签$y_i$ 是这条样本对应的标准答案,比如“这道菜该有的口感评分”。
    yi\displaystyle y_i
  3. 候选模型集合$\mathcal{F}$ 是所有候选模型的集合,相当于学校允许采用的所有菜谱风格。
    F\displaystyle \mathcal{F}
  4. 预测差距$L(f(\boldsymbol{x}_i), y_i)$ 是模型预测与真实标签之间的扣分,也就是“这道菜做偏了多少”。
    L(f(xi),yi)\displaystyle L\big(f(\boldsymbol{x}_i), y_i\big)
  5. 平均损失$\frac{1}{n}\sum_{i=1}^{n}$ 把 $n$ 条样本的扣分取平均,作为整体表现。
    1n∑i=1n\displaystyle \frac{1}{n}\sum_{i=1}^{n}
  6. 最优求解$\arg\min_{f}$ 表示在所有候选模型里挑出平均扣分最少的那一个。
    arg⁡min⁡f\displaystyle \arg\min_{f}

数据划分

课程过半,学校决定组织一场毕业考。为了防止小厨师靠“刷题”蒙混过关,学校把题库分成三间教室:第一间是课堂练习,随便做,这叫训练集;第二间是模拟考,用来调整学习策略,这叫验证集;第三间是最终考场,考前谁都不许碰,这叫测试集。

面试时问“你的训练、验证、测试集怎么划分”,真正想确认的是你懂不懂数据边界纪律。训练集用来学参数,验证集用来调超参数(比如正则化强度、树深度),测试集只做一次最终评估。如果验证集被反复使用,它实际上已经“泄漏”进模型的选择过程——相当于学生提前看过模拟考卷,第二次考试就没意义了。

常见的划分比例是 60/20/20。当数据量极大时(如百万级),可以把更多数据让给训练集,比如 98/1/1,因为足够大的验证集和测试集依然能稳定评估;当数据量很小时,常用 K 折交叉验证替代单一验证集,让每份数据都有机会当“考官”。

数据划分纪律就像考场的铁律:训练与测试的边界划得越干净,你对模型真实水平的判断就越可信。面试官最想看到的就是你明白“测试集不能反复用”这条底线。

Dtrain:Dval:Dtest=6:2:2\displaystyle \mathcal{D}_{\text{train}} : \mathcal{D}_{\text{val}} : \mathcal{D}_{\text{test}} = 6 : 2 : 2
这是经典的 3 份数据划分比例:训练、验证、测试各司其职,6:2:2 是小数据集下最常见的选择。
  1. 训练集$\mathcal{D}_{\text{train}}$ 是课堂练习题库,规模最大,模型的所有参数都从它身上学。
    Dtrain\displaystyle \mathcal{D}_{\text{train}}
  2. 验证集$\mathcal{D}_{\text{val}}$ 是模拟考试卷,用来比较不同超参数下的表现,从而挑出更好的模型设置。
    Dval\displaystyle \mathcal{D}_{\text{val}}
  3. 测试集$\mathcal{D}_{\text{test}}$ 是最终考场,只在训练和调参全部结束后用一次,检验真实水平。
    Dtest\displaystyle \mathcal{D}_{\text{test}}
  4. 比例含义$6:2:2$ 意味着训练数据占六成、验证和测试各占两成,保证学习、调参、终评三者互不干扰。
    6:2:2\displaystyle 6:2:2

模型拟合

毕业考临近,小厨师们呈现出三种状态。第一种:菜谱都没背熟,课堂练习也做不好,这是欠拟合;第二种:菜谱背得一字不差,可换一道新菜就手忙脚乱,这是过拟合;第三种:既掌握了关键步骤,又能举一反三,面对新食材也有把握,这就叫泛化良好。

面试中最经典的一问是:“我的模型训练误差很小但测试误差很大,怎么回事?”答案就是过拟合——模型把训练数据里的噪声也当成规律学走了。欠拟合则是另一极:模型连训练数据里明显的主要模式都学不出来。两者的本质都是模型复杂度与数据信息量不匹配。

正则化是抑制过拟合的常用手段。它的思路是在损失函数后面加一个对参数规模的惩罚项,逼着模型把“菜谱”写得更简洁。L2 正则化要求权重尽可能地小,L1 正则化甚至会把部分权重压成零,顺带实现特征选择。考试时,老师常常叮嘱:“总结要点就够了,细节写太多反而害了自己。”

好厨师背菜谱,但绝不会把葱花切几毫米、颠勺几次都记成死规矩。正则化就是老师的那句叮嘱:“总结要点,舍去枝节,才能应对变化。”

J(w)=1n∑i=1nL(f(xi),yi)+λ∥w∥22\displaystyle J(\boldsymbol{w}) = \frac{1}{n}\sum_{i=1}^{n} L\big(f(\boldsymbol{x}_i), y_i\big) + \lambda \|\boldsymbol{w}\|_2^2
总损失 = 训练损失 + 正则惩罚。$\lambda$ 越大,模型越不敢把权重“写得太复杂”。
  1. 总损失函数$J(\boldsymbol{w})$ 是优化时真正要最小化的目标,既看训练误差,也看模型复杂度。
    J(w)\displaystyle J(\boldsymbol{w})
  2. 训练损失项$\frac{1}{n}\sum_{i=1}^{n} L\big(f(\boldsymbol{x}_i), y_i\big)$ 表示模型在训练数据上的平均扣分,是“菜谱背得熟不熟”。
    1n∑i=1nL(f(xi),yi)\displaystyle \frac{1}{n}\sum_{i=1}^{n} L\big(f(\boldsymbol{x}_i), y_i\big)
  3. L2 正则项$\|\boldsymbol{w}\|_2^2$ 是所有参数平方和,惩罚“把菜谱写得太厚太重”。
    ∥w∥22\displaystyle \|\boldsymbol{w}\|_2^2
  4. 惩罚力度$\lambda$ 控制正则化的强弱:太大则模型变得过于简单,太小则等于没加约束。
    λ\displaystyle \lambda

偏差方差

射箭馆里,教练让小厨师们练习射靶。有的学生箭术极稳,但准星固定偏左,箭箭都射在同一处偏位,这叫做高偏差低方差;有的学生箭术忽高忽低,但平均来看都落在靶心附近,这叫做低偏差高方差。偏差-方差权衡,讲的正是“系统性偏位”与“随机散点”的对立。

偏差是模型的系统性误差,通常来自过于简单的假设——比如用直线去拟合正弦波,怎么调都调不弯;方差是模型对训练集变化的敏感度——训练集稍微变一点,学到的模型就大变样。复杂模型往往低偏差高方差,简单模型往往高偏差低方差,最合适的复杂度在两者的平衡点上。

数学上,期望泛化误差可以分解为偏差平方、方差和噪声三项之和。这解释了为什么收集更多数据能降低方差,为什么增强模型复杂度能降低偏差,也解释了为什么噪声无论如何都消不掉——它是问题本身的分歧,不是模型能控制的。

面试官听到你对偏差-方差的分析,就知道你不是在背概念——你会主动想:模型太复杂就加正则、换简单模型;训练集太小就攒数据、做交叉验证。这就是“校正准星”的工程直觉。

E[(y−f^(x))2]=Bias(f^(x))2+Var(f^(x))+σ2\displaystyle \mathbb{E}\big[(y - \hat{f}(\boldsymbol{x}))^2\big] = \text{Bias}\big(\hat{f}(\boldsymbol{x})\big)^2 + \text{Var}\big(\hat{f}(\boldsymbol{x})\big) + \sigma^2
泛化误差 = 偏差² + 方差 + 噪声。想提升模型,先判断当前主要矛盾是“射偏了”还是“手太抖”。
  1. 期望均方误差$\mathbb{E}[(y - \hat{f}(\boldsymbol{x}))^2]$ 衡量模型面对新样本时的平均错误大小。
    E[(y−f^(x))2]\displaystyle \mathbb{E}\big[(y - \hat{f}(\boldsymbol{x}))^2\big]
  2. 偏差平方$\text{Bias}(\hat{f}(\boldsymbol{x}))^2$ 是模型预测值与真实规律之间的系统性偏离,准星偏得越远越大。
    Bias(f^(x))2\displaystyle \text{Bias}\big(\hat{f}(\boldsymbol{x})\big)^2
  3. 方差$\text{Var}(\hat{f}(\boldsymbol{x}))$ 是不同训练集下预测结果的波动幅度,相当于手抖的程度。
    Var(f^(x))\displaystyle \text{Var}\big(\hat{f}(\boldsymbol{x})\big)
  4. 噪声项$\sigma^2$ 是数据本身不可预测的干扰,无论模型多好都无法消除。
    σ2\displaystyle \sigma^2

损失函数

考试成绩需要评分标准,而评分标准直接决定小厨师怎么练。误差大时要扣多狠?是不是只看最终口感?在机器学习里,这套评分规则就叫损失函数。

回归问题最常用的评分规则是均方误差(MSE):预测值和真实值差多少,取平方后平均。平方带来的效果是:错得离谱的样本会被扣掉远超线性尺度的分数,因此模型会把精力优先放在弥合最大的错误上。分类问题更常用交叉熵(Cross-Entropy):它衡量的是模型输出的概率分布和真实标签分布之间的差距。

分类不用 MSE,是因为分类标签是离散的(0/1),当输出是概率时,MSE 的梯度不够敏锐,收敛更慢;交叉熵在预测概率极端错误时能提供更大的梯度。简单记忆:回归选 MSE,分类选交叉熵。

评分规则选对了,训练才有方向;选错了,小厨师练得再辛苦也会南辕北辙。面试单独问损失函数,其实是在考你对“目标函数决定优化方向”的敏感度。

MSE=1n∑i=1n(yi−y^i)2\displaystyle \text{MSE} = \frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2
交叉熵衡量“预测的概率分布”离“真实标签分布”有多远。预测得越自信越准确,损失越小。
  1. 两类项$y_i \log \hat{y}_i$ 负责真实标签为 1 的情况,$(1-y_i)\log(1-\hat{y}_i)$ 负责真实标签为 0 的情况。
    yilog⁡y^i+(1−yi)log⁡(1−y^i)\displaystyle y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)
  2. 对数概率$\log \hat{y}_i$ 在预测概率接近 1 时接近 0;在预测概率接近 0 时会变成一个很大的负数,也就是重罚。
    log⁡y^i\displaystyle \log \hat{y}_i
  3. 取平均与负号$-\frac{1}{n}\sum$ 保证损失是正数,且最小化损失等价于最大化正确类别的预测概率。
    −1n∑i=1n\displaystyle -\frac{1}{n}\sum_{i=1}^{n}

梯度下降

模拟考结束,小厨师们拿到成绩单,开始查漏补缺。问题是:怎么知道下一顿饭该往哪个方向改进?用机器学习的话说——怎样沿着损失函数的山坡往下走?这就是经典的“下山问题”:你站在雾中的山顶,看不见全貌,只能用脚尖感受脚下哪个方向最陡,然后迈一小步。

梯度下降的每一步都做两件事:计算当前点的梯度(最陡上升方向),再沿着反方向(最陡下降方向)更新参数。“一步迈多大”由学习率 $\eta$ 控制:步子太大容易跨过谷底,在两侧震荡甚至发散;步子太小则走得极慢,训练半天还在半山腰。真实工程里,学习率调度与自适应优化器(如 Adam)都是为了在“稳”和“快”之间找平衡。

按每次计算梯度用的样本量,又分成批量梯度下降(用全部样本算一次再更新)、随机梯度下降(每看一个样本就更新一次)、小批量梯度下降(每次用一个小批次 $B$)。小批量梯度下降是深度学习默认选择,计算稳定且能充分利用 GPU 并行。此外,梯度下降还可能陷进局部最优——像走错了山谷,虽有平坦脚底却非全局最低;随机性和聪明的学习率调度是常见的“逃谷”方法。

下山和小厨师练手艺是同一个底层逻辑:每次只迈一步,反反复复,每一步都让“扣分”减少一点。面试官问梯度下降,其实是在看你有没有真正理解“训练”和“更新参数”之间的循环关系。

w←w−η⋅1B∑i=1B∇wL(f(xi),yi)\displaystyle \boldsymbol{w} \leftarrow \boldsymbol{w} - \eta \cdot \frac{1}{B}\sum_{i=1}^{B} \nabla_{\boldsymbol{w}} L\big(f(\boldsymbol{x}_i), y_i\big)
参数更新 = 当前位置 − 学习率 × 小批量平均梯度。每一步都朝损失下降最快的方向走一小步。
  1. 当前参数$\boldsymbol{w}$ 是模型目前的权重,好比现在在山上的坐标。
    w\displaystyle \boldsymbol{w}
  2. 学习率$\eta$ 是每次迈出的步长,决定更新幅度的大小。
    η\displaystyle \eta
  3. 小批量平均梯度$\frac{1}{B}\sum_{i=1}^{B} \nabla_{\boldsymbol{w}} L\big(...\big)$ 是从当前批次的 $B$ 个样本算出的平均梯度方向,也就是“脚下最陡的方向”。
    1B∑i=1B∇wL(f(xi),yi)\displaystyle \frac{1}{B}\sum_{i=1}^{B} \nabla_{\boldsymbol{w}} L\big(f(\boldsymbol{x}_i), y_i\big)
  4. 更新方向$\boldsymbol{w} \leftarrow \boldsymbol{w} - \eta \cdot (\text{梯度})$ 表示顺着最陡下坡方向挪动一小步,让损失逐步下降。
    w−η⋅∇\displaystyle \boldsymbol{w} - \eta \cdot \nabla

模型评估

毕业季,学校要给出综合测评。只看一次毕业考成绩显然不公平——万一考题恰好押中了呢?于是教务组采取几套策略:多次模拟考取平均(交叉验证)、统计每类错误的账本(混淆矩阵)、用综合指标看学生稳不稳(F1 分数)。

K 折交叉验证把训练数据分成 K 份,轮流让每一份当验证集,其余 K-1 份训练,最后取平均分。这样每个样本都被当过验证数据,评估更稳。混淆矩阵则记录四件事:真正例(TP)——把正类判成正类;假正例(FP)——把负类误判成正类;假负例(FN)——把正类漏成负类;真负例(TN)——把负类判成负类。

精确率回答“预测为正的样本里有多少真的是正”,召回率回答“真实正样本里有多少被找到”。二者常常此消彼长:把判定放宽,召回率上升而精确率下降;把判定收紧,精确率上升而召回率下降。F1 分数用调和平均把两者合成一个数,只有两者都高时 F1 才高,避免只追单科指标的偏科。

评估体系是一座学校的信用体系:怎么定标准,学生就往哪个方向努力。面试中把混淆矩阵、精确率、召回率、F1 的关系说清楚,是“我能上线一个靠谱模型”最有力的证明。

F1=2×Precision×RecallPrecision+Recall\displaystyle \text{F1} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
F1 是精确率和召回率的综合分。它不偏向任何一边,只有两边都高,F1 才会高。
  1. 精确率$\text{Precision} = \frac{TP}{TP+FP}$ 表示“我说会做的菜里,真正做对的占比”。
    TPTP+FP\displaystyle \frac{TP}{TP+FP}
  2. 召回率$\text{Recall} = \frac{TP}{TP+FN}$ 表示“所有我真正会做的菜里,被检测出来的占比”。
    TPTP+FN\displaystyle \frac{TP}{TP+FN}
  3. 调和平均$\frac{2 \times P \times R}{P + R}$ 对精确率和召回率求平衡,任何一个太低都会拖累 F1。
    2×Precision×RecallPrecision+Recall\displaystyle \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}

AI 应用场景

信贷风控中的模型评估

阶段:模型评估与上线

解决的问题:传统风控靠人工规则判断欺诈,误杀率高、漏网率难以统计。用机器学习训练分类模型后,需要一套比“准确率”更可靠的评估方法,否则模型上线后可能把大量正常用户拒之门外。

具体案例:反欺诈团队用历史借贷记录训练梯度提升树,在验证阶段用混淆矩阵统计两类关键错误:把正常用户误判为欺诈的假正例(FP)、把真实欺诈漏掉的假负例(FN)。业务方根据 FP/FN 的金钱成本设定判定阈值,最终用 F1 分数在多个候选模型中选择最优版本,再放到测试集上做最终确认。

视频推荐中的学习范式与数据划分

阶段:数据准备与模型训练

解决的问题:用户点击数据不全是标准答案(没点可能只是没看到),直接当监督标签会引入偏差;同时离线评估必须避免时间泄漏,不能拿未来数据预测过去。

具体案例:推荐团队先按时间顺序把用户行为序列切成训练、验证、测试三段,再用“曝光且点击”作为正样本、“曝光未点击”作为负样本训练 CTR 预估模型。验证集用于调整学习率和正则化强度,测试集只用来做最终评估;在排序效果评估中,使用精确率和召回率综合观察推荐列表的质量。

医学影像的半监督学习

阶段:模型训练与迭代

解决的问题:医疗影像标注依赖高年资医生,成本极高,大量未标注影像被闲置;全监督学习无法充分利用这些数据。

具体案例:影像团队先用数千张已标注胸片训练一个基线模型,再让它为数十万张未标注影像生成伪标签,挑选高置信度样本加入训练集;同时使用 L2 正则化与早停抑制过拟合,最终在独立测试集上计算混淆矩阵与召回率,评估模型对不同肺病的检出能力。

Python 演示

python36 行
import numpy as np def generate_data(n=60, seed=42):    rng = np.random.default_rng(seed)    x = np.linspace(0, 1, n)    y = np.sin(2 * np.pi * x) + rng.normal(0, 0.15, n)    return x, y def poly_features(x, degree):    return np.vander(x, degree + 1, increasing=True) def fit_poly(x, y, degree):    X = poly_features(x, degree)    w = np.linalg.lstsq(X, y, rcond=None)[0]    return w def predict(x, w, degree):    return poly_features(x, degree) @ w def mean_squared_error(y_true, y_pred):    return np.mean((y_true - y_pred) ** 2) def main():    x_train, y_train = generate_data(60, seed=42)    x_test, y_test = generate_data(60, seed=2024)     print("多项式复杂度 训练MSE  测试MSE  结论")    for degree in (1, 2, 3, 5, 9):        w = fit_poly(x_train, y_train, degree)        train_mse = mean_squared_error(y_train, predict(x_train, w, degree))        test_mse = mean_squared_error(y_test, predict(x_test, w, degree))        label = "欠拟合" if degree < 3 else ("拟合较好" if degree == 3 else "过拟合")        print(f"degree={degree}  {train_mse:.4f}  {test_mse:.4f}  {label}") if __name__ == "__main__":    main()
目的:用多项式回归拟合带噪声的正弦数据,直观对比“欠拟合、拟合较好、过拟合”三种状态下训练误差与测试误差的差异。
  1. y = np.sin(2 * np.pi * x) + rng.normal(0, 0.15, n)用真实曲线加上随机噪声合成数据,模拟现实中的“规律+干扰”。
  2. return np.vander(x, degree + 1, increasing=True)把一维特征扩展成 $x^0, x^1, ..., x^d$ 的特征矩阵,让线性回归也能表示出曲线。
  3. w = np.linalg.lstsq(X, y, rcond=None)[0]最小二乘法一次求出让误差平方和最小的参数。
  4. for degree in (1, 2, 3, 5, 9)用不同复杂度拟合同一份数据,观察从欠拟合到过拟合的连续变化。
  5. label = "欠拟合" if degree < 3 else ("拟合较好" if degree == 3 else "过拟合")根据复杂度给每个模型打上状态标签,方便对照训练误差和测试误差。

常见误区

误区我在训练集上已经把准确率做到 99.9%,这模型一定很强,面试时我就拿这个数字证明能力。

正解训练误差低恰恰可能是过拟合的信号。高复杂度模型能把每个噪声都背下来,但遇到新数据就失灵。要看测试误差,或者看训练误差与验证误差的差距。这就像背下所有真题答案的学生,一换新题型就崩盘。

为何常见:训练集是模型“亲手做过”的题,只要模型够复杂就一定学得完,因此会给人“性能极强”的假象。

误区多跑几次测试集,取个平均不更客观吗?反正都是数据,看看又不吃亏。

正解每用一次测试集,就相当于把考场答案泄露给学生。如果反复根据测试集调整模型,测试集信息就会被吸收进模型,最终评估就失去了公正性。交叉验证才是用来反复调参的,测试集一生只能用一次。

为何常见:初学者习惯把数据集当成一个整体,忽略了“评估独立性”在统计上的重要性。

误区正则化会减小模型复杂度,那我直接少用几个特征不就行了?加了正则化肯定会影响训练集表现。

正解正则化不是删特征,而是对“参数过大”施加惩罚,让模型在拟合数据的同时保持稳健。L2 只是压缩权重,L1 才可能让部分权重变成零。合理的正则化通常会在测试集上提升表现,因为它抑制过拟合,而不是单纯牺牲拟合能力。

为何常见:把“限制模型复杂度”理解成“砍掉模型能力”,忽略了它在偏差-方差权衡中的正面作用。

误区每次只用一个样本更新参数,噪声必然很大、收敛很差,公司里一定都用批量梯度下降才对。

正解随机梯度下降的噪声反而能帮模型跳出尖锐的局部最优;在大规模数据下,每一步开销小、更新次数多,实际收敛速度往往更快。现代深度学习几乎都用小批量随机梯度,而非一次全量计算。

为何常见:从数学定义看,全量计算显得更“精准”,但忽略了数据规模下的计算效率和噪声带来的泛化收益。

误区准确率都 98% 了,模型肯定没问题,指标这么好看,直接上线就行。

正解当类别极不平衡时,比如 99% 是负样本,把所有样本都预测成负类也能达到 99% 准确率。此时模型对少数类完全失效。需要用混淆矩阵、精确率、召回率和 F1 综合观察每一类的表现——这就像只看总分,不看学生到底在哪一科偏科。

为何常见:准确率最直观,也最容易在汇报中传播,导致很多人忽略了类别不平衡下它的欺骗性。

面试题

Q1. 关于监督学习,下列说法正确的是哪一项?

单选题 · easy

  • A.没有标签也能训练监督模型
  • B.需要输入特征和标签配对训练← 正确答案
  • C.只需环境奖励信号即可学习
  • D.监督学习只能做回归不能分类

答案:B。监督学习的核心是“特征+标签”配对学习,B 正确。A 描述的是无监督学习,C 描述的是强化学习,D 错误——分类也是监督学习的典型任务。

Q2. 关于训练集、验证集、测试集的分工,正确的一项是?

单选题 · easy

  • A.训练集练模型,验证集调超参,测试集终评估← 正确答案
  • B.训练集终评估,验证集练模型,测试集调超参
  • C.训练集调超参,验证集练模型,测试集终评估
  • D.训练集调超参,验证集终评估,测试集练模型

答案:A。训练集负责学参数,验证集负责调超参,测试集只做最终评估,这是数据划分的基本纪律。B、C、D 都把职责弄混了,违反了“测试集只能碰一次”的原则。

Q3. 训练误差很小、测试误差很大,最可能的原因是?

单选题 · easy

  • A.模型欠拟合,学习不够充分
  • B.模型过拟合,把噪声也背下← 正确答案
  • C.模型收敛慢,训练轮数太少
  • D.数据太少,导致模型欠拟合

答案:B。训练误差低但测试误差高,是过拟合的典型信号:模型把训练数据中的噪声也当成了规律。这就像学生背下了所有真题却换不了题型,A、C、D 描述的情况通常会导致训练误差也比较高。

Q4. 在 L2 正则化中,$\lambda$ 取得过大时,模型会?

单选题 · mid

  • A.出现严重的过拟合
  • B.偏向欠拟合方向发展← 正确答案
  • C.完全不受到任何影响
  • D.训练时间明显变长

答案:B。$\lambda$ 过大会让正则惩罚压过训练损失,模型几乎不敢使用任何权重,结果过于简单,转向欠拟合。A 是 $\lambda$ 过小的情况,C、D 都不符合正则化的作用机制。

Q5. K 折交叉验证的主要作用是?

单选题 · mid

  • A.扩大样本总量并减少内存占用
  • B.更可靠地估计模型的泛化性能← 正确答案
  • C.降低模型参数数量以提高速度
  • D.让训练集和测试集完全重合

答案:B。K 折交叉验证把数据分成 K 份轮流验证,让每个样本都当过“模拟考生”,对泛化性能的估计更稳定。它不改变数据量,也不降低参数数量,更不会让训练集与测试集重合。

Q6. 在类别不平衡的场景中,比准确率更值得关注的是?

单选题 · mid

  • A.对少数类的召回率← 正确答案
  • B.训练集的平均损失
  • C.模型参数量大小
  • D.学习率衰减曲线

答案:A。类别不平衡时,准确率会被多数类拉高,掩盖少数类的失效。召回率专门衡量“少数类里有多少被找出来”,更贴近业务风险。B、C、D 与类别评估无关。

Q7. 同一模型在不同训练集上表现差异很大,说明?

单选题 · hard

  • A.偏差过大导致整体偏移
  • B.方差过大导致波动明显← 正确答案
  • C.噪声过大难以消除
  • D.正则化系数太大

答案:B。不同训练集导致结果波动大,正是方差高的表现,说明模型对训练数据过于敏感。这就像同一个学生换一间教室发挥就完全不一样。偏差大是“稳定地偏”,噪声是数据本身的分歧,正则化太大则会让模型过于简单。

Q8. 以下哪些方法可以有效缓解过拟合?

多选题 · mid

  • A.收集更多有代表性的训练数据← 正确答案
  • B.加入 L2 正则化约束模型权重← 正确答案
  • C.不断增加神经网络的层数
  • D.反复多跑几轮测试集来调参

答案:AB。更多数据让模型没法死记硬背,L2 正则化限制权重规模,两者都能抑制过拟合。不断增加层数会扩大模型复杂度,过拟合更严重;反复使用测试集是数据泄漏,不是缓解过拟合的方法。

Q9. 关于梯度下降,下列说法正确的有?

多选题 · hard

  • A.学习率过大可能导致参数震荡发散← 正确答案
  • B.小批量梯度下降常用于深度网络训练← 正确答案
  • C.随机梯度下降每次只用一个样本算梯度← 正确答案
  • D.批量梯度下降总能收敛到全局最优

答案:ABC。学习率过大容易越过谷底导致震荡甚至发散,A 正确;小批量是深度学习的主流,B 正确;随机梯度下降每看一个样本就更新一次,C 正确。批量梯度下降在非凸问题中也可能陷入局部最优,D 错误。

Q10. 关于均方误差与交叉熵,下列说法正确的有?

多选题 · hard

  • A.MSE 对大误差的惩罚是平方级的← 正确答案
  • B.交叉熵适合分类概率分布评估← 正确答案
  • C.分类任务用 MSE 往往收敛缓慢← 正确答案
  • D.回归任务应当使用交叉熵损失

答案:ABC。MSE 对误差取平方,大误差被重罚,A 正确;交叉熵衡量预测概率与真实分布的差距,适合分类,B 正确;分类任务使用 MSE 时梯度不敏锐、收敛慢,C 正确。回归任务的标准选择是 MSE,而不是交叉熵,D 错误。