news 2026/4/3 5:37:59

大模型教我成为大模型算法工程师之day8: 优化器与训练技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型教我成为大模型算法工程师之day8: 优化器与训练技巧

Day 8: 优化器与训练技巧

摘要:设计好了神经网络架构只是第一步,如何让它“学”好则是另一个关键挑战。本文深入探讨深度学习中的优化器演进(从SGD到AdamW)、学习率调度策略、关键的归一化技术(BN、LN、RMSNorm)以及防止过拟合的正则化手段。


1. 优化器 (Optimizers)

优化器的作用是根据计算出的梯度来更新模型的权重,以最小化损失函数。

1.1 SGD 与 Momentum

SGD (Stochastic Gradient Descent)是最基础的优化算法,每次只随机抽取一部分样本(Batch)计算梯度并更新。
θ t + 1 = θ t − η ⋅ ∇ J ( θ t ) \theta_{t+1} = \theta_t - \eta \cdot \nabla J(\theta_t)θt+1=θtηJ(θt)
其中η \etaη是学习率。

通俗解释:梯度震荡
想象你在滑雪下山,地形是一个狭长的峡谷,左右坡度很陡,但沿着峡谷向下的坡度很缓。

  • SGD的困境:你站在峡谷一侧,SGD只看脚下,觉得“左边好陡”,于是用力向右冲;冲到对面后又觉得“右边好陡”,于是用力向左冲。结果就是你在峡谷两壁之间来回“剧烈横跳”(震荡),大部分力气花在左右移动上,沿着峡谷向下前进的速度反而很慢。
  • Momentum的作用:引入“动量”模拟惯性。当你左右横跳时,惯性会抵消一部分横向的力,保留更多纵向(沿峡谷走向)的速度,让你能平滑地滑向谷底。

Momentum (动量):为了解决SGD在由于梯度方向震荡导致收敛慢的问题,引入了“动量”概念,模拟物理中的惯性。
v t + 1 = γ v t + η ∇ J ( θ t ) v_{t+1} = \gamma v_t + \eta \nabla J(\theta_t)vt+1=γvt+ηJ(θt)
θ t + 1 = θ t − v t + 1 \theta_{t+1} = \theta_t - v_{t+1}θt+1=θtvt+1
动量项γ \gammaγ通常设为 0.9。

1.2 Adam (Adaptive Moment Estimation)

Adam 结合了 Momentum (一阶动量) 和 RMSProp (二阶动量/自适应学习率) 的优点。它为每个参数计算独立的自适应学习率。

  • 一阶动量(均值):m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1) g_tmt=β1mt1+(1β1)gt
  • 二阶动量(方差):v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2vt=β2vt1+(1β2)gt2
  • 偏差修正:m ^ t = m t / ( 1 − β 1 t ) \hat{m}_t = m_t / (1-\beta_1^t)m^t=mt/(1β1t),v ^ t = v t / ( 1 − β 2 t ) \hat{v}_t = v_t / (1-\beta_2^t)v^t=vt/(1β2t)
  • 更新:θ t + 1 = θ t − η m ^ t v ^ t + ϵ \theta_{t+1} = \theta_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}θt+1=θtηv^t+ϵm^t

1.3 AdamW

AdamW是目前大模型训练的主流选择。它解决了 Adam 中权重衰减(L2正则)实现不正确的问题。在 AdamW 中,权重衰减(Weight Decay)直接应用于权重更新步骤,而不是混入梯度计算中,从而实现了与学习率的解耦。

💻 代码实践:PyTorch优化器选择

importtorchimporttorch.nnasnnimporttorch.optimasoptim model=nn.Linear(10,2)# 1. SGD with Momentumoptimizer_sgd=optim.SGD(model.parameters(),lr=0.01,momentum=0.9)# 2. Adamoptimizer_adam=optim.Adam(model.parameters(),lr=0.001)# 3. AdamW (推荐用于Transformer/大模型)optimizer_adamw=optim.AdamW(model.parameters(),lr=0.001,weight_decay=0.01)

2. 学习率调度 (Learning Rate Schedulers)

恒定的学习率往往无法达到最优解。通常策略是:前期Warmup(预热)以稳定梯度,后期Decay(衰减)以精细收敛

2.1 Warmup

在训练初期,由于梯度变化剧烈,使用较大的学习率容易导致模型不稳定。Warmup 策略是在最初的几步(如前5% steps)将学习率从 0 线性增加到预设的最大值。

2.2 Cosine Annealing (余弦退火)

学习率随训练步数按余弦函数曲线下降。相比于阶梯式下降(Step Decay),余弦退火更加平滑,且往往能获得更好的泛化能力。

💻 代码实践:Scheduler

fromtransformersimportget_cosine_schedule_with_warmup# 假设总步数为 1000,预热步数为 100optimizer=optim.AdamW(model.parameters(),lr=1e-3)scheduler=get_cosine_schedule_with_warmup(optimizer,num_warmup_steps=100,num_training_steps=1000)# 在训练循环中# optimizer.step()# scheduler.step()

3. 归一化技术 (Normalization)

归一化旨在解决Internal Covariate Shift (ICS)问题,使各层输入的分布保持稳定,从而加速收敛并允许使用更大的学习率。

通俗解释:Internal Covariate Shift
把深度网络看作一个“流水线工厂”。第 2 层(工人B)习惯处理第 1 层(工人A)传过来的“标准件”。
但随着训练进行,工人 A 的参数在变,传给 B 的产品特性(数据分布)也在不停地变。工人 B 就不得不一直重新适应 A 的变化,导致整个工厂效率极低。
归一化(BN/LN)就像在 A 和 B 之间放了一个“质检员”,不管 A 产出什么,都强行把它标准化(均值0方差1)再给 B。这样 B 就能稳定工作了。

