神经网络与大语言模型初步 - 第一章 神经网络 6

2026-04-11 11:551阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

1.5 学习率

1.5.1 学习率的影响

学习率 \eta 是训练中最重要的超参数之一(超参数是指人为设定的参数)。我们仍以山谷找谷底为例:

想象一个人站在一片山地上,周围浓雾弥漫,看不清山的地形,而他的目标是走到山的谷底。唯一能做的,通过脚底感知脚下这片地的坡度,然后朝着最陡的下坡方向走一小步。重复这个过程,就可以一步步走到某个低洼处。

梯度下降法就是这个思路:

  • “山地"就是损失函数 \mathcal{L}(\theta) 在参数空间中的"地形”
  • "脚底下的坡度"就是梯度 \nabla_{\theta} \mathcal{L}
  • "朝最陡的下坡方向走一小步"就是参数更新

(当然通过上一节的学习,我们知道,这个例子里的高度,其实就是损失函数的大小

  • 学习率太大:每一步都移动很多,可能直接跨过谷底,在两侧来回震荡,甚至越走越高(发散)
  • 学习率太小:每一步都移动很少,收敛慢,训练时间很大,且容易陷在某个局部低点(类比 极小值 和 最小值)出不来
  • 学习率适中:高度稳步下降,既不震荡也不过慢

1.5.2 学习率衰减与 Warmup

上面讲了,学习率对训练影响很大,需要适中的学习率才能让训练稳定。而一个固定的学习率,很难同时满足训练全程的需求:

  • 训练初期,损失函数较大、梯度方向也不稳定,适合用较大的学习率快速逼近低损失区域
  • 训练后期,已接近较好的解,若学习率仍较大,反而会在最优点附近来回震荡,难以精细收敛,此时需要较小的学习率来微调

(也可以理解为:随着训练的进行,损失函数越来越小,参数变动需要的细粒度越来越高)

因此,实际训练中学习率通常不是固定值,而是随训练进行动态调整,这种策略叫做学习率调度(Learning Rate Schedule)。常见方式有:

固定步数衰减:每隔固定步数乘以一个衰减系数(如每10个epoch学习率乘0.1)(epoch指全部训练数据完整过一遍,马上会讲)

余弦退火(Cosine Annealing):学习率按余弦曲线从大到小变化(这里不细讲,感兴趣的uu可以自行查阅资料)

Warmup:训练初期先用很小的学习率,逐步升到目标值,再开始衰减

注:Warmup 是目前LLM领域中最常用的策略之一

1.6 不同方式的的梯度下降

(叫“不同方式”感觉有些不严谨,但暂时没想到更好的表述,先这样吧)

之前讲梯度下降更新公式,梯度是对训练集全集(用了 N 个样本)求的,每算一次梯度就要遍历一遍训练集。可以想见,当 N 非常大时,计算开销极大,而且中途无法看到模型训练效果。为避免这种情况,实际训练中常用以下三种变体:

  1. 批量梯度下降(Batch Gradient Descent, BGD):每次用全部训练数据计算梯度再更新。梯度估计准确,但数据量大时计算太慢。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD):每次只用1个样本计算梯度并更新。更新频率高,但梯度噪声大,更新方向不稳定。
  3. 小批量梯度下降(Mini-batch Gradient Descent):每次随机抽一个小批量 B 个样本计算梯度并更新,兼顾计算效率和梯度质量,是实际训练中最常用的方式。

小批量梯度下降的更新公式为:

\theta \leftarrow \theta - \eta \cdot \frac{1}{B}\sum_{i \in \mathcal{B}} \nabla_{\theta} \mathcal{L}^{(i)}(\theta)

其中 \mathcal{B} 是当前小批量的样本集合,B 称为 batch size,常见取值为 32、64、128、256 等。

Batch size 是调整 Mini-batch 和 BGD, SGD的相似程度,size越大,越像 BGD,反之越像 SGD,梯度噪声越大。

注:

  • batch size也并非越大效果就越好,太大了会影响模型的泛化能力
  • 我们平时说的"SGD",大多数情况下指的是 Mini-batch SGD,而非严格意义上每次只用1个样本的随机梯度下降

