趋近智
虽然静态数据混合为训练提供了一个固定的方案,但大型语言模型可能会从更具动态性的数据呈现方式中获益,这就像课程指导学习一样。我们不是在整个训练过程中都以相同比例馈送数据源,而是可以随着时间动态调整混合比例或采样过程本身。这就是数据步进和退火调度的主要思想。这些方法旨在通过控制数据集不同部分的何时以及如何被着重处理来改善学习过程。
数据步进是指在训练过程中控制模型接触不同子集或类型数据的速度。可以将其视为根据模型的学习进展来管理信息流。例如,你可能主要从高质量、精心整理的语料库开始训练,以打下扎实的语言理解基础。随着训练的进行,模型能力增强,你可以逐渐增加来自噪声较大的数据源(如网页抓取数据)或特定类别数据(如代码库)的比例。
步进可以基于多种标准:
实施数据步进通常需要创建一个调度函数,该函数根据当前的训练步骤或周期修改与不同数据源相关的采样权重 (weight)或概率。
import numpy as np
# 示例数据源和初始权重
data_sources = {
"curated_corpus": {"weight": 0.7, "path": "/path/to/curated"},
"web_crawl": {"weight": 0.3, "path": "/path/to/web"},
# 根据需要添加更多数据源
}
# 总训练步数
total_steps = 1_000_000
def get_pacing_weights(current_step, total_steps, sources):
"""根据训练进度计算动态权重。"""
progress = current_step / total_steps
new_weights = {}
# 示例:线性降低整理数据的权重,增加网页抓取数据的权重
# 确保权重总和仍为1(或之后归一化)
curated_weight = max(0.1, 0.7 - 0.6 * progress) # 不要低于10%
web_weight = 1.0 - curated_weight # 为简化起见,假设只有两个数据源
new_weights["curated_corpus"] = curated_weight
new_weights["web_crawl"] = web_weight
# 如果存在其他数据源,在此添加逻辑
# 归一化权重以确保它们总和为1(很重要!)
total_weight = sum(new_weights.values())
normalized_weights = {
k: v / total_weight
for k, v in new_weights.items()
}
return normalized_weights
# --- 在训练循环内部 ---
# current_training_step = ... 获取当前步数 ...
# current_weights = get_pacing_weights(
# current_training_step, total_steps, data_sources)
# 使用这些新权重重新配置数据采样器/加载器
# sampler.set_weights(current_weights)
# batch = next(data_loader)
# ... 训练步骤的其余部分 ...
这段代码展示了一个简单的线性步进调度。根据期望的学习进程,可以设计更复杂的函数(例如,指数型、阶梯型)。重要的一点是,随着训练的进行,动态调整从每个数据源采样的可能性。
退火,在数据采样的语境下,通常指逐渐改变一个参数 (parameter),该参数控制数据源采样分布的形态或随机性。这与之前讨论的基于温度的采样紧密联系。
回顾一下,温度 修改了从权重 (weight) 推导出的概率 :
退火调度可能涉及从较高的温度 开始,并在训练过程中逐渐将其降低至 (甚至略低)。
退火调度可以应用于温度参数,也可以直接应用于权重本身(例如,逐渐增加高权重和低权重之间的差异)。常见的调度包括温度参数的线性衰减、余弦衰减或指数衰减,或者应用于权重的类似调制因子。
示例温度退火调度,涵盖 100 万训练步,从 T=2.0 开始,使用线性和余弦函数衰减至 T=1.0。
数据步进和退火并非互斥。你可以将它们结合起来,创建更巧妙的数据馈送方法。例如:
这种组合可以精细地控制模型在不同训练阶段看到什么数据以及它多严格地遵循预设的混合比例。
实施动态采样调度会增加训练流程的复杂性。
torch.utils.data.WeightedRandomSampler 这样的框架可以进行调整,或者可能需要管理多个数据集的自定义迭代器。虽然比静态采样更复杂,但数据步进和退火调度为大型语言模型的学习过程提供了有效的工具。通过随时间精心控制数据输入,你有可能加快收敛速度,增强健壮性,并更好地塑造模型的最终能力以满足特定需求。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•