mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
4111 字
11 分钟
机器学习基础:从线性模型到深度网络

本文整理机器学习基础学习笔记,围绕“建模-损失-优化”主线,逐步展开线性模型、非线性建模与深度学习入门框架。

机器学习基础:从案例到方法框架#

案例学习(视频点击量预测)#

场景简介#

根据频道过往数据(点赞、订阅、昨日观看次数等)预测明日总观看次数。 本质是“用数据学习一个函数”来完成从输入到输出的映射。


三步走:模型 → 损失 → 优化#

建模(写出带未知参数的函数)#

用最简单的一元线性模型描述“今天与昨天”的关系:

y=b+wx1(1.1)y = b + w x_1 \tag{1.1}
  • x1x_1:昨日(2月25日)观看次数(特征,已知)
  • yy:今日(2月26日)观看次数(目标)
  • ww:权重(weight,未知参数)
  • bb:偏置(bias,未知参数)

术语:带未知参数(parameter)的函数称为模型(model)。


定义损失(衡量“好坏”的标尺)#

1760341402710 给定参数(b,w)(b,w),用训练数据计算预测y^\hat y与真实yy的差距,得到损失函数L(b,w)L(b,w)

  • 预测函数(示例设定 b=500,w=1x1=4800b=500,\,w=1,x_1=4800​):
y^=500+1x1(1.2)\hat y = 500 + 1\cdot x_1 \tag{1.2}
  • 单样本误差(绝对值):
e1=yy^=400(1.3)e_1 = |y-\hat y| = 400 \tag{1.3}
  • 另一日的单样本误差(绝对值示例):
e2=yy^=2100(1.4)e_2 = |y-\hat y| = 2100 \tag{1.4}
  • 经验风险(平均误差):
L=1Nn=1Nen(1.5)L=\frac{1}{N}\sum_{n=1}^{N} e_n \tag{1.5}
  • 常用误差度量
    • MAE(平均绝对误差): e=y^y(1.6)e=|\,\hat y - y\,| \tag{1.6}
    • MSE(均方误差): e=(y^y)2(1.7)e=(\hat y - y)^2 \tag{1.7}

备注:当y,y^y,\hat y概率分布时,常用**交叉熵(cross entropy)**作为损失。 不同(w,b)(w,b)对应不同的LL​,在参数平面上形成“误差表面(error surface)”, 可视化为等高线图:红色高损失、蓝色低损失。

1760341420426


优化(最小化损失,学出参数)#

目标:找到

w,b=argminw,bL(b,w)w^*, b^*=\arg\min_{w,b} L(b,w)
  • 一维情形(先固定bb:用**梯度下降(GD)**迭代更新

1760341466245

w1w0η(Lw)w=w0(1.8)w_1 \leftarrow w_0 - \eta \,\Big(\frac{\partial L}{\partial w}\Big)\Big|_{w=w_0} \tag{1.8}

其中η\eta学习率(超参数,控制步长)。

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

1760341478975

  • 二维情形(w,bw,b同时学习): 计算偏导并同步更新:
Lww=w0,b=b0,Lbw=w0,b=b0(1.9)\frac{\partial L}{\partial w}\Big|_{w=w_0,b=b_0},\qquad \frac{\partial L}{\partial b}\Big|_{w=w_0,b=b_0} \tag{1.9}w1w0ηLww0,b0b1b0ηLbw0,b0(1.10)\begin{aligned} w_1 &\leftarrow w_0 - \eta \,\frac{\partial L}{\partial w}\Big|_{w_0,b_0}\\ b_1 &\leftarrow b_0 - \eta \,\frac{\partial L}{\partial b}\Big|_{w_0,b_0} \end{aligned} \tag{1.10}

在深度学习框架(如 PyTorch)中,求导由自动微分实现; 反复迭代可得到近似最优解。 该案例真实数据上的近似解示例:w\*0.97,  b\*100w^\*\approx 0.97,\; b^\*\approx 100 (直观符合“x1x_1yy接近、bb​较小”的先验)。

1760341501575

关键术语速记#

名称含义示例
模型(model)含未知参数的函数y=b+wx1y=b+wx_1
参数(parameter)w,bw,b控制模型形状
特征(feature)输入变量昨日观看次数 x1x_1
标签(label)真实值今日观看次数 yy
损失(loss)衡量预测偏差的函数MAE / MSE / 交叉熵
学习率(learning rate, η\eta梯度步长(超参数)控制更新速度
误差表面(error surface)LL 在参数空间的形状等高线图红高蓝低
最优化(optimization)最小化 LL 的过程梯度下降

线性模型#

模型表现与验证#

在上一节中,我们得到了最优参数 w\*=0.97,b\*=100w^\* = 0.97, \, b^\* = 100​,其在训练集(2017–2020年)上的平均损失约为 480。 接下来,将该模型用于 2021 年的数据预测,即:

  • 用 2020 年 12 月 31 日的观看人次预测 2021 年 1 月 1 日;
  • 用 2021 年 1 月 1 日的观看人次预测 1 月 2 日;
  • 依此类推,直到 2 月 14 日。

得到在测试集上的平均误差约为 L0.58L' \approx 0.58(约 580人/天)。

说明:在训练数据上误差较小(480),在未见过的数据上误差较大(580),说明模型在训练数据上拟合良好,但泛化能力有限。


周期性现象与模型改进#

观察 2021 年的真实数据发现: 观看人次呈现明显的周期性规律,每 7 天出现两天低谷(周五与周六)。

模型 y=b+wx1y=b+wx_1 只考虑了前一天,未能捕捉“7天循环”的周期性特征。

因此,可基于领域知识对模型进行扩展:

y=b+j=17wjxj(1.12)y = b + \sum_{j=1}^{7} w_j x_j \tag{1.12}

其中:

  • xjx_j:距预测日第 jj 天的观看次数;
  • wjw_j:各天对应的权重;
  • bb:偏置。

该模型考虑了 过去 7 天的影响。 结果:

  • 在训练数据上的损失:380
  • 在 2021 年测试数据上的损失:490

相比原始单日模型(训练误差 480 / 测试误差 580),性能有显著提升。

(图1.6 预估曲线图)

1760341965958#

权重结果分析#

梯度下降求得的最优参数如表所示:

(表1.1 w 和 b 的最优值)

1760341973509

参数bw₁w₂w₃w₄w₅w₆w₇
数值500.79-0.310.12-0.01-0.100.300.18

解释:

  • w1=0.79w_1 = 0.79 表明前一天的影响最大且为正相关
  • w2,w4,w5w_2, w_4, w_5 为负,代表这些天的观看量与未来观看量呈反向关系;
  • w3,w6,w7w_3, w_6, w_7 为正,说明这几天的观看趋势与目标相近。

模型扩展与极限#

可以进一步扩大“考虑的天数”:

  1. 28 天模型:

    y=b+j=128wjxj(1.13)y = b + \sum_{j=1}^{28} w_j x_j \tag{1.13}
    • 训练集损失:330
    • 测试集损失:460 → 性能略有提升。
  2. 56 天模型:

    y=b+j=156wjxj(1.14)y = b + \sum_{j=1}^{56} w_j x_j \tag{1.14}
    • 训练集损失:320
    • 测试集损失:460 → 损失不再下降,性能趋于稳定。

增加输入特征数量(更多天)在训练集上可持续降低损失,但对未见数据的表现提升有限,说明模型复杂度已接近合理上限。


线性模型的定义与性质#

这些模型的形式均可归纳为:

y^=b+jwjxj\hat{y} = b + \sum_{j} w_j x_j

其核心特征为:

  • 输出是输入特征的线性组合
  • 各特征对预测结果的贡献由权重 wjw_j 决定;
  • 偏置 bb 决定整体平移;
  • 能够解释各输入的影响方向与程度。

这类模型称为 线性模型(Linear Model)


总结#

  • 线性模型易理解、易训练;
  • 但只能刻画线性关系,对周期性、非线性特征的刻画能力有限;
  • 改进方向包括:引入更多输入、增加非线性变换或使用更复杂模型。

分段线性模型(Piecewise Linear Model)#

线性模型的局限性#

线性模型中,x1x_1yy 的关系始终是一条直线:

y=b+wx1y = b + w x_1

调整 ww 会改变斜率,调整 bb 会改变截距,但无论如何设置,它都无法表示复杂的非线性关系。 例如:当 x1x_1 较小时,yyx1x_1 成正比;而当 x1x_1 过大时,yy 反而下降。 这说明线性模型无法模拟真实的非线性关系,这种因模型过于简单而产生的误差称为模型偏差(bias)

(图1.7 线性模型的局限性)

1760342193225#

从 Hard Sigmoid 到分段线性曲线#

为了更灵活地表达 x1x_1yy 的复杂关系,可以将红色曲线(目标函数)看作由多个“硬Sigmoid(Hard Sigmoid)”函数叠加得到。

  • Hard Sigmoid 的特征:
    • 左段平缓、中间斜坡、右段平缓;
    • 可表示“分段线性”特征。

红色曲线可由以下方式组成:

  • 第1个 Hard Sigmoid 的斜坡对应红线第1段;
  • 第2个 Hard Sigmoid 叠加后,补充红线的第2段;
  • 依次叠加多个蓝色 Hard Sigmoid,即可组合成完整红线。

分段线性曲线可以视为:一个常数项 + 多个 Hard Sigmoid 函数组合而成。 转折点越多,需要的 Hard Sigmoid 函数越多。

(图1.8 构建红色曲线)

1760342203060#

分段线性曲线逼近连续函数#

  • 可以通过在曲线上取若干点、连线形成分段线性曲线来逼近任意连续函数。
  • 当采样点足够密集时,分段线性曲线可以任意精度逼近原始曲线。
  • 每个分段线性曲线又可由多个 Hard Sigmoid 函数叠加实现。

因此,只要有足够数量的 Hard Sigmoid 函数,就能逼近任意连续函数。

(图1.9 分段曲线可以逼近任何连续曲线)

1760342211788#

Sigmoid 函数近似 Hard Sigmoid#

直接使用 Hard Sigmoid 不易优化,可用 Sigmoid 函数 逼近:

y=c11+e(b+wx1)(1.16)y = c \cdot \frac{1}{1 + e^{-(b + w x_1)}} \tag{1.16}

或写作:

y=cσ(b+wx1)(1.15)y = c \, \sigma(b + w x_1) \tag{1.15}
  • cc:控制输出幅度;
  • bb:平移位置;
  • ww:控制斜率。

通过调整 (b,w,c)(b, w, c),可得到不同形状的 Sigmoid。 将多个不同的 Sigmoid 函数叠加,即可逼近各种分段线性函数。

(图1.10 使用 Sigmoid 逼近 Hard Sigmoid)

1760342229107 (图1.11 调整参数,制造不同的 Sigmoid 函数)

1760342238891#

叠加多个 Sigmoid 构造复杂函数#

用若干个 Sigmoid 函数叠加形成非线性函数:

y=b+iciσ(bi+wix1)(1.17)y = b + \sum_i c_i \, \sigma(b_i + w_i x_1) \tag{1.17}
  • 每个 ii 对应一个不同的 Sigmoid;
  • wi,bi,ciw_i, b_i, c_i 可调;
  • 各个 Sigmoid 的形状不同,叠加后能近似任意连续函数。

(图1.12 使用 Hard Sigmoid 来合成红色)

1760342247035#

考虑多个输入特征#

可以引入多个输入特征 x1,x2,x3,,xjx_1, x_2, x_3, \dots, x_j,使模型具有更强的表达力:

ii 个 Sigmoid 的输入为:

bi+wi1x1+wi2x2++wijxj(1.18)b_i + w_{i1}x_1 + w_{i2}x_2 + \dots + w_{ij}x_j \tag{1.18}

简化为向量表示:

ri=bi+jwijxj(1.19)r_i = b_i + \sum_j w_{ij} x_j \tag{1.19}

用矩阵形式统一表示:

[r1r2r3]=[b1b2b3]+[w11w12w13w21w22w23w31w32w33][x1x2x3](1.20)\begin{bmatrix} r_1 \\ r_2 \\ r_3 \end{bmatrix}= \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}+ \begin{bmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} & w_{32} & w_{33} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} \tag{1.20}r=b+Wx(1.21)\mathbf{r} = \mathbf{b} + \mathbf{W} \mathbf{x} \tag{1.21}

