一次预训练实验不是“运行命令直到能生成文本”。你需要知道模型看过哪些数据、用了多少计算,以及怎样判断它在未见过的文本上有变化。
先定义实验,再启动训练
选用可合法使用的小语料,记录来源与版本。按文档、作者或来源关系做切分,避免同一篇内容的近似副本跨越训练与评估集合。先固定验证集,再决定训练配置。
小模型实验的目标是跑通方法。它不等于复现大型商业模型,也不能用几段流畅输出证明完整能力。设定明确的时间、token 或步数预算,可以让比较更公平。
把参数和数据量写清楚
记录层数、隐藏维度、注意力头数、词表大小、上下文长度、批次和梯度累积设置。处理过的 token 数有时比“跑了几轮”更有解释力,因为不同切分和打包方式会改变每轮的实际输入。
同一训练目标下,可以把留出集的平均负对数似然作为一个指标。若平均损失使用自然对数,困惑度是 exp(loss);比较时要保持分词器、评估文本和损失汇总方式一致。
import math
# 示例数字说明换算,不是本课程测得的模型结果。
validation_loss = 2.0
perplexity = math.exp(validation_loss)
print(perplexity) # 约 7.389
固定提示,区分采样和评价
在训练前选好几个提示,训练后用相同 temperature、长度和其他采样设置生成。保留全部结果,包括不好看的样本。改变采样参数可能让输出更保守或更随机,并不表示模型权重变好了。
对于非常小的语料,要特别检查是否只是记住片段。可以看生成文本与训练文档的重合,报告典型重复和失败模式,而不是只挑最好的一次输出。
写出别人能理解的结论
实验报告至少包含:数据与许可、清洗/切分规则、模型和环境配置、计算预算、训练与留出指标、固定提示样本、已知局限。没有独立留出集时,就明确写成训练流程演示。
下一课开始指令微调。模型仍然预测 token,但数据组织和损失范围会影响它学会的任务形式。带着本课的固定评估方法继续,才能比较微调前后。