AI

神经网络训练参数优化分步流程

·4 分钟阅读·1426 字

神经网络训练参数优化分步流程 的详细笔记

📋 目录

神经网络训练参数优化分步流程

核心概念 神经网络训练参数优化分步流程,涵盖学习率调度、权重初始化、正则化、批归一化等策略。

1. 前置基础

  1. 模型:一堆待学习参数(权重W、偏置b),全部初始随机小数;
  2. 输入:一批训练样本(图片/文本token)+ 真实标签;
  3. 目标:调整所有参数,让模型预测值和真实标签差距最小;
  4. 两大核心过程:前向传播算预测、反向传播算梯度、优化器更新参数。

完整一轮迭代(一个batch)标准5步

2. 步骤1:前向传播 Forward —— 算出预测结果,缓存中间数据

  1. 把一批数据输入模型;
  2. 数据逐层计算:嵌入/线性层→激活函数/多头注意力→输出层;
  3. 得到每个样本的预测值 \hat y;
  4. 框架自动保存每一层的中间计算结果(必须存,反向求导要用);
  5. 根据预测和真实标签,计算损失Loss(交叉熵/MSE)。 这一步不动参数,只算结果和误差。

3. 步骤2:反向传播 Backward —— 自动算出全部参数的梯度向量

  1. 从损失Loss开始,依靠链式法则反向逐层求导
  2. 对每一个参数,算出梯度 g=\frac{\partial L}{\partial w};
  3. 所有梯度组合成一个多维梯度向量 \nabla L,存在参数 .grad 里;
  • 梯度分量正:增大该参数会让损失变大;
  • 梯度分量负:增大该参数会让损失变小;
  1. 梯度向量整体指向「损失上升最快的方向」。 这一步只算梯度,还没修改任何参数

4. 步骤3:优化器更新参数 Optimizer.step()

核心公式:w = w - \eta \cdot g

  1. 学习率 \eta 控制每一步走多远;
  2. 对每一个参数,单独用自身梯度分量更新:
  • 梯度g>0:参数减小;
  • 梯度g<0:参数增大;
  1. 本质:整体沿着负梯度向量平移所有权重,向损失更低的位置移动;
  2. Adam/SGD等优化器会额外处理:动量、自适应学习率、权重衰减等,但核心逻辑不变。

5. 步骤4:清空梯度 Optimizer.zero_grad()

  1. 本轮梯度已经用完,必须清空所有参数的 .grad
  2. 不清空的话,下一轮反向传播梯度会累加,步长爆炸、训练失控。

6. 步骤5:循环,直到收敛

  1. 读取下一个batch数据,重复1~4;
  2. 收敛判断标准:
  • 连续多轮损失几乎不再下降;
  • 梯度向量所有分量无限接近0向量(原点);
  1. 终止训练,保存最终权重。

极简直观小例子(2个参数,方便脑补)

参数 w_1,w_2,学习率 \eta=0.01

  1. 前向算出损失;
  2. 反向得到梯度向量 g=(4, -2);
  3. 更新:
    w_1 = w_1 - 0.01 \times 4
    w_2 = w_2 - 0.01 \times (-2)
  4. 梯度清零,读取下一批数据重复;
  5. 多次迭代后梯度慢慢变成 (0.02,-0.01),接近原点,训练停止。

补充3个关键补充理解

  1. 参数更新是整体同步更新
    不会先改完w1再重新算梯度改w2;所有参数用同一轮算出的梯度一次性全部调整。
  2. 梯度只是“方向路标”,不是优化目标
    我们不直接修改梯度,只修改权重;权重移动后,下一轮会生成全新的梯度向量。
  3. 为什么不能只更新梯度最大的分量?
    梯度向量是全局最优下降方向,丢掉任意维度都会偏离最优路线,收敛变慢。神经网络参数互相耦合,所有维度都需要同步微调。

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro