尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

训练流程中的功能组件 - 优化器

训练流程中的功能组件 - 优化器
📅 发布时间:2026/7/12 19:49:09

训练流程中的功能组件 - 优化器

flyfish

真实规律是y = 2x + 3,我们给数据加一点噪声。模型只有 2 个可学习参数:权重w和偏置b。训练的目标就是让模型自动学到 w,b
优化器主要是接收反向传播算出的梯度,按照自身算法规则更新模型的可学习参数(权重、偏置),驱动损失函数持续下降。

importtorch# --------------------------# 1. 准备训练数据# --------------------------# 生成100个x样本,从0到10均匀分布x=torch.linspace(0,10,100).reshape(-1,1)# 真实值 y = 2x + 3,加一点随机噪声模拟真实数据y_true=2*x+3+torch.randn_like(x)*0.5# --------------------------# 2. 初始化可学习参数 + 超参数# --------------------------# 随机初始化w和b,requires_grad=True 表示需要对它们求梯度w=torch.randn(1,requires_grad=True)b=torch.randn(1,requires_grad=True)learning_rate=0.01# 学习率epochs=200# 训练总轮数# --------------------------# 3. 训练循环(手动实现优化器)# --------------------------forepochinrange(epochs):# 1前向传播:输入x,算出预测值y_pred=w*x+b#2 计算损失:均方误差(预测值和真实值的差的平方,取平均)loss=torch.mean((y_pred-y_true)**2)# 3 反向传播:自动算出w和b的梯度,存在 w.grad 和 b.grad 里loss.backward()# ==================================================# 这里就是优化器的逻辑# ==================================================# 关闭梯度追踪,只做纯数值更新,避免生成计算图浪费资源withtorch.no_grad():# 核心更新公式:新参数 = 旧参数 - 学习率 × 梯度w-=learning_rate*w.grad b-=learning_rate*b.grad# 梯度清零:把w.grad和b.grad重置为0,避免下一轮累加旧梯度w.grad.zero_()b.grad.zero_()# ==================================================# 每20轮打印一次结果if(epoch+1)%40==0:print(f"轮次{epoch+1:3d}| 损失:{loss.item():.4f}| w={w.item():.4f}| b={b.item():.4f}")# 训练结束看最终结果print(f"\n训练完成:最终w={w.item():.4f},最终b={b.item():.4f}")print("真实值:w=2,b=3")

代码中,with torch.no_grad()里的两行 + 梯度清零,是最基础的随机梯度下降(SGD)优化器的功能。

它做两件事:

  1. 参数更新(对应PyTorch的optimizer.step())
    按照固定公式新参数 = 旧参数 - 学习率 × 梯度,逐个更新所有可学习参数。
    梯度告诉我们参数往哪个方向调能让损失变小,学习率控制调多大幅度。

  2. 梯度清零(对应PyTorch的optimizer.zero_grad())
    PyTorch 默认会累加梯度,每轮更新完必须手动清零,否则下一轮的梯度会叠加上旧值,导致更新完全错误。

优化器就是参数更新规则的封装。

使用PyTorch自带的torch.optim实现

importtorch# 数据和参数初始化和上面完全一样x=torch.linspace(0,10,100).reshape(-1,1)y_true=2*x+3+torch.randn_like(x)*0.5w=torch.randn(1,requires_grad=True)b=torch.randn(1,requires_grad=True)learning_rate=0.01epochs=200# SGD优化器:把所有参数交给它管理optimizer=torch.optim.SGD([w,b],lr=learning_rate)forepochinrange(epochs):y_pred=w*x+b loss=torch.mean((y_pred-y_true)**2)# 对应手动的 w.grad.zero_(); b.grad.zero_()optimizer.zero_grad()# 反向传播算梯度loss.backward()# 对应手动的 w -= lr*w.grad; b -= lr*b.gradoptimizer.step()if(epoch+1)%40==0:print(f"轮次{epoch+1:3d}| 损失:{loss.item():.4f}| w={w.item():.4f}| b={b.item():.4f}")

省去了逐个参数手写更新、逐个清零的麻烦
可以把epoch加大看效果

轮次40|损失:0.8172|w=2.2211|b=1.5349轮次80|损失:0.6443|w=2.1822|b=1.7936轮次120|损失:0.5282|w=2.1504|b=2.0055轮次160|损失:0.4503|w=2.1243|b=2.1792轮次200|损失:0.3979|w=2.1029|b=2.3215

在单轮训练迭代中,优化器的执行逻辑:

  1. 接收梯度输入:获取由反向传播算法计算得到的损失函数对各参数的一阶导数(梯度)∇L(θ)\nabla L(\boldsymbol{\theta})∇L(θ),该信息指明了参数空间中损失上升最快的方向与速率。
  2. 计算参数更新量:基于当前梯度、历史梯度状态与预设超参数,计算每个参数的更新方向与步长,生成参数更新向量Δθ\Delta\boldsymbol{\theta}Δθ。这是优化器的核心功能,不同优化算法的差异均体现于此:
    基础随机梯度下降(SGD)仅以全局学习率对梯度做线性缩放,即Δθ=−η⋅∇L(θ)\Delta\boldsymbol{\theta} = -\eta \cdot \nabla L(\boldsymbol{\theta})Δθ=−η⋅∇L(θ),所有参数共享统一的步长缩放系数;
    自适应优化器(如Adam)会额外维护每个参数的梯度一阶矩(动量)与二阶矩(波动幅度)统计量,为每个参数动态适配更新步长,在梯度波动剧烈的维度收窄步长以抑制震荡,在梯度平缓的维度放大步长以加速收敛。
  3. 执行参数更新与状态维护:按照θ←θ+Δθ\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \Delta\boldsymbol{\theta}θ←θ+Δθ更新所有可学习参数的数值;同时清零参数的梯度缓存,避免迭代间梯度累加导致更新偏差,并更新优化算法所需的历史状态变量,供后续迭代使用。

相关新闻

  • 第四章 下文推断题
  • Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
  • 从安装到精通:lisa.py完整使用手册,让AI成为你的调试助手

最新新闻

  • 植物基导电 / 储能轻量化生物材料(新能源高端蓝海)
  • Midjourney材质渲染失效案例深度复盘(皮革开裂、玻璃失真、毛发糊成一片的底层机制)
  • 出手字画无需处处提防,丰宝斋公道估价以诚相待 - 深鉴新闻
  • 为什么87%的心理咨询师不敢用ChatGPT写记录?——基于213份真实案例的合规性压力测试报告(附可下载自查清单)
  • 数据结构基础hw9判断选择题、hw7编程题、hw12编程题
  • SageAttention:如何在不损失精度的前提下实现2-5倍注意力机制加速

日新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号