CS336作业一:大语言模型的训练与推理
内容提要
本文概述斯坦福CS336作业一:构建Transformer语言模型。核心流程为文本→分词→Transformer→损失→梯度更新。内容涵盖BPE分词、自注意力、RoPE位置编码、RMSNorm、SwiGLU、交叉熵损失、AdamW优化器、学习率调度、梯度裁剪及推理时的温度与top-p采样,并讨论了训练与推理的差异及实验设计要点。
延伸解读
训练与推理的本质差异
训练时使用教师强制,模型始终看到真实历史,可并行处理所有位置;推理时模型必须依赖自身生成的前文,逐token生成,无法并行。这种差异导致暴露偏差:训练与推理的输入分布不一致,可能影响生成质量。理解这一点有助于把握模型在训练和部署中的行为差异。
BPE分词:压缩与未知词处理的权衡
BPE从字节级词汇开始,通过合并高频相邻对来压缩序列,减少未知词。但字节级编码可能增加序列长度,提升计算成本。预分词和特殊token的设置影响合并边界,避免跨文档合并。分词器的选择直接影响模型的有效性和效率,不同分词器产生的损失不可直接比较。
架构组件的作用与消融实验
RoPE提供相对位置信息,因果掩码防止看到未来token,两者功能不同。RMSNorm稳定激活尺度,残差连接提供梯度通路,pre-norm与post-norm影响训练稳定性。SwiGLU通过门控机制增强非线性。消融实验应关注学习曲线、发散情况、梯度范数等,而不仅是最终损失,且需控制变量。
优化与解码策略的实践要点
AdamW的权重衰减与梯度更新解耦,学习率调度含warmup和余弦衰减,梯度裁剪防止异常批次破坏训练。推理时温度调节分布锐度,top-p自适应选择候选集。这些超参数对训练稳定性和生成质量有显著影响,需根据模型和数据调整。
Q&A
CS336作业一的核心内容是什么?
CS336作业一的核心是构建一个Transformer语言模型,涵盖从文本到分词、Transformer架构、损失计算、梯度更新的完整流程,并涉及BPE分词、自注意力、RoPE位置编码、RMSNorm、SwiGLU、交叉熵损失、AdamW优化器、学习率调度、梯度裁剪以及推理时的温度与top-p采样等关键概念。
为什么语言模型训练时使用教师强制(teacher forcing)?它有什么优缺点?
教师强制在训练时让模型每个位置接收真实的前一个token作为输入,而不是模型自己生成的token。优点是训练可以高度并行化,因为所有位置可以同时计算;缺点是会产生暴露偏差(exposure bias),即推理时模型必须依赖自己生成的token,包括可能的错误,导致训练和推理不一致。
BPE分词是如何工作的?为什么使用字节级别的BPE?
BPE(Byte-Pair Encoding)从256个字节token开始,反复合并出现频率最高的相邻字节对,形成新的子词token。使用字节级别是因为UTF-8编码可以表示任意Unicode文本,且初始词汇表只有256个,几乎消除了未知token,但可能增加序列长度。BPE通过合并频繁出现的字节对,在压缩和词汇表大小之间取得平衡。
RoPE位置编码是如何工作的?它为什么能编码相对位置?
RoPE(旋转位置编码)将每个维度的对视为二维平面,通过旋转矩阵对查询和键向量进行旋转,旋转角度由位置决定。由于旋转矩阵的性质,两个位置的旋转后向量的点积只依赖于它们的相对距离(n-m),因此注意力分数自然编码了相对位置信息。RoPE只应用于查询和键,不应用于值。
RMSNorm与LayerNorm有何不同?为什么使用预归一化(pre-norm)结构?
RMSNorm只对隐藏向量进行均方根归一化,不减去均值,而LayerNorm会减去均值并除以标准差。预归一化结构在每个子层(注意力或前馈网络)之前进行归一化,残差连接在子层之外。预归一化使残差流提供更直接的梯度和信息路径,每个子层学习增量修正,训练更稳定,因此常被现代Transformer采用。
交叉熵损失的梯度为什么是预测概率减去真实标签的one-hot向量?
对于softmax交叉熵损失,对logits的梯度等于softmax概率向量减去真实标签的one-hot向量。对于正确类别,梯度为p_y-1(通常为负),梯度下降会增加其logit;对于错误类别,梯度为p_i(正),梯度下降会减小其logit。这个结果使得模型能有效调整logits以增加正确类别的概率。
AdamW优化器与标准Adam有何区别?为什么使用解耦的权重衰减?
AdamW将权重衰减从梯度更新中解耦,即权重衰减项直接作用于参数,而不是先加到梯度上再通过Adam的动量更新。标准Adam的L2正则化会与自适应学习率相互作用,导致权重衰减效果不理想。AdamW的权重衰减独立于自适应梯度更新,能更有效地正则化模型,是LLM训练中的常用选择。
训练和推理在计算和内存上有哪些主要差异?
训练需要存储参数、梯度、优化器状态(如一阶和二阶动量)以及用于反向传播的中间激活,内存需求大;推理只需要前向计算和模型参数,内存需求小。训练可以并行处理所有位置,而推理是自回归的,必须逐个生成token,因为每个新token依赖之前生成的token。
温度参数和top-p采样在文本生成中分别起什么作用?
温度参数τ调整logits的缩放,τ<1使分布更尖锐(更接近贪心),τ>1使分布更平坦(更随机)。top-p采样(核采样)选择累积概率达到p的最小候选集,并重新归一化后采样,它是自适应的:模型自信时候选集小,不确定时候选集大。两者都用于控制生成文本的多样性和质量。
在CS336作业中,如何设计实验来验证架构改进?
作业要求进行消融实验,例如移除RMSNorm、将预归一化改为后归一化、移除RoPE、将SwiGLU替换为无门控的SiLU FFN等。评估时不应只看最终损失,还应观察学习曲线下降速度、是否发散、激活和梯度范数以及生成文本的连贯性和重复性。同时要确保参数数量、训练token预算和学习率等保持一致,否则无法归因于特定组件。