动手学深度学习(李沐)笔记:基础优化方法(Optimization Basics)
训练神经网络本质上是在做一件事最小化损失函数其中 (\theta) 是模型参数权重、偏置等。优化算法决定了你怎么更新参数(\eta) 是学习率learning rate(g) 是梯度或其变体。这篇把李沐常讲的“基础优化方法”按直觉 公式 PyTorch 用法 常见坑梳理一遍。1. 为什么需要“优化算法”因为深度学习的损失函数通常维度极高百万/十亿参数非凸有山谷、鞍点、噪声数据量大无法每一步用全量数据所以最常见策略是小批量随机梯度下降mini-batch SGD。2. 梯度下降家族BGD / SGD / Mini-batch假设损失是样本损失的平均2.1 批量梯度下降Batch GD每步用全部 n 个样本计算梯度稳定但慢。2.2 随机梯度下降SGD每步只用 1 个样本快但抖动大。2.3 小批量 SGDMini-batch SGD每步用一小批 B深度学习默认选择兼顾效率与稳定。更新式最常见3. 学习率lr最重要的超参数没有之一lr 太大loss 震荡、发散lr 太小收敛慢像“挪着走”常见技巧学习率衰减schedule比如训练后期逐步变小实战感受你调参 80% 的时间都在调 lr。4. 动量法Momentum让下降方向“更有惯性”SGD 会在狭长山谷里左右抖动某个方向梯度大来回震动量可以抑制抖动加速沿主方向前进。典型形式直觉方向一致的梯度会累积 → 加速来回震荡的方向会互相抵消 → 稳定PyTorch 用法torch.optim.SGD(params, lr0.1, momentum0.9)5. 自适应学习率方法AdaGrad / RMSProp / Adam这些方法核心思想不同参数用不同“有效学习率”。5.1 AdaGrad越学越“保守”累积平方梯度问题(s_t) 一直增大 → 后期学习率趋近 0 → 可能“提前停滞”。PyTorchtorch.optim.Adagrad(params, lr0.1)5.2 RMSProp解决 AdaGrad 过早衰减把“累积”换成“滑动平均”这样不会无限增大。PyTorchtorch.optim.RMSprop(params, lr0.001, alpha0.99)5.3 Adam动量 RMSProp最常用默认优化器Adam 同时维护一阶矩梯度平均动量二阶矩平方梯度平均自适应 lrPyTorchtorch.optim.Adam(params, lr0.001, betas(0.9, 0.999))经验结论工程常识线性模型/凸问题SGD(momentum) 很强深层网络Adam 作为默认 baseline 很省心最终追极致泛化很多任务会 Adam 预热 → SGD 精调看领域6. 小实验同一线性回归任务对比 SGD vs Momentum vs Adam下面代码跑一个合成线性回归记录每个 epoch 的 loss你写博客可以直接贴输出截图。import torch torch.manual_seed(0) # 数据y Xw b noise n, d 2000, 2 true_w torch.tensor([[2.0], [-3.4]]) true_b 4.2 X torch.randn(n, d) y X true_w true_b torch.randn(n, 1) * 0.01 def train(optim_namesgd, lr0.03, momentum0.9, epochs10, batch_size64): w torch.randn(d, 1, requires_gradTrue) b torch.zeros(1, requires_gradTrue) params [w, b] if optim_name sgd: opt torch.optim.SGD(params, lrlr) elif optim_name momentum: opt torch.optim.SGD(params, lrlr, momentummomentum) elif optim_name adam: opt torch.optim.Adam(params, lr0.001) # Adam 通常更小 lr else: raise ValueError(unknown optimizer) def data_iter(): idx torch.randperm(n) for i in range(0, n, batch_size): j idx[i:ibatch_size] yield X[j], y[j] losses [] for epoch in range(epochs): for Xb, yb in data_iter(): y_hat Xb w b loss ((y_hat - yb) ** 2).mean() / 2 opt.zero_grad() loss.backward() opt.step() with torch.no_grad(): full_loss (((X w b) - y) ** 2).mean().item() / 2 losses.append(full_loss) return losses print(SGD:, train(sgd, lr0.03, epochs8)) print(Momentum:, train(momentum, lr0.03, epochs8)) print(Adam:, train(adam, epochs8))你通常会观察到Momentum 比纯 SGD 更稳、更快Adam 很快把 loss 拉下去对超参数更不敏感7. 常见坑优化器用错导致“训练假努力”忘了清梯度手写更新w.grad.zero_()用优化器opt.zero_grad()学习率不匹配SGD 常用1e-1 ~ 1e-2 ~ 1e-3看任务Adam 常从1e-3起步更稳batch_size 变了但 lr 不调整batch 变大梯度更稳定lr 往往可以适当增大不是绝对但常见loss 降不下去就怪模型先查lr、数据标准化、梯度是否为 None、是否进入no_grad了结语怎么选优化器李沐风格的“够用策略”学习/作业/小项目Adam省心 baseline想要更稳的 SGDSGD momentum经常更泛化lr 是第一优先级调对 lr比换优化器更有效