方法适用场景维度 (Input: N, C, H, W)描述
Batch Norm (BN)CNN (CV任务)对 N, H, W 归一化依赖 Batch Size,训练/推理行为不同
Layer Norm (LN)RNN/Transformer (NLP)对 C, H, W 归一化独立于 Batch Size,对序列长度不敏感
RMSNormLLM (如 LLaMA)同 LNLN 的简化版,去除了均值中心化,仅保留缩放,计算更高效

RMSNorm 公式

相比 LayerNorm,RMSNorm (Root Mean Square Layer Normalization) 省略了减去均值的步骤:
x ˉ i = x i RMS ( x ) g i , where RMS ( x ) = 1 n ∑ j = 1 n x j 2 + ϵ \bar{x}_i = \frac{x_i}{\text{RMS}(x)} g_i, \quad \text{where } \text{RMS}(x) = \sqrt{\frac{1}{n} \sum_{j=1}^n x_j^2 + \epsilon}xˉi=RMS(x)xigi,whereRMS(x)=n1j=1nxj2+ϵ


4. 正则化 (Regularization)

为了防止模型过拟合(在训练集表现好,测试集表现差),需要引入正则化。

4.1 Dropout

在训练过程中,随机将一部分神经元的输出置为 0。这相当于训练了无数个子网络的集成,迫使网络不过分依赖某些特定的特征。

类比理解
Dropout 的机制与随机森林 (Random Forest)非常相似。

  • 训练时:每次随机关掉一部分神经元,相当于每次都在训练一个不同的“残缺版”子网络。
  • 推理时:所有神经元全开,相当于把这成百上千个子网络的预测结果做了“加权平均”。
    这种隐式的集成学习 (Ensemble Learning)有效降低了模型的方差,提升了泛化能力。

注:现代大模型训练中,为防止破坏特征,有时会减少Dropout的使用或仅在特定位置使用。

4.2 Weight Decay (L2 正则)

在损失函数中加入权重的平方和惩罚项:L = L d a t a + λ ∣ ∣ w ∣ ∣ 2 L = L_{data} + \lambda ||w||^2L=Ldata+λ∣∣w2。这限制了权重的大小,防止模型过于复杂。

4.3 数据增强 (Data Augmentation)

通过对训练数据进行变换(如图片的翻转、裁剪、颜色变换,文本的掩码、回译等)来增加数据多样性,是提升模型鲁棒性最直接有效的方法。


5. 总结

在深度学习训练中,“炼丹”技巧往往和模型架构一样重要:

  1. 优化器:首选AdamW,它是目前 CV 和 NLP 领域的通用选择。
  2. 学习率:配合Warmup + Cosine Decay策略,能显著提升收敛效果。
  3. 归一化:CNN 用 BN,Transformer/RNN 用 LN 或RMSNorm
  4. 正则化:合理使用 Weight Decay 和 Dropout 防止过拟合。

掌握这些组件的原理与搭配,是训练高性能模型的基础。


参考资料

  • Decoupled Weight Decay Regularization (AdamW Paper)
  • Root Mean Square Layer Normalization
  • PyTorch Optimization Documentation
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 22:34:36

Day23 回归问题与置信区间

浙大疏锦行 pandas.core.frame.DataFrame<class pandas.core.frame.DataFrame> RangeIndex: 20640 entries, 0 to 20639 Data columns (total 10 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 longi…

作者头像 李华
网站建设 2026/3/26 9:02:41

Windows右键菜单终极优化指南:从卡顿到流畅的深度解析

Windows右键菜单终极优化指南&#xff1a;从卡顿到流畅的深度解析 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 当你在Windows系统中点击右键&#xff0c;那个…

作者头像 李华
网站建设 2026/3/25 15:17:36

基于Uniapp + SpringBoot + Vue的动物园导览系统(双端:PC端 + 移动端)

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/3/31 13:37:46

Openresty基础知识详解:轻松驾驭高性能web网关

nginx 采用模块化设计&#xff0c;使得每一个 http 模块可以仅专注于完成一个独立的、简单的功能&#xff0c;而一个请求的完整处理过程可以由无数个 http 模块共同合作完成。为了灵活有效地指定下一个http 处理模块是哪一个&#xff1b;http 框架依据常见的的处理流程将处理阶…

作者头像 李华
网站建设 2026/4/1 21:31:31

TCP半关闭状态分析和skynet对半关闭状态的支持

对半关闭状态进行了解决的有JAVA的netty、skynet开源框架。大多数网络连接程序在read0时即调用close()关闭TCP连接&#xff1b;但是&#xff0c;在read0到调用close()之间&#xff0c;可能还有很多数据需要发送&#xff08;send&#xff09;&#xff0c;如果read0时即调用close…

作者头像 李华
网站建设 2026/3/20 22:26:43

玩转 DeepSeek Markdown 思维导图生成器

首页›玩转 DeepSeek 思维导图生成器 玩转 DeepSeek Markdown 思维导图生成器 从入门到精通&#xff0c;掌握所有使用技巧、高级功能和最佳实践&#xff0c;让你的思维导图制作效率提升 10 倍。本教程涵盖需求输入技巧、模式选择策略、流式输出优化、续写技巧、Markdown 编辑…

作者头像 李华