优化方法:更新模型参数的方法
一、优化方法的核心思想
1. 什么是优化方法
优化方法,指的是一个过程,这个过程的目的就是,寻找模型在所有可能性中达到评估效果指标最好的那一个。换句话说,优化过程就是找到一个状态,这个状态能够让模型的损失函数最小,而这个状态就是模型的权重。[pdf_14]
2. 深度学习三大核心过程
|
|
|
|---|---|
| 模型表示 |
|
| 方法评估 |
|
| 优化方法 |
|
3. 用下山路线规划理解梯度下降
★梯度向量的方向即为函数值增长最快的方向,梯度的反方向则是函数减小最快的方向。
想象你在山顶,需要尽快到达半山腰的卫生间。怎么走最快?每走几步就改变方向,朝着当前最陡峭的方向(即坡度下降最快的方向)行走,并不断重复这个过程。这就是梯度下降的最直观表示。[pdf_14]
二、学习率(Learning Rate)
1. 学习率类比
下山过程中的"步子大小"就是算法中的学习率(learning rate)。
|
|
|
|
|---|---|---|
| 太大 |
|
|
| 太小 |
|
|
| 合适 |
|
|
2. 收敛判断
在实际开发中,如果损失函数在一段时间内没有什么变化,我们就认为是到达了需要的"最低点",就可以认为模型已经训练收敛了,从而结束训练。[pdf_14]
三、三种梯度下降方法
1. 批量梯度下降法(BGD)
核心思想:每次使用全部样本计算梯度并更新参数。
损失函数公式:
其中 m 表示样本数量。
梯度更新公式:
其中 α 为学习率。
特点:所有样本都计算完后整体更新参数,更新方向稳定,但计算量大。[pdf_14]
2. 随机梯度下降法(SGD)
核心思想:每计算一个样本之后就要更新一次参数。
梯度更新公式:
优点:
-
训练速度大幅提升 -
只需要训练集中的一部分数据,就可以实现接近使用全部数据训练的效果
缺点:
-
训练数据中存在错误样本或噪声数据时,优化方向可能偏离理想方向 -
最极端情况下,模型无法得到全局最优,陷入局部最优
总结:SGD 选择了用损失很小一部分精确度和增加一定数量的迭代次数为代价,换取了最终总体的优化效率的提高。[pdf_14]
3. 小批量梯度下降法(MBGD)⭐ 最常用
核心思想:每次使用一个固定数量的数据(batch)进行优化。
batch size:这个固定数量称为 batch size,一般为 2 的 n 次方(如 32、128、512 等)。
|
|
|
|
|---|---|---|
| 越小 |
|
|
| 越大 |
|
|
实践经验:
-
图像任务:batch size 倾向于设置得稍微小一点 -
NLP 任务:可以适当设置得大一些 -
具体数值需要根据项目特点,采用经验或不断尝试的方法去设置[pdf_14]
四、三种梯度下降方法对比
|
|
|
|
|
|
|---|---|---|---|---|
| BGD
|
|
|
|
|
| SGD
|
|
|
|
|
| MBGD
|
|
|
|
|
★Mini-batch 的方法是目前主流使用最多的一种方式。[pdf_14]
五、训练流程的抽象框架
将第11~13节的内容串联起来,深度学习模型训练的最根本、最关键的过程:
# 1. 设置模型
net = LeNet()
# 2. 设置损失函数
criterion = nn.CrossEntropyLoss()
# 3. 设置优化器
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)
# 4. 开始训练
for epoch in range(30): # 训练多个 epoch
for i, data in enumerate(traindata):
inputs, labels = data
# ① 梯度清零
optimizer.zero_grad()
# ② 前向传播:获得模型输出
outputs = net(inputs)
# ③ 计算损失
loss = criterion(outputs, labels)
# ④ 反向传播:计算梯度
loss.backward()
# ⑤ 优化:更新参数
optimizer.step()
五个核心步骤:梯度清零 → 前向传播 → 计算损失 → 反向传播 → 优化更新。[pdf_14]
六、核心要点总结
|
|
|
|---|---|
| 优化方法的目的 |
|
| 梯度下降 |
|
| 学习率(α) |
|
| BGD |
|
| SGD |
|
| MBGD |
|
| batch size |
|
| 训练收敛 |
|
七、每课一练
问题:batch size 越大越好吗?
解答:
不是。 batch size 并非越大越好,需权衡取舍:
-
batch size 太大:
-
训练过程容易一直沿着一个方向走,陷入局部最优 -
泛化能力差 -
可能造成内存溢出(爆显存)
-
-
batch size 太小:
-
每个 batch 之间差异大,梯度震荡严重 -
不利于模型收敛 -
易受噪声数据影响
-
-
最佳实践:
-
采用 mini-batch 方式,根据任务特点选择合适的 batch size -
图像任务偏向小一点,NLP 任务可适当大一些 -
需要通过实验不断尝试来找到合适的值[pdf_14]
-
八、小结
-
优化方法的目的:找到使损失函数最小的模型权重。 -
梯度下降:沿着梯度的反方向更新参数,以最快速度减小损失函数。 -
学习率:控制"步子大小",太大则震荡,太小则太慢。 -
三种梯度下降方法:BGD(全部样本)、SGD(单个样本)、MBGD(小批量样本)。 -
MBGD(小批量梯度下降)是目前使用最多的优化方法。 -
batch size:通常为 2 的 n 次方,不是越大越好,需要权衡收敛速度与泛化能力。 -
训练五步法:梯度清零 → 前向传播 → 计算损失 → 反向传播 → 优化更新。

