(5)机器学习-模型训练的数学原理

1. 先把"模型"说清楚

在机器学习里,模型就是一个函数。

  • 输入 :我们手头的特征向量 x=(x1,x2,...,xn)x=(x_1,x_2,\dots ,x_n)x=(x1,x2,...,xn)。
  • 输出 :模型预测的结果 y^\hat{y}y^。

最常见的模型是线性模型:
y^=w1x1+w2x2+⋯+wnxn+b \boxed{\hat{y}=w_1x_1+w_2x_2+\dots +w_nx_n+b} y^=w1x1+w2x2+⋯+wnxn+b

这里 wiw_iwi 是权重,bbb 是偏置。

如果是分类问题,我们往往把 y^\hat{y}y^ 通过一个激活函数(如 Sigmoid 或 Softmax)映射到 0--1 或类别上。

2. "学到规律"到底是做什么?

我们给定一组真实标签 yyy,希望模型的预测 y^\hat{y}y^ 与真实值尽量接近。

这就像我们把模型当成一台自动调音的乐器:

  • 目标:让音调(误差)尽量小。
  • 过程:反复微调(改参数)来逼近正确音调。

数学上,我们用 损失函数(Loss)来量化预测与真实值之间的差距。

2.1 损失函数

  • 回归 :最常用的是均方误差(MSE)
    L(w,b)=1m∑i=1m(y^(i)−y(i))2 L(w,b)=\frac{1}{m}\sum_{i=1}^{m}\big(\hat{y}^{(i)}-y^{(i)}\big)^2 L(w,b)=m1i=1∑m(y^(i)−y(i))2
    这里 mmm 是样本数。
  • 分类 :交叉熵(Cross‑Entropy)
    L(w,b)=−1m∑i=1m[y(i)log⁡p^(i)+(1−y(i))log⁡(1−p^(i))] L(w,b)=-\frac{1}{m}\sum_{i=1}^{m}\Big[ y^{(i)}\log \hat{p}^{(i)}+(1-y^{(i)})\log (1-\hat{p}^{(i)}) \Big] L(w,b)=−m1i=1∑m[y(i)logp^(i)+(1−y(i))log(1−p^(i))]
    其中 p^(i)\hat{p}^{(i)}p^(i) 是模型给出的正类概率。

2.2 目标函数

训练的真正目标是 最小化 损失函数:

min⁡w,b  L(w,b) \min_{w,b}\; L(w,b) w,bminL(w,b)

这一步骤叫做 优化(Optimization)。

3. 梯度下降------最小化的"手推车"

假设我们已经把损失函数写好了,如何让 w,bw,bw,b 变得更好呢?

答案是 梯度下降(Gradient Descent)。

3.1 梯度是什么?

梯度是一个向量,记录了损失函数在每个参数方向上的变化率。

  • 方向:损失 增加 的方向。
  • 方向相反:损失 减少 的方向。

如果把损失函数画成一座山,梯度就是指向山顶的坡度,而我们想去山脚。

3.2 梯度下降公式

给定当前参数 (w,b)(w,b)(w,b),梯度 ∇L\nabla L∇L 指向损失增大的方向,沿着负梯度方向更新参数:

w←w−η∂L∂w,b←b−η∂L∂b w \leftarrow w - \eta \frac{\partial L}{\partial w}, \qquad b \leftarrow b - \eta \frac{\partial L}{\partial b} w←w−η∂w∂L,b←b−η∂b∂L

  • η>0\eta>0η>0 是 学习率(Learning Rate),决定每一步走多远。
  • ∂L∂w\frac{\partial L}{\partial w}∂w∂L 是梯度的分量,说明如果把 www 变一点,损失会怎样变化。

3.3 学习率的意义

  • 太大:可能越过最优点,甚至发散(跌得太快)。
  • 太小:收敛速度慢,训练时间长。

常见做法:

  • 固定学习率(最简单)。
  • 学习率衰减(每过一段时间减小)。
  • 自适应优化器(如 Adam、RMSProp)自动调整学习率。

3.4 计算梯度的技巧

对线性回归来说,梯度可以直接推导:

