本文整理机器学习基础学习笔记,围绕“建模-损失-优化”主线,逐步展开线性模型、非线性建模与深度学习入门框架。
机器学习基础:从案例到方法框架
案例学习(视频点击量预测)
场景简介
根据频道过往数据(点赞、订阅、昨日观看次数等)预测明日总观看次数。 本质是“用数据学习一个函数”来完成从输入到输出的映射。
三步走:模型 → 损失 → 优化
建模(写出带未知参数的函数)
用最简单的一元线性模型描述“今天与昨天”的关系:
- :昨日(2月25日)观看次数(特征,已知)
- :今日(2月26日)观看次数(目标)
- :权重(weight,未知参数)
- :偏置(bias,未知参数)
术语:带未知参数(parameter)的函数称为模型(model)。
定义损失(衡量“好坏”的标尺)
给定参数,用训练数据计算预测与真实的差距,得到损失函数。
- 预测函数(示例设定 ):
- 单样本误差(绝对值):
- 另一日的单样本误差(绝对值示例):
- 经验风险(平均误差):
- 常用误差度量
- MAE(平均绝对误差):
- MSE(均方误差):
备注:当为概率分布时,常用**交叉熵(cross entropy)**作为损失。 不同对应不同的,在参数平面上形成“误差表面(error surface)”, 可视化为等高线图:红色高损失、蓝色低损失。
优化(最小化损失,学出参数)
目标:找到
- 一维情形(先固定):用**梯度下降(GD)**迭代更新

其中为学习率(超参数,控制步长)。
- 停止条件(二选一或并用)
- 达到预设最大更新步数(超参数)
- 梯度接近 0(驻点)
- 局部最小/全局最小 误差表面可能存在局部最小值与全局最小值; 实践中更重要的难题通常不是“卡在局部最小”, 而是优化效率、学习率设置、曲率/鞍点等。

- 二维情形(同时学习): 计算偏导并同步更新:
在深度学习框架(如 PyTorch)中,求导由自动微分实现; 反复迭代可得到近似最优解。 该案例真实数据上的近似解示例: (直观符合“与接近、较小”的先验)。
关键术语速记
| 名称 | 含义 | 示例 |
|---|---|---|
| 模型(model) | 含未知参数的函数 | |
| 参数(parameter) | 等 | 控制模型形状 |
| 特征(feature) | 输入变量 | 昨日观看次数 |
| 标签(label) | 真实值 | 今日观看次数 |
| 损失(loss) | 衡量预测偏差的函数 | MAE / MSE / 交叉熵 |
| 学习率(learning rate, ) | 梯度步长(超参数) | 控制更新速度 |
| 误差表面(error surface) | 在参数空间的形状 | 等高线图红高蓝低 |
| 最优化(optimization) | 最小化 的过程 | 梯度下降 |
线性模型
模型表现与验证
在上一节中,我们得到了最优参数 ,其在训练集(2017–2020年)上的平均损失约为 480。 接下来,将该模型用于 2021 年的数据预测,即:
- 用 2020 年 12 月 31 日的观看人次预测 2021 年 1 月 1 日;
- 用 2021 年 1 月 1 日的观看人次预测 1 月 2 日;
- 依此类推,直到 2 月 14 日。
得到在测试集上的平均误差约为 (约 580人/天)。
说明:在训练数据上误差较小(480),在未见过的数据上误差较大(580),说明模型在训练数据上拟合良好,但泛化能力有限。
周期性现象与模型改进
观察 2021 年的真实数据发现: 观看人次呈现明显的周期性规律,每 7 天出现两天低谷(周五与周六)。
模型 只考虑了前一天,未能捕捉“7天循环”的周期性特征。
因此,可基于领域知识对模型进行扩展:
其中:
- :距预测日第 天的观看次数;
- :各天对应的权重;
- :偏置。
该模型考虑了 过去 7 天的影响。 结果:
- 在训练数据上的损失:380
- 在 2021 年测试数据上的损失:490
相比原始单日模型(训练误差 480 / 测试误差 580),性能有显著提升。
(图1.6 预估曲线图)
权重结果分析
梯度下降求得的最优参数如表所示:
(表1.1 w 和 b 的最优值)