相关新闻

笨办法学python ex33

笨办法学python ex33

i 0 numbers []while i < 6:print(f"At the top i is [i]")numbers.append(i)i i 1print("Numbers now: ", numbers)print(f"At the bottom i is {i}")print("The numbers: ")for num in numbers:print(num)

2026/5/17 8:33:13 阅读更多 →
记录win下,WPF设置 System.AppUserModel.PreventPinning 属性用于阻止用户将应用程序固定到任务栏

记录win下,WPF设置 System.AppUserModel.PreventPinning 属性用于阻止用户将应用程序固定到任务栏

厣刺誓坷三次握手&#xff1a;在数据传输之前&#xff0c;TCP协议通过三次握手建立连接。客户端与服务器之间交换控制信息&#xff0c;以确保双方都准备好开始数据传输。 客户端发送 SYN 请求。 服务器响应 SYN-ACK 确认。 客户端再发送 ACK 确认&#xff0c;建立连接。 四次挥…

2026/7/3 3:43:58 阅读更多 →
Go 加密性能极限优化实战手册

Go 加密性能极限优化实战手册

这并非夸大其词。在 Go 语言加密性能优化的实践中,很多看似微小的代码调整,确实能带来 20% 甚至更高的性能提升。这些“一行代码”的改动,往往蕴含着对 Go 编译器、内存管理、CPU 指令集乃至操作系统调用的深刻理解。 本文将通过四个实战案例,为你揭示这些神奇的“一行代码…

2026/5/17 8:33:12 阅读更多 →

最新新闻

Service Mesh 策略治理:配置多了,也会变成事故源

Service Mesh 策略治理:配置多了,也会变成事故源

Service Mesh 策略治理&#xff1a;配置多了&#xff0c;也会变成事故源 一、网格配置不是越多越安全 Service Mesh 提供流量治理、mTLS、熔断、重试、限流、镜像流量等能力。能力强是一回事&#xff0c;配置多是另一回事。多个 VirtualService、DestinationRule、Authorizatio…

2026/7/6 0:17:22 阅读更多 →
LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM时间序列预测实战&#xff1a;基于3000期双色球数据的7维序列建模引言&#xff1a;当深度学习遇见概率游戏每次双色球开奖时&#xff0c;那些在彩票站盯着走势图沉思的身影总让人好奇——是否存在某种数学规律能穿透随机性的迷雾&#xff1f;作为数据科学家&#xff0c;我们…

2026/7/6 0:15:20 阅读更多 →
Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战&#xff1a;GazeboRviz 完整流程与 3 个关键配置文件解析当我们需要在仿真环境中验证SLAM算法时&#xff0c;Cartographer与Gazebo的组合提供了一个理想的测试平台。本文将深入探讨如何在ROS Noetic环境下&#xff0c;通过精心配置三个核…

2026/7/6 0:15:20 阅读更多 →
POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析&#xff1a;从 fork/exec 到 72 个系统调用的可移植性实践在跨平台软件开发中&#xff0c;操作系统接口的差异一直是工程师面临的主要挑战之一。POSIX&#xff08;Portable Operating System Interface&#xff09;标准作为Unix-like系统的通用接口规范&…

2026/7/6 0:15:20 阅读更多 →
位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战&#xff1a;从BERT 512到26万token的3种延拓策略当处理长文本序列时&#xff0c;BERT等Transformer模型面临一个根本性限制——位置编码的长度约束。传统BERT模型最多只能处理512个token&#xff0c;这严重制约了其在长文档理解、基因组分析等场景的应用潜力。…

2026/7/6 0:11:20 阅读更多 →
如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击&#xff1a;AutoClicker鼠标自动化完全指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 还在为每天重复的鼠标点击任务感到疲惫吗…

2026/7/6 0:11:20 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性&#xff1a;5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域&#xff0c;单元测试是保证代码质量的重要环节。当应用涉及数据库操作时&#xff0c;测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南&#xff1a;用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南&#xff1a;告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1a;下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