再通过 Sigmoid 激活:

a=σ(r)(1.22)\mathbf{a} = \sigma(\mathbf{r}) \tag{1.22}

最终输出:

y=b+cTa(1.23)y = b + \mathbf{c}^T \mathbf{a} \tag{1.23}

其中 W,b,c\mathbf{W}, \mathbf{b}, \mathbf{c}​ 均为未知参数。

(图1.13 构建更有灵活性的函数)

1760342257193 (图1.14 比较有灵活性函数的计算过程)

1760342265352#

参数统一与优化#

将所有未知参数拼接为一个长向量:

θ=[θ1θ2θ3](1.24)\theta = \begin{bmatrix} \theta_1 \\ \theta_2 \\ \theta_3 \\ \vdots \end{bmatrix} \tag{1.24}

损失函数记作:

L(θ)L(\theta)

优化目标是:

θ=argminθL(θ)\theta^* = \arg\min_\theta L(\theta)

计算损失函数的梯度:

g=L(θ0)=[Lθ1Lθ2](1.25–1.26)g = \nabla L(\theta_0) = \begin{bmatrix} \frac{\partial L}{\partial \theta_1} \\[6pt] \frac{\partial L}{\partial \theta_2} \\[2pt] \vdots \end{bmatrix} \tag{1.25–1.26}

