📘 机器学习基础:从线性模型到时序神经网络

—— 学习笔记(含时序建模进阶方向思考)


一、问题背景:预测每日视频观看人次

  • 任务:根据历史观看数据,预测未来某日的观看人次。
  • 已知数据:2017–2020 年每天的真实观看次数(训练集);
  • 测试目标:2021 年 1 月 1 日至 2 月 14 日的观看人次(验证集);
  • 评估指标:平均绝对误差(MAE),单位:千人。

💡 关键挑战:数据呈现强周期性(每周五、六显著下降),且存在特殊事件(如除夕)导致异常低谷。


二、从简单线性模型起步

1. 单变量线性模型

  • 形式: [ y = b + w x_1 ] 其中 (x_1) 是前一天观看人次。
  • 训练损失:480(千人);
  • 测试误差:580(千人);
  • 行为分析:预测曲线 ≈ 真实曲线右移一天 → 模型仅“复制”前一天值((w \approx 0.97, b \approx 100))。

2. 多变量线性模型(引入历史窗口)

  • 7天模型: [ y = b + \sum_{j=1}^{7} w_j x_j ]
    • 训练损失 ↓ 至 380;
    • 测试误差 ↓ 至 490;
    • 权重显示:某些天数(如前2、4、5天)与未来呈负相关
  • 扩展至28天、56天
    • 训练损失持续下降(330 → 320);
    • 但测试误差稳定在 460信息增益饱和

✅ 结论:线性模型能利用多天信息,但受限于线性假设,无法捕捉非线性动态或复杂周期模式。


三、突破线性限制:引入非线性激活函数

1. 线性模型的瓶颈(模型偏差)

  • 假设 (x) 与 (y) 呈单调关系;
  • 无法表达:阈值效应、饱和效应、周期突变等。

2. 分段线性逼近思想

  • 任意连续函数可由分段线性曲线逼近;
  • 分段线性曲线可由多个 Hard Sigmoid 函数叠加而成。

3. 实用激活函数替代方案

激活函数表达式特点
Sigmoid(\sigma(z) = \frac{1}{1 + e^{-z}})平滑、有界,但易梯度消失
ReLU(\text{ReLU}(z) = \max(0, z))计算高效、缓解梯度消失,实验表现更优

🔬 实验发现:使用 100个 ReLU 的模型,训练损失降至 280,测试误差也略有改善。


四、构建神经网络:从单层到多层

1. 单隐藏层模型(浅层网络)

  • 输入:前56天观看数据 (\mathbf{x} \in \mathbb{R}^{56});
  • 隐藏层(100个 ReLU): [ \mathbf{a} = \text{ReLU}(\mathbf{W} \mathbf{x} + \mathbf{b}) ]
  • 输出: [ y = c_0 + \mathbf{c}^T \mathbf{a} ]

2. 多层堆叠(深度网络)

  • 将 ReLU 层重复多次(如3层、4层): [ \mathbf{a}^{(1)} = \text{ReLU}(\mathbf{W}^{(1)} \mathbf{x} + \mathbf{b}^{(1)}) \ \mathbf{a}^{(2)} = \text{ReLU}(\mathbf{W}^{(2)} \mathbf{a}^{(1)} + \mathbf{b}^{(2)}) \ y = \mathbf{c}^T \mathbf{a}^{(L)} ]
  • 效果
    • 3层:训练损失 140,测试损失 380
    • 4层:训练损失 100,测试损失 440 ↑。

3. 过拟合(Overfitting)现象

  • 模型在训练集上表现越来越好,但在未见数据上性能下降;
  • 根本原因:模型复杂度 > 数据信息量,记住了噪声而非规律。

✅ 应对策略:选择验证集表现最优的模型(如3层),而非训练损失最低者。


五、优化与训练机制

1. 参数统一表示

  • 所有可学习参数(权重、偏置)拼接为向量 (\theta);
  • 损失函数写作 (L(\theta))。

2. 梯度下降(Gradient Descent)

  • 更新规则: [ \theta \leftarrow \theta - \eta \nabla_\theta L(\theta) ]
  • 当参数量大时,穷举不可行,必须依赖梯度优化。

3. 批量训练(Mini-batch Training)

  • 将数据分为 batch(如每批10条);
  • 每处理一个 batch 更新一次参数;
  • 1 epoch = 遍历全部数据一次;
  • 优点:降低计算开销,引入噪声提升泛化。

六、核心方法论:机器学习三步法

  1. 定义模型:设计含参数 (\theta) 的函数 (f_\theta(x));
  2. 定义损失:衡量预测与真实值的差距,如 MAE、MSE;
  3. 优化参数:通过梯度下降求解 (\theta^* = \arg\min_\theta L(\theta));
  4. 部署预测:将 (\theta^*) 应用于测试输入,输出预测结果。

🎯 成功关键:模型灵活性 + 数据理解 + 泛化控制


七、延伸思考:面向时间序列建模的进阶方向 🌟

当前模型虽有效,但对时间本质结构的建模仍显粗糙。以下是值得深入探索的时序建模范式:

1. 显式建模周期性与季节性

  • 问题:7天周期被隐式学习,效率低且不稳定。
  • 解决方案
    • 使用 傅里叶级数正余弦时间编码(如 Prophet、Transformer 中的位置编码);
    • 添加“星期几”作为分类特征,或使用循环嵌入(cyclic embedding)。

2. 融合外部变量(Exogenous Regressors)

  • 问题:无法解释“除夕观看骤降”等事件。
  • 解决方案
    • 引入日历特征(是否周末、节假日、季节);
    • 构建多变量时间序列模型(如 TFT、N-HiTS、DeepAR);
    • 示例:添加 is_chinese_new_year 二元特征,显著提升对异常点的预测能力。

3. 长期依赖建模

  • 问题:56天窗口可能不足以捕捉年度趋势或缓慢漂移。
  • 解决方案
    • RNN/LSTM/GRU:天然支持变长序列,记忆长期状态;
    • TCN(Temporal Convolutional Network):并行高效,感受野随层数指数增长;
    • Transformer:通过自注意力机制建模任意距离依赖(需位置编码)。

4. 概率预测与不确定性量化

  • 问题:点预测无法反映风险(如“可能在 5000±1000 之间”)。
  • 解决方案
    • 分位数回归:预测多个分位点(如 10%、50%、90%);
    • 概率模型:DeepAR 输出高斯分布参数;
    • 集成方法:Dropout 作为贝叶斯近似,估计预测方差。

5. 自监督预训练与时序表征学习

  • 问题:标注数据有限,模型泛化弱。
  • 解决方案
    • 在大量无标签时序数据上预训练(如掩码重建、对比学习);
    • 使用 TS2VecTimesNetPatchTST 等方法学习通用时间模式;
    • 下游任务只需微调少量参数。

💡 时序建模黄金法则
好的时序模型 = 对时间结构的理解 × 灵活的函数逼近 × 对不确定性的尊重


八、总结

模型类型训练损失测试误差优势缺陷
线性(1天)480580简单、可解释无法捕捉周期
线性(56天)320460利用更多信息仍为线性
100-ReLU(单层)280~440非线性拟合表达能力有限
3层 ReLU140380深度提取特征需防过拟合
4层 ReLU100440更强拟合过拟合

最终建议:在实际部署中,应选择验证集误差最小的模型(如3层网络),并考虑引入日历特征概率输出以提升实用性。


更多推荐