大规模NN必知必会调参及优化规律

从理论分析入手把握大规模神经网络优化的规律,可以指导实践中的超参数选择。反过来,实践中的超参数选择也可以指导理论分析。本篇文章聚焦于大语言模型,介绍从 GPT 以来大家普遍使用的训练超参数的变化。

规模律研究的是随着神经网络规模的增大,超参数、性能是如何改变的。规模律是对模型、数据、优化器关系的深刻刻画,揭示大模型优化时的普遍规律。通过规模律,我们可以用少量成本在小模型上验证超参数的选择和性能的变化情况,继而外推到大模型上。

在 LLM 中规模性常常变换模型大小和数据规模,进行大量调参而保持优化器不变。故对于大模型优化器而言,规模性是其性能很好的展现(性能上限)。设计更好的优化器(用更少的数据达到相同的性能)就是在挑战现有的规模律。

图片
超参最佳实践
我们首先回顾从 GPT 以来重要文章中使用的超参数,本文将不同模型的超参数列举在下方。首先,除了 Google 的 T5, PaLM 外,其它的模型都是用了 Adam 类的优化器(Adam 或 AdamW)。其次,超参数选择上的更新都是在前人的基础上慢慢变化,并被后续采纳的。这包括使用 dropuout、梯度范数裁剪(Megatron-LM),批量的动态变化(GPT-3),Adam (GPT-3)。

学习率:我们发现随着模型的增大,学习率越来越小。学习率与数据量、批量大小都没有明显的关系,且一般使用 左右的学习率。学习率的变化策略都包括 warmup 和衰减(decay)两阶段。目前普遍使用 GPT-3 中余弦衰减到原学习率的十分之一。谷歌则倾向于使用平方根衰减(优点之一在于不用提前知道训练步数)。

批量大小:训练使用的批量大小随着模型的增大也在不断增大,从 GPT 的 32k、BERT 的 128k,到 GPT-3 的 3.2M、LLaMA 的 4M。值得注意的是,GPT-3 的批量大小是从 32k 开始,在 12B tokens 的训练中逐渐增加到 4M 的,批量大小增加了 125 倍。

OpenAI 在论文中认为随着学习的进行,模型能够承载的批量大小快速增加。而后续很多工作直接使用了更大的批量。这可能是批量增大的过程只占总数据的 2%,即使直接使用最大批量也不会造成太大的问题。

权重衰减 /L2 正则化:在 L2 正则化(或 weight decay)上,GPT 与 BERT 都使用了正则化,后续的模型有些使用而有些没有使用。首先注意到,在 GPT 和 BERT 时代,数据量还是大于模型参数量的(over-parameterized),训练时也是使用多轮训练(multi-epoch)。

而随着人们意识到数据的重要性,数据量已经超越模型的参数量的(GPT3, 680B tokens, 175B params, under-parameterized),训练时也只使用了一轮训练(single-epoch)。根据 [ADV+23] 中的分析,在 over-parameterized 网络中使用 weight decay 相当于对优化器施加了潜在的正则;而在 under-parameterized 网络中,weight decay 只是改变了实际的学习率。随着网络训练权重的变化,相当于施加了自适应的学习率变化策略。

在本文的最后列举了不同模型的超参选择。其中 Adam 括号中的数字代表 ,sch 为学习率调整策略,bs为批量大小,L2 为权重衰减的 权重,init 为初始化方法。

图片
神经网络规模律
神经网络规模律(neural scaling laws)通过廉价的小规模实验来预测大规模模型的表现,从而决定最佳的架构、算法、数据集、超参数等等。从广义上讲所有因素都可以研

### 计算机视觉模型训练的超参数调优与优化策略 在计算机视觉(CV)模型训练中,超参数调优和优化策略对模型性能起着决定性作用。这些策略不仅影响模型的收敛速度,还直接决定了最终的精度和泛化能力。 #### 学习率选择与调度 学习率是影响模型训练过程最关键的超参数之一。过大的学习率可能导致模型无法收敛,而过小的学习率则会显著延长训练时间。实践中,通常采用学习率衰减策略,例如指数衰减、余弦退火等方法来动态调整学习率[^2]。此外,使用自适应优化器如Adam时,其默认学习率(0.001)可以作为起点进行微调。 ```python from torch.optim.lr_scheduler import StepLR # 示例:PyTorch中的学习率调度 optimizer = torch.optim.Adam(model.parameters(), lr=0.001) scheduler = StepLR(optimizer, step_size=30, gamma=0.1) for epoch in range(epochs): train(...) scheduler.step() ``` #### 批量大小(Batch Size)的影响 批量大小直接影响训练效率和内存消耗。较大的批量有助于提高训练稳定性并加快收敛速度,但可能增加显存占用;较小的批量虽然节省资源,但可能会引入噪声,导致训练不稳定。因此,在硬件允许的情况下,应尽可能选择较大的批量,并结合梯度累积技术处理受限于显存大小的情况[^1]。 #### 优化算法的选择 不同优化器适用于不同的任务场景。随机梯度下降(SGD)配合动量项仍然广泛用于图像分类任务,因为它能提供良好的泛化能力;而Adam优化器因其自适应特性,在许多情况下更容易快速收敛。根据任务需求选择合适的优化器是提升模型性能的关键步骤之一[^3]。 #### 正则化技术的应用 正则化技术对于防止过拟合至关重要。L2正则化(权重衰减)通过惩罚大权重值来控制模型复杂度;Dropout 则在训练过程中以一定概率随机忽略部分神经元,从而增强模型的泛化能力。批量归一化(BatchNorm)不仅能加速训练,还能起到一定的正则化效果[^2]。 ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.layers = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3), nn.BatchNorm2d(64), # 批量归一化 nn.ReLU(), nn.Dropout(0.5), # Dropout层 ... ) def forward(self, x): return self.layers(x) ``` #### 损失函数的设计 损失函数的选择应当匹配具体任务目标。例如,交叉熵损失常用于分类任务,而均方误差(MSE)适用于回归问题。对于不平衡数据集,可以考虑使用Focal Loss等改进型损失函数来缓解类别不均衡带来的影响。 #### 数据增强与预处理 数据增强是提升CV模型表现的重要手段之一。通过对输入图像进行旋转、裁剪、颜色变换等操作,不仅可以扩充数据集规模,还能帮助模型更好地捕捉特征不变性。同时,标准化预处理也是必不可少的一步,它有助于加速训练过程并提高模型鲁棒性。 #### 多尺度训练与迁移学习 多尺度训练可以让模型在不同分辨率下学习特征,增强其对尺度变化的适应能力。另一方面,迁移学习利用已在大规模数据集上训练好的模型作为初始化,可大幅减少训练时间和所需数据量,尤其适合小样本任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值