第一阶段-第6天 — 梯度下降初步理解

发布时间:2026/7/22 18:32:18
第一阶段-第6天 — 梯度下降初步理解 今日目标理解梯度下降的直观含义通过山坡比喻理解梯度方向理解学习率的作用能描述训练的整体流程学习内容1. 山坡比喻想象你站在山顶上目标是找到山谷最低点。你脚下最陡的下坡方向 梯度方向的反方向你每一步走多远 学习率你的位置 当前的w和b你脚下的海拔高度 损失值/\ ← 高损失山顶 / \ / \ / \ ← 中等损失 / \ /__________\ ← 低损失山谷最优解2. 梯度是什么梯度是一个向量指向函数增长最快的方向。对于损失函数 L(w, b)梯度 (∂L/∂w, ∂L/∂b)∂L/∂w损失对w的导数告诉w该怎么改∂L/∂b损失对b的导数告诉b该怎么改关键理解梯度指向损失增加的方向 我们要沿着梯度的反方向走才能降低损失3. 学习率的影响importmatplotlib.pyplotasplt# 模拟不同学习率的效果def模拟梯度下降(初始w,学习率,迭代次数):模拟梯度下降过程w初始w 轨迹[w]for_inrange(迭代次数):# 简化模拟每次向最优值0.5靠近梯度2*(w-0.5)# 假设最优w0.5ww-学习率*梯度 轨迹.append(w)return轨迹# 三个不同的学习率小学习率模拟梯度下降(2.0,0.05,20)# 走得很慢中学习率模拟梯度下降(2.0,0.15,20)# 适中大学习率模拟梯度下降(2.0,0.30,20)# 可能震荡print(小学习率轨迹:,[f{v:.3f}forvin小学习率[:6]])print(中学习率轨迹:,[f{v:.3f}forvin中学习率[:6]])print(大学习率轨迹:,[f{v:.3f}forvin大学习率[:6]])输出示例小学习率轨迹: [2.000, 1.850, 1.708, 1.574, 1.447, 1.327] 中学习率轨迹: [2.000, 1.700, 1.377, 1.080, 0.818, 0.594] 大学习率轨迹: [2.000, 1.400, 0.560, -0.448, 0.358, -0.189]可以看到小学习率稳定但缓慢中学习率快速收敛大学习率可能越过最优值来回震荡4. 训练的整体流程第1步初始化参数随机选一组w和b ↓ 第2步前向计算用当前参数做预测 ↓ 第3步计算损失预测和真实的差距 ↓ 第4步计算梯度告诉参数该怎么改 ↓ 第5步更新参数沿着梯度反方向走一步 ↓ 重复第2-5步直到损失足够小5. 伪代码# 初始化w随机值 b随机值 学习率0.01# 训练循环for轮次inrange(总轮次):# 前向计算预测值w*输入b# 计算损失损失均方误差(预测值,真实值)# 计算梯度梯度_w损失对w的导数 梯度_b损失对b的导数# 更新参数ww-学习率*梯度_w bb-学习率*梯度_b# 记录进度if轮次%1000:print(f轮次{轮次}: 损失{损失:.4f}, w{w:.4f}, b{b:.4f})今日练习练习1模拟梯度下降# 假设我们要最小化 f(w) (w - 3)²# 最优解是 w 3deff(w):return(w-3)**2deff_gradient(w):f(w) (w-3)² 的导数是 2*(w-3)return2*(w-3)w0# 从w0开始learning_rate0.1print(开始梯度下降:)foriinrange(10):gradientf_gradient(w)print(f 迭代{i}: w{w:.4f}, f(w){f(w):.4f}, 梯度{gradient:.4f})ww-learning_rate*gradientprint(f\n最终w{w:.4f}, 最优解应该是3.0)练习2理解学习率的边界# 学习率太大会发生什么w0lr1.0# 非常大的学习率print(学习率过大时的震荡:)foriinrange(10):gradient2*(w-3)old_ww ww-lr*gradientprint(f 迭代{i}: w从{old_w:.2f}跳到{w:.2f}, 梯度{gradient:.2f})验收标准能用山坡比喻解释梯度下降能说出梯度指向什么方向能解释学习率太大和太小的后果能描述完整的训练流程