LLM From Scratch(正在施工🚧)

简介 本文尝试从零训练一个大模型,以学习大模型相关的训练流程和知识。 前置知识 RMS Norm 为什么要有 Norm? 规范化(Norm)本质是将非标准数据统一为指定格式的过程,个人理解是将数据重新映射到某个区间内。 这么做的一个原因是,随着网络深度的增加,各层的特征值会逐渐趋近激活函数的上下限附近,导致激活函数饱和,进而导致梯度消失。归一化(规范化)可以使特征值的分布重新回到激活函数对输入敏感的部分,从而避免梯度消失、加快收敛速度。 对训练数据和测试数据进行规范化可以防止不同数据分布对模型训练的影响,提高模型的泛化能力。 Batch Norm 和 Layer Norm 此处参考李沐 Transformer 视频:【Transformer 论文逐段精读【论文精读】】精准空降到 26:05 Batch Norm 是对一个 batch 内的数据按特征进行规范化: Layer Norm 则是对一个样本内所有特征进行规范化: 在图中可以直观看到,对于文本生成任务,Batch Norm 当不同 Batch 间的序列长度差异较大时,Batch Norm 由于空白的存在,导致算出的均值和方差波动较大。Batch Norm 在训练时使用当前 Batch 的均值和方差,在推理时使用整个训练集的均值和方差。 在推理时当一个 Batch 内有一个过长的序列,我们之前训练得到的均值和方差可能就不能很好的应用在这个没见过的长序列上,导致预测效果不好。而 Layer Norm 由于是每个样本内部做 Norm 相对来说没有这些问题,能够更好的应用在序列生成任务上。 Batch Norm 在计算机视觉领域更加有效,因为它消除了不同特征之间的大小关系,保留了不同样本间的大小关系。对于文本生成任务,Layer Norm 更加有效,因为单个样本的不同特征是词语随时间的变化,而且样本内的特征关系非常密切,它能保留样本内特征的大小关系,并且和它的计算和 batch 无关,能更好的应用在序列生成任务上。 为什么要有 RMS Norm? RMS Norm 提出的动机是 LayerNorm 的运算量比较大,因此对 LayerNorm 做了运算上的简化。 原有的 LayerNorm 计算公式: 计算均值$\mu$和方差$\sigma^2$: $$ \mu_L=\frac{1}{d}\sum_{i=1}^d x_{i} $$ 对每个元素进行归一化: $$ \hat{x}_i=\frac{x_i-\mu_L}{\sqrt{\sigma_L^2+\epsilon}} $$ 对归一化后的结果进行缩放和平移,$\gamma$和$\beta$是可学习的参数: $$ y_i=\gamma\hat{x}_i+\beta $$ RMS Norm 的计算公式: 对于输入向量$x=(x_1,x_2,…,x_d)$,计算其均方根(RMS):...

四月 17, 2025 · 8 分钟 · suiyuanla