梯度下降法数学理解
1、数学梯度下降法
目标:求函数 f(x)=x2的最小值。
我们知道最小值在 x=0 处,但梯度下降法不需要知道这个,它会自己找到。
步骤:
初始位置:随便取 x=4
学习率(步长):η=0.1
梯度:f′(x)=2x。梯度的反方向就是 −2x
更新公式:xnew=x−η⋅f′(x)=x−0.1×(2x)=x−0.2x=0.8x
迭代过程:
第0步:x=4
第1步:x=0.8×4=3.2
第2步:x=0.8×3.2=2.56
第3步:x=0.8×2.56=2.048
第4步:x=1.638
第5步:x=1.310
第6步:x=1.048
第7步:x=0.838
第8步:x=0.671
……
第n步:x 逐渐逼近 0
结论:梯度下降法每次沿着“负梯度方向”更新 x,使函数值 f(x)=x2不断下降,最终收敛到最小值点 x=0。
2、神经网络中使用梯度下降法
整个过程可以拆成 4 步:
1. 定义损失函数
假设一个神经网络做分类任务,最后一层输出预测值 y^,真实标签是 y。
定义一个损失函数 LL(比如交叉熵损失或均方误差),用来衡量预测与真实之间的差距。
目标:找到网络中的所有权重 W 和偏置 b,使 LL最小。
2. 前向传播(Forward)
输入一个 batch 的样本,数据从输入层依次经过各层(线性变换 + 激活函数),一直传到输出层,得到预测值 y^。
同时,每一层的中间结果(激活值、加权和)需要保存下来,供后面反向传播使用。
实际训练中的循环
整个流程是迭代的:
Repeat:
随机取一个 mini-batch 的数据
前向传播计算损失
反向传播计算每个参数的梯度
用梯度下降(或其变体,如SGD、Adam)更新参数,Until损失收敛或达到指定迭代次数
总结:
模型先随机给定w值和b值,然后让模型能得到一个预测值,然后用1/2(y*-y)*(y*-y),得到损失。
然后连用链式求导法,逐渐反推出w值和b值。不断地训练模型,不断地更新w和b,直到损失趋于平稳,把模型放到验证集上去验证模型的泛化能力。然后判断是否需要减小或者增大学习率来再次对模型进行训练。
3、损失曲线看模型训练结果
| 现象 | 可能原因 | 是否正常 |
|---|---|---|
| 损失下降过早平坦(如第 2 个 epoch 就平坦,且最终损失值仍然很高) | 学习率过小、模型欠拟合(容量不足)、特征预处理不当 | 不正常,需要调整 |
| 平坦后突然再次下降(阶梯状) | 优化器跳出局部极小值(如 SGD with momentum) | 正常,但需关注是否收敛 |
| 平坦后持续轻微上升 | 过拟合(验证集上更明显)、学习率过大导致震荡 | 不正常,需正则化或降低学习率 |
| 损失平坦但验证损失远高于训练损失 | 过拟合 | 不正常 |
参考链接:
梯度下降法