∂L∂wj=2m∑i=1m(y^(i)−y(i))xj(i) \frac{\partial L}{\partial w_j} = \frac{2}{m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})x_j^{(i)} ∂wj∂L=m2i=1∑m(y^(i)−y(i))xj(i)

∂L∂b=2m∑i=1m(y^(i)−y(i)) \frac{\partial L}{\partial b} = \frac{2}{m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)}) ∂b∂L=m2i=1∑m(y^(i)−y(i))

在深度学习里,梯度往往借助 链式法则 (Chain Rule)和 反向传播(Backpropagation)逐层算。

4. 批量、随机与小批量

在梯度下降里,每一次迭代我们都需要计算梯度。

如果用全部 mmm 个样本来算梯度,叫做 批量梯度下降(Batch GD)。

  • 优点:梯度方向更准确。
  • 缺点:每步耗时很久,尤其是大数据。

为此我们引入两种改进策略:

方式 说明 适用场景
随机梯度下降(SGD) 每次只拿一个样本来更新(或者用 1 条样本做梯度) 训练数据量极大,计算资源有限
小批量梯度下降(Mini‑batch GD) 每次拿 (b) 条样本(典型 32、64、128 条)来估计梯度 常规深度学习训练,兼顾速度与准确性

SGD 里的梯度不再是精确的方向,而是一个噪声估计。 这就像我们在爬山时,只看眼前的小石块,偶尔会走到错路,但总体还是能往下走。

小批量的做法在保持梯度方向相对准确的同时,显著提升了训练效率。

5. 目标函数的形状------凸与非凸

训练的效果很大程度取决于损失函数的几何形状。

5.1 凸函数

如果损失函数在整个参数空间是 的,意味着:

  • 任何两点连线都位于函数曲面之上。
  • 所有局部最小点其实都是全局最小点。

对线性回归(MSE)来说,损失是一个二次函数,满足凸性。

这就是单层线性回归可以用 解析解 直接求得最优参数的原因:

w∗=(XTX)−1XTy w^*=(X^TX)^{-1}X^Ty w∗=(XTX)−1XTy

这里 XXX 是特征矩阵,XTX^TXT 是转置。

但当模型变复杂(如多层网络、非线性激活)后,损失往往变成 非凸 的,存在多个局部最小点,梯度下降只能找到其中一个。

5.2 非凸情况的挑战

  • 局部最优:梯度下降可能停在一个不全对的点。
  • 梯度消失/爆炸:在深层网络里,梯度随层数递归时会变得极小或极大。

解决办法:

  • 初始化技巧(比如 Xavier、He 初始化)。
  • 正则化(L1、L2)平滑曲面。
  • 归一化特征(Feature Scaling)让不同维度的梯度同等重要。
  • 使用更复杂的优化器(Adam 等)来避免梯度消失/爆炸。

6. 正则化------让模型更稳健

正则化是给损失函数额外添加一项,让模型的参数不要"太大",从而抑制过拟合。

Lreg(w,b)=L(w,b)+λR(w) L_{\text{reg}}(w,b)=L(w,b)+\lambda R(w) Lreg(w,b)=L(w,b)+λR(w)

  • L2 正则(Ridge)

R(w)=12∑j=1nwj2 R(w)=\frac{1}{2}\sum_{j=1}^{n}w_j^2 R(w)=21j=1∑nwj2

  • L1 正则(Lasso)

R(w)=∑j=1n∣wj∣ R(w)=\sum_{j=1}^{n}|w_j| R(w)=j=1∑n∣wj∣

λ>0\lambda>0λ>0 控制正则的强度。

  • L2 让权重趋向 0,但不为 0;
  • L1 还能让某些权重直接变为 0,从而实现特征选择。

7. 训练流程总结