三个重要概念(Epoch、Iteration、Batch size

这三个概念容易混淆,大家可以看这里分清

  • Epoch:全部训练数据被完整过一遍,称为1个 epoch
  • Iteration(迭代):每用一个 mini-batch 做一次参数更新,称为1次 iteration
  • 若训练集有 N 个样本,batch size 为 B,则1个 epoch 包含 \lceil N/B \rceil 次 iteration
网友解答:
--【壹】--:

好像是刚开始只显示公式源代码,过两秒钟就渲染出来了


--【贰】--:

感谢分享


--【叁】--:

你是指内容上,还是排版上。
如果是排版的话,我这边看能正常渲染;
内容的话,其实就是把之前的 N个 换成了 B(batch size)个 样本做平均;
多看看就会习惯的,加油


--【肆】--:

涨知识了


--【伍】--: Moonie:

\theta \leftarrow \theta - \eta \cdot \frac{1}{B}\sum_{i \in \mathcal{B}} \nabla_{\theta} \mathcal{L}^{(i)}(\theta)

贴主,这些公式完全没有观感


--【陆】--:

关注一手。我在看这类书的时候,在某些点上要想好长时间;想通了之后,自己回过头对看过去的内容做总结,这一步也总是花很长时间,感觉这样效率有点低。请问帖主平时是怎么做这个内容的,学习一下


--【柒】--:

每一步努力都有收获;
可以让ai问答ai总结,比较高效,当然也可以量大管饱多刷几遍/或者大量学相关的东西

标签:人工智能
问题描述:

1.5 学习率

1.5.1 学习率的影响

学习率 \eta 是训练中最重要的超参数之一(超参数是指人为设定的参数)。我们仍以山谷找谷底为例:

想象一个人站在一片山地上,周围浓雾弥漫,看不清山的地形,而他的目标是走到山的谷底。唯一能做的,通过脚底感知脚下这片地的坡度,然后朝着最陡的下坡方向走一小步。重复这个过程,就可以一步步走到某个低洼处。

梯度下降法就是这个思路:

  • “山地"就是损失函数 \mathcal{L}(\theta) 在参数空间中的"地形”
  • "脚底下的坡度"就是梯度 \nabla_{\theta} \mathcal{L}
  • "朝最陡的下坡方向走一小步"就是参数更新

(当然通过上一节的学习,我们知道,这个例子里的高度,其实就是损失函数的大小

  • 学习率太大:每一步都移动很多,可能直接跨过谷底,在两侧来回震荡,甚至越走越高(发散)
  • 学习率太小:每一步都移动很少,收敛慢,训练时间很大,且容易陷在某个局部低点(类比 极小值 和 最小值)出不来
  • 学习率适中:高度稳步下降,既不震荡也不过慢

1.5.2 学习率衰减与 Warmup

上面讲了,学习率对训练影响很大,需要适中的学习率才能让训练稳定。而一个固定的学习率,很难同时满足训练全程的需求:

  • 训练初期,损失函数较大、梯度方向也不稳定,适合用较大的学习率快速逼近低损失区域
  • 训练后期,已接近较好的解,若学习率仍较大,反而会在最优点附近来回震荡,难以精细收敛,此时需要较小的学习率来微调

(也可以理解为:随着训练的进行,损失函数越来越小,参数变动需要的细粒度越来越高)

因此,实际训练中学习率通常不是固定值,而是随训练进行动态调整,这种策略叫做学习率调度(Learning Rate Schedule)。常见方式有:

固定步数衰减:每隔固定步数乘以一个衰减系数(如每10个epoch学习率乘0.1)(epoch指全部训练数据完整过一遍,马上会讲)

余弦退火(Cosine Annealing):学习率按余弦曲线从大到小变化(这里不细讲,感兴趣的uu可以自行查阅资料)

Warmup:训练初期先用很小的学习率,逐步升到目标值,再开始衰减

注:Warmup 是目前LLM领域中最常用的策略之一

1.6 不同方式的的梯度下降

(叫“不同方式”感觉有些不严谨,但暂时没想到更好的表述,先这样吧)

之前讲梯度下降更新公式,梯度是对训练集全集(用了 N 个样本)求的,每算一次梯度就要遍历一遍训练集。可以想见,当 N 非常大时,计算开销极大,而且中途无法看到模型训练效果。为避免这种情况,实际训练中常用以下三种变体:

  1. 批量梯度下降(Batch Gradient Descent, BGD):每次用全部训练数据计算梯度再更新。梯度估计准确,但数据量大时计算太慢。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD):每次只用1个样本计算梯度并更新。更新频率高,但梯度噪声大,更新方向不稳定。
  3. 小批量梯度下降(Mini-batch Gradient Descent):每次随机抽一个小批量 B 个样本计算梯度并更新,兼顾计算效率和梯度质量,是实际训练中最常用的方式。

小批量梯度下降的更新公式为:

\theta \leftarrow \theta - \eta \cdot \frac{1}{B}\sum_{i \in \mathcal{B}} \nabla_{\theta} \mathcal{L}^{(i)}(\theta)

其中 \mathcal{B} 是当前小批量的样本集合,B 称为 batch size,常见取值为 32、64、128、256 等。

Batch size 是调整 Mini-batch 和 BGD, SGD的相似程度,size越大,越像 BGD,反之越像 SGD,梯度噪声越大。

注:

  • batch size也并非越大效果就越好,太大了会影响模型的泛化能力
  • 我们平时说的"SGD",大多数情况下指的是 Mini-batch SGD,而非严格意义上每次只用1个样本的随机梯度下降

三个重要概念(Epoch、Iteration、Batch size

这三个概念容易混淆,大家可以看这里分清

  • Epoch:全部训练数据被完整过一遍,称为1个 epoch
  • Iteration(迭代):每用一个 mini-batch 做一次参数更新,称为1次 iteration
  • 若训练集有 N 个样本,batch size 为 B,则1个 epoch 包含 \lceil N/B \rceil 次 iteration
网友解答:
--【壹】--:

好像是刚开始只显示公式源代码,过两秒钟就渲染出来了


--【贰】--:

感谢分享


--【叁】--:

你是指内容上,还是排版上。
如果是排版的话,我这边看能正常渲染;
内容的话,其实就是把之前的 N个 换成了 B(batch size)个 样本做平均;
多看看就会习惯的,加油


--【肆】--:

涨知识了


--【伍】--: Moonie:

\theta \leftarrow \theta - \eta \cdot \frac{1}{B}\sum_{i \in \mathcal{B}} \nabla_{\theta} \mathcal{L}^{(i)}(\theta)

贴主,这些公式完全没有观感


--【陆】--:

关注一手。我在看这类书的时候,在某些点上要想好长时间;想通了之后,自己回过头对看过去的内容做总结,这一步也总是花很长时间,感觉这样效率有点低。请问帖主平时是怎么做这个内容的,学习一下


--【柒】--:

每一步努力都有收获;
可以让ai问答ai总结,比较高效,当然也可以量大管饱多刷几遍/或者大量学相关的东西

标签:人工智能