| 参数 | b | w₁ | w₂ | w₃ | w₄ | w₅ | w₆ | w₇ |
|---|---|---|---|---|---|---|---|---|
| 数值 | 50 | 0.79 | -0.31 | 0.12 | -0.01 | -0.10 | 0.30 | 0.18 |
解释:
- 表明前一天的影响最大且为正相关;
- 为负,代表这些天的观看量与未来观看量呈反向关系;
- 为正,说明这几天的观看趋势与目标相近。
模型扩展与极限
可以进一步扩大“考虑的天数”:
-
28 天模型:
- 训练集损失:330
- 测试集损失:460 → 性能略有提升。
-
56 天模型:
- 训练集损失:320
- 测试集损失:460 → 损失不再下降,性能趋于稳定。
增加输入特征数量(更多天)在训练集上可持续降低损失,但对未见数据的表现提升有限,说明模型复杂度已接近合理上限。
线性模型的定义与性质
这些模型的形式均可归纳为:
其核心特征为:
- 输出是输入特征的线性组合;
- 各特征对预测结果的贡献由权重 决定;
- 偏置 决定整体平移;
- 能够解释各输入的影响方向与程度。
这类模型称为 线性模型(Linear Model)。
总结
- 线性模型易理解、易训练;
- 但只能刻画线性关系,对周期性、非线性特征的刻画能力有限;
- 改进方向包括:引入更多输入、增加非线性变换或使用更复杂模型。
分段线性模型(Piecewise Linear Model)
线性模型的局限性
线性模型中, 与 的关系始终是一条直线:
调整 会改变斜率,调整 会改变截距,但无论如何设置,它都无法表示复杂的非线性关系。 例如:当 较小时, 与 成正比;而当 过大时, 反而下降。 这说明线性模型无法模拟真实的非线性关系,这种因模型过于简单而产生的误差称为模型偏差(bias)。
(图1.7 线性模型的局限性)
从 Hard Sigmoid 到分段线性曲线
为了更灵活地表达 与 的复杂关系,可以将红色曲线(目标函数)看作由多个“硬Sigmoid(Hard Sigmoid)”函数叠加得到。
- Hard Sigmoid 的特征:
- 左段平缓、中间斜坡、右段平缓;
- 可表示“分段线性”特征。
红色曲线可由以下方式组成:
- 第1个 Hard Sigmoid 的斜坡对应红线第1段;
- 第2个 Hard Sigmoid 叠加后,补充红线的第2段;
- 依次叠加多个蓝色 Hard Sigmoid,即可组合成完整红线。
分段线性曲线可以视为:一个常数项 + 多个 Hard Sigmoid 函数组合而成。 转折点越多,需要的 Hard Sigmoid 函数越多。
(图1.8 构建红色曲线)
分段线性曲线逼近连续函数
- 可以通过在曲线上取若干点、连线形成分段线性曲线来逼近任意连续函数。
- 当采样点足够密集时,分段线性曲线可以任意精度逼近原始曲线。
- 每个分段线性曲线又可由多个 Hard Sigmoid 函数叠加实现。
因此,只要有足够数量的 Hard Sigmoid 函数,就能逼近任意连续函数。
(图1.9 分段曲线可以逼近任何连续曲线)
Sigmoid 函数近似 Hard Sigmoid
直接使用 Hard Sigmoid 不易优化,可用 Sigmoid 函数 逼近:
或写作:
- :控制输出幅度;
- :平移位置;
- :控制斜率。
通过调整 ,可得到不同形状的 Sigmoid。 将多个不同的 Sigmoid 函数叠加,即可逼近各种分段线性函数。
(图1.10 使用 Sigmoid 逼近 Hard Sigmoid)
(图1.11 调整参数,制造不同的 Sigmoid 函数)
叠加多个 Sigmoid 构造复杂函数
用若干个 Sigmoid 函数叠加形成非线性函数:
- 每个 对应一个不同的 Sigmoid;
- 可调;
- 各个 Sigmoid 的形状不同,叠加后能近似任意连续函数。
(图1.12 使用 Hard Sigmoid 来合成红色)
考虑多个输入特征
可以引入多个输入特征 ,使模型具有更强的表达力:
第 个 Sigmoid 的输入为:
简化为向量表示:
用矩阵形式统一表示:
再通过 Sigmoid 激活:
最终输出:
其中 均为未知参数。
(图1.13 构建更有灵活性的函数)
(图1.14 比较有灵活性函数的计算过程)
参数统一与优化
将所有未知参数拼接为一个长向量:
损失函数记作:
优化目标是:
计算损失函数的梯度:
并进行参数更新:
反复执行梯度下降,直到达到停止条件。
(图1.15 未知参数“拼”成一个向量)
(图1.16 使用梯度下降更新参数)
批量梯度下降(Mini-Batch Gradient Descent)
在实践中,将全部 条数据分成若干个批量(batch),每个批量含 条样本:
- 使用当前批量计算损失 ;
- 求梯度并更新参数;
- 再取下一个批量计算 ,继续更新;
- 直到遍历全部数据。
一次遍历全部数据称为一个回合(epoch)。 一次参数更新称为更新(update)。 批量大小(batch size)与 Sigmoid 数量均为超参数。
(图1.17 分批量进行梯度下降)
小结
- 分段线性模型 能突破线性模型的限制;
- Hard Sigmoid / Sigmoid 提供非线性可调函数;
- 多个 Sigmoid 叠加可逼近任意连续函数;
- 向量与矩阵形式使表达更简洁;
- 使用 梯度下降 + 批量优化 在高维参数空间中寻找最优 。
模型变形
从 Hard Sigmoid 到 ReLU
- Hard Sigmoid 可由两个 ReLU 相加近似构成;ReLU 定义为:
- 当 输出 0;当 输出 。
- 通过调整 可以移动“拐点”和改变“斜率”。
- 若用 个 Hard Sigmoid 表达一条分段线性曲线,等价需要 个 ReLU(因为 2 个 ReLU ≈ 1 个 Hard Sigmoid)。
- 术语:Sigmoid、ReLU 等统称为激活函数(activation function)。
(图1.18 ReLU 函数)
(图1.19 激活函数)
实验对比:线性 vs. 多个 ReLU
- 线性模型(考虑 56 天特征):训练损失约 320;测试(2021)损失约 460。
- 10 个 ReLU 串联:与线性模型结果接近。
- 100 个 ReLU 串联:训练损失降至 ≈280;测试损失也略有改善。 解释:100 个 ReLU 可形成最多 100 段折线,表达力显著增强。
- 1000 个 ReLU 串联:训练损失进一步下降,但测试损失不再改进(可能出现过拟合或容量冗余)。
(图1.20 激活函数实验结果)
叠层:从特征 到表示 ,再到更深的
- 一次“线性变换 + 激活”:
- 继续堆叠得到更深表示:
- 堆叠次数是超参数; 与 为不同参数(容量提升)。
(图1.21 改进模型)
层数与效果(以每层含 100 个 ReLU、输入为“56 天特征”为例)
- 2 层:训练损失 ≈280 → 180(显著下降);测试损失 ≈430 → 380(有改进)。
- 3 层:训练损失 ≈180 → 140;测试损失 ≈380(进一步改进)。
- 4 层:训练损失 ≈100;测试损失 ≈440(比 3 层更差,出现过拟合)。
(图1.22 使用 ReLU 的实验结果)
(图1.23 使用 3 次 ReLU 的实验结果)
(图1.25 3 层 vs 4 层对比)
例外日的误差:模型使用“前 56 天数值”预测下一天,不知道“节假日(如除夕)”等外部因素,因而在特定低谷日会产生滞后或偏差(如预测晚一天出现低谷)。
从“神经元”到“神经网络→深度学习”
- Sigmoid/ReLU 对应神经元(neuron);多神经元连接形成神经网络(neural network)。
- 逐层堆叠形成深层网络(隐藏层多 → “深度学习”)。
- 发展例(ImageNet 基准):
- AlexNet(2012):8 层,Top-5 错误率 16.4%
- VGG(2014):19 层,7.3%
- GoogLeNet(Inception):22 层,6.7%
- ResNet(2015/2016):152 层,3.57%
- 深并非越多越好:以验证/测试集表现选型,本例应选 3 层 而非 4 层。
训练方法提示
- 训练采用反向传播(Backpropagation, BP):一种高效计算梯度的实现方式;
- 与梯度下降/变体优化器结合,迭代最小化损失;
- 通过验证集选择层数、激活函数个数、正则化强度等超参数;
- 避免过拟合:关注训练 vs 测试差距,必要时采用数据增强、早停、正则化、合适的模型容量等。
机器学习框架(Machine Learning Framework)
数据划分
机器学习任务通常包含两类数据:
- 训练集(Training Set):已知输入 与标签 ,用于学习模型参数;
- 测试集(Test Set):仅有输入 ,无标签,用于评估模型泛化性能。
机器学习的三步流程
-
建立模型 写出一个含未知参数的函数:
其中 代表模型中所有未知参数(如 )。 函数 表示模型的映射:输入特征 → 输出预测。
-
定义损失函数 损失函数 用于衡量模型预测与真实标签之间的差距, 评估当前参数 的好坏。
-
优化求解参数 通过最小化损失函数来寻找最优参数:
得到最优参数后,将其代入模型:
即可用来对未知样本(测试集)进行预测。
预测与提交
当最优参数 训练完成后:
- 将其代入模型 ;
- 输入测试集样本 ;
- 得到预测结果 ;
- 保存输出结果(例如提交到 Kaggle 等平台)。
总结
| 步骤 | 关键操作 | 说明 |
|---|---|---|
| 1️⃣ 建模 | 设定含未知参数的函数 | 决定模型形式(线性 / 非线性) |
| 2️⃣ 定义损失 | 设计 衡量预测误差 | 常见如 MAE, MSE, 交叉熵等 |
| 3️⃣ 优化求解 | 寻找 | 使用梯度下降或其变体 |
| ✅ 应用模型 | 用 在测试集上预测 | 评估泛化性能 |
简而言之:机器学习 = “写函数 + 定损失 + 做优化”
部分信息可能已经过时





