并进行参数更新:

θ1=θ0ηg(1.28)\theta_1 = \theta_0 - \eta g \tag{1.28}

反复执行梯度下降,直到达到停止条件。

(图1.15 未知参数“拼”成一个向量)

1760342275691 (图1.16 使用梯度下降更新参数)


批量梯度下降(Mini-Batch Gradient Descent)#

在实践中,将全部 NN 条数据分成若干个批量(batch),每个批量含 BB 条样本:

  • 使用当前批量计算损失 L1L_1
  • 求梯度并更新参数;
  • 再取下一个批量计算 L2L_2,继续更新;
  • 直到遍历全部数据。

一次遍历全部数据称为一个回合(epoch)。 一次参数更新称为更新(update)。 批量大小(batch size)与 Sigmoid 数量均为超参数

1760342282136 (图1.17 分批量进行梯度下降)


小结#

  • 分段线性模型 能突破线性模型的限制;
  • Hard Sigmoid / Sigmoid 提供非线性可调函数;
  • 多个 Sigmoid 叠加可逼近任意连续函数;
  • 向量与矩阵形式使表达更简洁;
  • 使用 梯度下降 + 批量优化 在高维参数空间中寻找最优 θ\*\theta^\*

模型变形#

从 Hard Sigmoid 到 ReLU#

  • Hard Sigmoid 可由两个 ReLU 相加近似构成;ReLU 定义为: y=cmax ⁣(0,b+wx1)(1.29)y = c \cdot \max\!\big(0,\, b + w\,x_1\big) \tag{1.29}
    • b+wx1<0b + w x_1 < 0 输出 0;当 b+wx1>0b + w x_1 > 0 输出 b+wx1b + w x_1
    • 通过调整 w,b,cw,b,c 可以移动“拐点”和改变“斜率”。
  • 若用 ii 个 Hard Sigmoid 表达一条分段线性曲线,等价需要 2i2i 个 ReLU(因为 2 个 ReLU ≈ 1 个 Hard Sigmoid)。
  • 术语:Sigmoid、ReLU 等统称为激活函数(activation function)

(图1.18 ReLU 函数)

1760343065873 (图1.19 激活函数)

1760343073231#

实验对比:线性 vs. 多个 ReLU#

  • 线性模型(考虑 56 天特征):训练损失约 320;测试(2021)损失约 460
  • 10 个 ReLU 串联:与线性模型结果接近。
  • 100 个 ReLU 串联:训练损失降至 ≈280;测试损失也略有改善。 解释:100 个 ReLU 可形成最多 100 段折线,表达力显著增强。
  • 1000 个 ReLU 串联:训练损失进一步下降,但测试损失不再改进(可能出现过拟合或容量冗余)。