把之前的所有元素放在一起,完整的训练流程是:

  1. 定义模型
    y^(i)=f(x(i);w,b) \hat{y}^{(i)}=f(x^{(i)};w,b) y^(i)=f(x(i);w,b)
  2. 构造损失
    L(w,b)=1m∑i=1mℓ(y^(i),y(i)) L(w,b)=\frac{1}{m}\sum_{i=1}^{m} \ell(\hat{y}^{(i)},y^{(i)}) L(w,b)=m1i=1∑mℓ(y^(i),y(i))
  3. 计算梯度
    ∇w,bL \nabla_{w,b} L ∇w,bL
  4. 参数更新 (梯度下降)
    w←w−η∂L∂w,b←b−η∂L∂b w \leftarrow w - \eta \frac{\partial L}{\partial w},\quad b \leftarrow b - \eta \frac{\partial L}{\partial b} w←w−η∂w∂L,b←b−η∂b∂L
  5. 重复 直到停止准则(比如迭代次数、损失变化阈值、验证集性能不再提升)。

下面我们把这五个步骤用一段 完整的"线性回归"示例 展示出来。

8. 线性回归的训练流程

步骤 说明 关键公式
1. 参数初始化 给 w,bw,bw,b 设定初始值(常常设为 0 或随机小数) w(0)=0,  b(0)=0w^{(0)}=\mathbf{0},\; b^{(0)}=0w(0)=0,b(0)=0
2. 预测 用当前参数计算所有样本的预测值 y^(i)=wTx(i)+b\hat{y}^{(i)}=w^Tx^{(i)}+by^(i)=wTx(i)+b
3. 损失 计算当前预测误差 L=1m∑i(y^(i)−y(i))2L=\frac{1}{m}\sum_{i}(\hat{y}^{(i)}-y^{(i)})^2L=m1∑i(y^(i)−y(i))2
4. 梯度 计算梯度(对每个 wjw_jwj 和 bbb) ∂L∂wj=2m∑i(y^(i)−y(i))xj(i)\frac{\partial L}{\partial w_j}=\frac{2}{m}\sum_i(\hat{y}^{(i)}-y^{(i)})x_j^{(i)}∂wj∂L=m2∑i(y^(i)−y(i))xj(i); ∂L∂b=2m∑i(y^(i)−y(i))\frac{\partial L}{\partial b}=\frac{2}{m}\sum_i(\hat{y}^{(i)}-y^{(i)})∂b∂L=m2∑i(y^(i)−y(i))
5. 更新 按负梯度方向移动参数 w(t+1)=w(t)−η∂L∂ww^{(t+1)}=w^{(t)}-\eta\frac{\partial L}{\partial w}w(t+1)=w(t)−η∂w∂L; b(t+1)=b(t)−η∂L∂bb^{(t+1)}=b^{(t)}-\eta\frac{\partial L}{\partial b}b(t+1)=b(t)−η∂b∂L
6. 循环 重复 2--5 直到停止 迭代次数 TTT,或 ΔL<ϵ\Delta L<\epsilonΔL<ϵ

8.1 细化示例:房价预测

  • 特征 :x=(面积,卧室数,房龄)x=(\text{面积,卧室数,房龄})x=(面积,卧室数,房龄)。
  • 标签 :房价 yyy。

假设我们收集了 1000 户房子,每户有 3 个特征。

  1. 把所有 x(i)x^{(i)}x(i) 放进 XXX 矩阵,yyy 放进 YYY。
  2. 初始化 w=(0,0,0),b=0w=(0,0,0), b=0w=(0,0,0),b=0。
  3. 迭代 500 次,每次更新 w,bw,bw,b。
  4. 训练结束后,使用测试集验证 MSE。

这整个过程就是:

  • 损失函数只用算式表达,
  • 梯度用偏导数给出,
  • 参数更新用微积分的"走梯度"公式实现。

9. 进一步:多层网络与反向传播

在线性回归之外,最常见的深度学习模型是 多层感知机(MLP):

h(1)=σ1(W(1)x+b(1))h(2)=σ2(W(2)h(1)+b(2))    ⋮y^=σL(W(L)h(L−1)+b(L)) \begin{aligned} h^{(1)} &= \sigma_1(W^{(1)}x+b^{(1)})\\ h^{(2)} &= \sigma_2(W^{(2)}h^{(1)}+b^{(2)})\\ &\;\;\vdots\\ \hat{y} &= \sigma_L(W^{(L)}h^{(L-1)}+b^{(L)}) \end{aligned} h(1)h(2)y^=σ1(W(1)x+b(1))=σ2(W(2)h(1)+b(2))⋮=σL(W(L)h(L−1)+b(L))

  • σk\sigma_kσk 是激活函数(ReLU、tanh 等)。
  • W(k),b(k)W^{(k)},b^{(k)}W(k),b(k) 是第 kkk 层的权重和偏置。

