机器学习基本概念
问题
机器学习的核心概念有哪些?训练与推理的区别是什么?特征、标签、损失函数、梯度下降的本质是什么?
答案
机器学习(Machine Learning) 是让计算机从数据中自动学习规律并做出预测或决策的技术——你不需要显式编写规则(如 if temperature > 30 then hot),而是给模型大量数据,让它自己学出 temperature → 天气 的映射关系。
一、训练与推理——两个阶段
| 阶段 | 目标 | 数据 | 计算资源 | 时间 |
|---|---|---|---|---|
| 训练(Training) | 从数据中学习参数 | 需要大量标注数据 | 高(GPU 集群) | 小时~月 |
| 推理(Inference) | 用学到的参数做预测 | 单条新数据 | 较低 | 毫秒~秒 |
训练就像学生做练习题(有答案对照,不断纠错),推理就像考试(面对新题目,用学到的知识作答)。
二、核心术语
特征(Feature)与标签(Label)
- 特征(Feature / Input / X):描述数据的属性。比如预测房价时,面积、楼层、地段就是特征
- 标签(Label / Target / Y):我们要预测的目标值。比如房价本身
- 样本(Sample / Instance):一条完整的数据记录(一组特征 + 对应标签)
样本: { 特征: [面积=100m², 楼层=5, 地段=市中心], 标签: 500万 }
模型(Model)与参数(Parameter)
模型是一个数学函数,输入特征、输出预测值。最简单的模型就是线性回归:
其中 是权重(Weight), 是偏置(Bias),它们统称参数(Parameters)。训练的本质就是找到一组最优参数,使模型的预测尽可能接近真实值。
- 线性回归可能只有几十个参数
- 一个 ResNet-50 有约 2500 万参数
- GPT-3 有 1750 亿参数
- GPT-4 据传有超过 1 万亿参数(MoE 架构)
参数越多,模型的表达能力越强,但也越容易过拟合、训练越耗资源。
损失函数(Loss Function)
损失函数衡量模型预测值 和真实值 之间的差距。训练的目标就是最小化损失函数。
| 损失函数 | 公式 | 适用场景 |
|---|---|---|
| 均方误差 MSE | 回归任务 | |
| 平均绝对误差 MAE | 回归(对异常值鲁棒) | |
| 交叉熵 Cross-Entropy | 分类任务 | |
| 二元交叉熵 BCE | 二分类任务 |
梯度下降(Gradient Descent)
有了损失函数,如何找到最优参数?——沿着损失下降最快的方向更新参数,这就是梯度下降:
- :参数
- :学习率(Learning Rate),控制每一步的步长
- :损失函数对参数的梯度(方向导数)
学习率的影响:
| 学习率 | 效果 |
|---|---|
| 太大 | 参数更新幅度过大,损失震荡甚至发散 |
| 太小 | 收敛极慢,可能卡在局部最优 |
| 合适 | 稳定收敛到较优解 |
三、超参数与模型选择
超参数(Hyperparameter) 是训练前需要人为设定的参数(不是通过学习得到的),如:
- 学习率
- 批次大小(Batch Size)
- 网络层数和隐藏单元数
- 正则化强度
- 训练轮数(Epochs)
超参调优方法:
| 方法 | 说明 |
|---|---|
| 网格搜索(Grid Search) | 遍历所有组合,计算开销大 |
| 随机搜索(Random Search) | 随机采样,效率更高 |
| 贝叶斯优化(Bayesian Optimization) | 根据历史结果智能选择下一组参数 |
| 学习率调度(LR Scheduler) | 动态调整学习率(余弦退火、Warmup 等) |
四、数据集划分
| 数据集 | 用途 | 参与训练? |
|---|---|---|
| 训练集(Training Set) | 模型学习参数 | ✅ 是 |
| 验证集(Validation Set) | 调超参、选模型、早停判断 | ❌ 否(但会影响超参选择) |
| 测试集(Test Set) | 最终评估模型泛化能力 | ❌ 否(只用一次) |
数据泄露(Data Leakage):如果测试集的信息在训练时被模型"看到"了,评估结果就不可信。常见泄露场景:
- 先做特征缩放再划分数据集(应该先划分再分别缩放)
- 时序数据随机打乱后划分(应该按时间顺序划分)
- 用全部数据做特征选择
五、交叉验证
当数据量不大时,单次划分可能导致评估不稳定。K 折交叉验证(K-Fold Cross Validation) 将数据分成 K 份,每次用 1 份做验证、其余 K-1 份做训练,重复 K 次取平均:
Fold 1: [验证] [训练] [训练] [训练] [训练]
Fold 2: [训练] [验证] [训练] [训练] [训练]
Fold 3: [训练] [训练] [验证] [训练] [训练]
Fold 4: [训练] [训练] [训练] [验证] [训练]
Fold 5: [训练] [训练] [训练] [训练] [验证]
常用 K=5 或 K=10。对于小数据集,交叉验证是更可靠的评估方式。
常见面试问题
Q1: 机器学习和深度学习的区别?
答案:
| 维度 | 机器学习(经典) | 深度学习 |
|---|---|---|
| 特征工程 | 需要人工设计特征 | 自动学习特征 |
| 模型复杂度 | 相对简单(线性模型、决策树等) | 极复杂(百万~万亿参数) |
| 数据需求 | 小数据也能工作 | 通常需要大量数据 |
| 计算资源 | CPU 即可 | 通常需要 GPU/TPU |
| 可解释性 | 较好(如决策树) | 较差(黑箱) |
| 适用场景 | 表格数据、小数据集 | 图像、文本、语音、大数据 |
深度学习是机器学习的子集,核心区别在于是否使用多层神经网络自动提取特征。
Q2: 什么是过拟合?如何避免?
答案:
过拟合是指模型在训练集上表现很好,但在新数据上表现差——模型"记住"了训练数据的噪音而非真正的规律。
表现:训练 Loss 持续下降,但验证 Loss 先降后升。
应对方法:
- 正则化:L1(稀疏化)、L2(权重衰减)限制参数大小
- Dropout:训练时随机丢弃部分神经元
- 早停(Early Stopping):验证 Loss 不再下降时停止训练
- 数据增强:增加训练数据的多样性
- 减小模型复杂度:减少层数或参数量
- 交叉验证:更可靠地评估泛化能力
Q3: 梯度消失和梯度爆炸是什么?
答案:
在深层网络的反向传播中,梯度需要逐层传递。如果每层的梯度都 < 1(如 Sigmoid),梯度会指数级衰减,到浅层已接近零——梯度消失,导致浅层参数几乎不更新。反之,如果梯度 > 1,会指数级增大——梯度爆炸。
解决方案:
- ReLU 激活函数:正区间梯度恒为 1,缓解消失
- 残差连接(ResNet):跳跃连接让梯度直接流向浅层
- Batch Normalization:标准化中间层输出
- 梯度裁剪(Gradient Clipping):限制梯度最大值
- 合适的权重初始化:He 初始化、Xavier 初始化
Q4: Batch Size 对训练有什么影响?
答案:
| Batch Size | 优点 | 缺点 |
|---|---|---|
| 小(8~32) | 正则化效果好、泛化能力强 | 训练慢、GPU 利用率低 |
| 大(256~4096) | 训练快、梯度估计稳定 | 可能泛化差、需要更大学习率 |
实践中通常从 32 开始尝试,配合学习率线性缩放规则(Batch Size 翻倍则学习率翻倍)。
Q5: 训练集、验证集、测试集的作用分别是什么?为什么需要三个?
答案:
- 训练集:模型从中学习参数(权重和偏置)
- 验证集:用于在训练过程中调超参(学习率、层数等)和选择最佳模型
- 测试集:训练完全结束后做最终评估,模拟模型面对"完全没见过"的数据
为什么不能只用训练集和测试集?如果用测试集反复调参,测试集就变成了"间接的训练数据",评估结果不再可靠。验证集就是专门用来"消耗"的——你可以反复在上面调参,最终用测试集做一次性的公正评估。