(图1.20 激活函数实验结果)

1760343082300#

叠层:从特征 xx 到表示 aa,再到更深的 aa'#

  • 一次“线性变换 + 激活”: a=ϕ(Wx+b)ϕ可取 ReLU 或 Sigmoid)a = \phi(Wx + b)\quad\text{(}\phi\text{可取 ReLU 或 Sigmoid)}
  • 继续堆叠得到更深表示: a=ϕ(Wa+b)a' = \phi(W' a + b')
  • 堆叠次数是超参数W,bW,bW,bW',b'不同参数(容量提升)。

(图1.21 改进模型)

1760343090003#

层数与效果(以每层含 100 个 ReLU、输入为“56 天特征”为例)#

  • 2 层:训练损失 ≈280 → 180(显著下降);测试损失 ≈430 → 380(有改进)。
  • 3 层:训练损失 ≈180 → 140;测试损失 ≈380(进一步改进)。
  • 4 层:训练损失 ≈100;测试损失 ≈440比 3 层更差,出现过拟合)。

(图1.22 使用 ReLU 的实验结果)

1760343098141 (图1.23 使用 3 次 ReLU 的实验结果)

1760343105502 (图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)#

数据划分#

机器学习任务通常包含两类数据:

训练数据:(x1,y1),(x2,y2),,(xN,yN)测试数据:(xN+1),(xN+2),,(xN+M)(1.30)\text{训练数据:} (x_1, y_1), (x_2, y_2), \dots, (x_N, y_N) \\ \text{测试数据:} (x_{N+1}), (x_{N+2}), \dots, (x_{N+M}) \tag{1.30}
  • 训练集(Training Set):已知输入 xx 与标签 yy,用于学习模型参数;
  • 测试集(Test Set):仅有输入 xx,无标签,用于评估模型泛化性能。

机器学习的三步流程#

  1. 建立模型 写出一个含未知参数的函数:

    fθ(x)f_\theta(x)

    其中 θ\theta 代表模型中所有未知参数(如 w,bw,b)。 函数 fθ(x)f_\theta(x) 表示模型的映射:输入特征 xx → 输出预测。

  2. 定义损失函数 损失函数 L(θ)L(\theta) 用于衡量模型预测与真实标签之间的差距, 评估当前参数 θ\theta 的好坏。

  3. 优化求解参数 通过最小化损失函数来寻找最优参数:

    θ=argminθL(θ)(1.31)\theta^* = \arg\min_{\theta} L(\theta) \tag{1.31}

    得到最优参数后,将其代入模型:

    fθ(x)f_{\theta^*}(x)

    即可用来对未知样本(测试集)进行预测。


预测与提交#

当最优参数 θ\theta^* 训练完成后:

  1. 将其代入模型 fθ(x)f_\theta(x)​
  2. 输入测试集样本 xN+1,,xN+Mx_{N+1}, \dots, x_{N+M}​
  3. 得到预测结果 y^N+1,,y^N+M\hat{y}_{N+1}, \dots, \hat{y}_{N+M}
  4. 保存输出结果(例如提交到 Kaggle 等平台)。

总结#

步骤关键操作说明
1️⃣ 建模设定含未知参数的函数 fθ(x)f_\theta(x)决定模型形式(线性 / 非线性)
2️⃣ 定义损失设计 L(θ)L(\theta) 衡量预测误差常见如 MAE, MSE, 交叉熵等
3️⃣ 优化求解寻找 θ=argminL(θ)\theta^* = \arg\min L(\theta)使用梯度下降或其变体
✅ 应用模型fθ(x)f_{\theta^*}(x) 在测试集上预测评估泛化性能

简而言之:机器学习 = “写函数 + 定损失 + 做优化”

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

机器学习基础:从线性模型到深度网络
https://castorice.xin/posts/机器学习基础/
作者
castorice
发布于
2026-03-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时