9.1 损失函数

对于回归仍用 MSE,分类用交叉熵。

损失是 y^\hat{y}y^ 与 yyy 的差异。

9.2 反向传播(Backpropagation)

我们需要计算所有层参数的梯度。

链式法则给出:

∂L∂W(k)=∂L∂h(k)∂h(k)∂W(k) \frac{\partial L}{\partial W^{(k)}} = \frac{\partial L}{\partial h^{(k)}} \frac{\partial h^{(k)}}{\partial W^{(k)}} ∂W(k)∂L=∂h(k)∂L∂W(k)∂h(k)

下面给出一个简化的公式:

δ(k)=((W(k+1))Tδ(k+1))⊙σk′(a(k)) \delta^{(k)} = \big((W^{(k+1)})^T \delta^{(k+1)}\big)\odot \sigma_k'(a^{(k)}) δ(k)=((W(k+1))Tδ(k+1))⊙σk′(a(k))

  • δ(k)\delta^{(k)}δ(k) 是第 kkk 层的误差项,
  • a(k)=W(k)h(k−1)+b(k)a^{(k)}=W^{(k)}h^{(k-1)}+b^{(k)}a(k)=W(k)h(k−1)+b(k) 是线性输入,
  • ⊙\odot⊙ 表示逐元素乘积。

最终梯度为:

∂L∂W(k)=δ(k)(h(k−1))T,∂L∂b(k)=δ(k) \frac{\partial L}{\partial W^{(k)}} = \delta^{(k)} (h^{(k-1)})^T,\qquad \frac{\partial L}{\partial b^{(k)}} = \delta^{(k)} ∂W(k)∂L=δ(k)(h(k−1))T,∂b(k)∂L=δ(k)

这套公式就是 反向传播 的数学核心。

9.3 梯度下降更新

与线性回归一样,使用负梯度更新所有层的参数:

W(k)←W(k)−η∂L∂W(k),b(k)←b(k)−η∂L∂b(k) W^{(k)} \leftarrow W^{(k)}-\eta\frac{\partial L}{\partial W^{(k)}},\quad b^{(k)} \leftarrow b^{(k)}-\eta\frac{\partial L}{\partial b^{(k)}} W(k)←W(k)−η∂W(k)∂L,b(k)←b(k)−η∂b(k)∂L

10. 训练的收敛与性能评估

训练完成后我们用 验证集测试集 来评估模型性能。

常见指标有:

指标 公式 用途
MSE 1m∑i(y^(i)−y(i))2\frac{1}{m}\sum_i(\hat{y}^{(i)}-y^{(i)})^2m1∑i(y^(i)−y(i))2 回归任务
MAE 1m∑i∣y^(i)−y(i)∣\frac{1}{m}\sum_i |\hat{y}^{(i)}-y^{(i)} |m1∑i∣y^(i)−y(i)∣ 对异常值更鲁棒
交叉熵 −1m∑i[ylog⁡p^+(1−y)log⁡(1−p^)]-\frac{1}{m}\sum_i[y\log\hat{p}+(1-y)\log(1-\hat{p})]−m1∑i[ylogp^+(1−y)log(1−p^)] 分类任务
准确率 预测正确数m\frac{\text{预测正确数}}{m}m预测正确数 分类评估

如果验证集指标在训练后不再提升,通常会提前停止(Early Stopping),这是一种基于数学的停止准则。

11. 学习率与自适应学习率

学习率 η\etaη 是训练中的核心超参数。

  • 小 η\etaη:梯度下降步长小,训练慢但更稳。
  • 大 η\etaη:步长大,可能越过最优点。

自适应学习率优化器如 Adam 在每个参数上维护自己的学习率:

mt=β1mt−1+(1−β1)gt,vt=β2vt−1+(1−β2)gt2 m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t,\quad v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 mt=β1mt−1+(1−β1)gt,vt=β2vt−1+(1−β2)gt2

  • gt=∇Lg_t=\nabla Lgt=∇L 是当前梯度。
  • m^t=mt1−β1t\hat{m}_t=\frac{m_t}{1-\beta_1^t}m^t=1−β1tmt,v^t=vt1−β2t\hat{v}_t=\frac{v_t}{1-\beta_2^t}v^t=1−β2tvt。
  • 更新公式

θt+1=θt−ηm^tv^t+ϵ \theta_{t+1} = \theta_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θt+1=θt−ηv^t +ϵm^t

这过程:

  • 用指数衰减的移动平均代替直接梯度,
  • 通过分母平滑避免梯度震荡。

12. 训练的收敛性与理论证明

损失下,梯度下降的收敛速度可以用梯度 Lipschitz 常数 LLL 估算:

LLip=max⁡ eigenvalue(XTX) L_{\text{Lip}} = \max \text{ eigenvalue}(X^TX) LLip=max eigenvalue(XTX)

如果 η<2LLip\eta < \frac{2}{L_{\text{Lip}}}η<LLip2,梯度下降收敛至全局最优。

非凸 情况下,理论上只能证明 局部收敛概率收敛(如 SGD 的随机梯度噪声理论)。

但在实践中,深度网络往往能够得到相对好的解,因为:

  • 参数空间维度大,局部最小点在表面上"接近",
  • 训练过程的噪声(SGD)能让网络跳出某些局部陷阱。

13. 训练停止准则的数学阈值

我们需要明确什么时候"停止"。

标准 表达式 说明
迭代次数 t=Tt=Tt=T 预设最大迭代数
损失阈值 L<ϵL<\epsilonL<ϵ 损失足够小
损失变化 ∣Lt−Lt−1∣<δ|L_{t}-L_{t-1}|<\delta∣Lt−Lt−1∣<δ 损失变化趋近 0
验证集不提升 Vt−Vt−1<γV_{t}-V_{t-1} < \gammaVt−Vt−1<γ 监控验证集性能

这些都是数值阈值,完全可以在代码中用数学公式实现。

14. 小结

在机器学习中,训练是一个数学优化问题:

  • 模型 用函数 f(x;θ)f(x;\theta)f(x;θ) 表示,
  • 损失 用目标函数 ℓ(y^,y)\ell(\hat{y},y)ℓ(y^,y) 计算,
  • 梯度 用偏导数 ∇θL\nabla_{\theta} L∇θL 给出,
  • 参数更新 用微积分的"负梯度步进"公式实现,
  • 正则化特征归一化 等技术保证曲面更好。

所有这些步骤都可以在数学推导里得到完整的闭式或迭代式表达,如果把整个训练流程写成一连串的 公式与变量 ,并使用微积分 (偏导、链式法则)与线性代数(矩阵运算、逆矩阵)来实现,就能得到一个完整的训练过程。

相关推荐
字节高级特工2 小时前
蓝耘智算与DeepSeekR1:低成本高能AI模型
c++·人工智能·机器学习·计算机视觉
铮铭2 小时前
【论文阅读】GR00T N1:面向通用人形机器人的开放基础模型
人工智能·机器人
铮铭2 小时前
【论文阅读】AutoDrive-R^2: 激励自动驾驶VLA模型的推理与自我反思能力
论文阅读·人工智能·自动驾驶
zyplayer-doc2 小时前
知识库新增三方应用AI问答,新增标签管理,集成Excalidraw,重构全文检索,zyplayer-doc 2.5.4 发布啦!
人工智能·编辑器·全文检索·飞书·企业微信·开源软件·有道云笔记
淘源码d2 小时前
医院不良事件管理系统:提升医疗安全的智能化解决方案
大数据·数据库·人工智能·源码·医疗安全·不良事件管理
阿里云大数据AI技术2 小时前
阿里云 PAI 携手 NVIDIA 提供端到端物理 AI 解决方案
人工智能·nvidia
allione2 小时前
Spring-AI简单实践
java·人工智能·spring
jie*2 小时前
小杰机器学习(seven)——贝叶斯分类
人工智能·python·深度学习·神经网络·机器学习·分类·scikit-learn
一点一木3 小时前
PromptPilot 发布:AI 提示词工程化新利器,首月零元体验
大数据·人工智能·prompt