✍内容

项目地址: 第6章 模型训练

模型训练这一章节主要从目标函数优化算法两部分进行讲解,其中文章介绍了研究的三类语言模型的目标函数分别是:只包含解码器只包含编码器编码器解码器。优化算法讲了随机梯度下降(SGD)Adam (adaptive moment estimation)AdaFactor混合精度训练学习率和初始化

🖊总结

1.Decoder-only 模型是怎么定义的?

自回归语言模型定义了一个条件分布:

p(x_i \mid x_{1:i-1}).


定义如下:

  • x_{1:i-1} 映射到上下文嵌入 \phi(x_{1:i-1})

  • 应用嵌入矩阵 E \in \mathbb{R}^{V \times d} 来获得每个token的得分 E \phi(x_{1:i-1})_{i-1}

  • 对其进行指数化和归一化,得到预测 x_i的 分布。

简洁地:

p(x_{i+1} \mid x_{1:i}) = softmax(E \phi(x_{1:i})_i).


2.什么是最大似然?

最大似然是一种估计参数的方法,也称为最大概似估计。其基本思想是:当从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该使得从模型中抽取该n组样本观测值的概率最大。

具体来说,假设我们有一个概率模型,该模型的参数为θ,并且我们知道从该模型中抽取一组样本的概率为P(x|θ)。我们可以通过极大化这个概率来找到最佳的参数θ估计值。也就是说,我们要找到一个参数值,使得在所有可能的参数值中,这个参数值使得模型产生给定样本的概率最大。这就是最大似然估计的基本思想。

在数学上,最大似然估计可以表示为求解以下方程:

θ=argmax_θ P(x|θ)

3.什么是掩码语言模型?

掩码语言模型是一种基于神经网络的语言模型,主要用于处理自然语言数据。在掩码语言模型中,输入序列中的一部分标记被随机掩码,然后模型需要基于上下文信息来预测被掩码的标记。这个过程使得模型能够学习到文本的全局上下文信息,并且避免了对大量参数和数据的依赖。

掩码语言模型的核心思想是在训练过程中,通过随机选择一定比例的标记进行掩码,然后要求模型根据上下文信息来预测这些被掩码的标记。这种方式能够让模型在训练时学习到句子的全局表征,进而提升模型的性能。

4.Encoder-decoder 模型用来解决什么问题的?

在Encoder-only模型中,输入序列被映射到一个固定大小的向量表示,这个向量表示了整个序列的信息。由于只处理输入序列的一次扫描,因此无法捕获序列中的长期依赖关系。

为了解决这个问题,人们提出了Encoder-Decoder模型,它由两个部分组成:EncoderDecoder。在Encoder-Decoder模型中,Encoder部分与Encoder-only模型相同,但增加了Decoder部分,它可以处理输入序列的多次扫描,从而捕获序列中的长期依赖关系。

5.什么是随机梯度下降(SGD)?

随机梯度下降(SGD)是一种优化算法,用于更新深度神经网络的参数。在SGD中,对于每次前向传递,都会从总的数据集中随机选择一批数据,然后根据这批数据的梯度进行参数更新。这种方法具有更高的计算效率和更强的鲁棒性,能够避免陷入局部极小值,并且训练速度也会更快。

SGD的基本思想是在每一次迭代中,随机选择一个小批量的样本来计算损失函数的梯度,并用梯度来更新参数。这种随机性使得算法更具鲁棒性,能够避免陷入局部极小值,并且训练速度也会更快。

SGD有多种变体,如批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和在线梯度下降(Online Gradient Descent)等。其中,Batch Gradient Descent和Stochastic Gradient Descent是两种常用的方法。Batch Gradient Descent每次使用全部数据进行参数更新,而Stochastic Gradient Descent每次只使用一个样本或一个小批量的样本进行参数更新。

6.什么是Adam (adaptive moment estimation)?

Adam(Adaptive Moment Estimation)是一种自适应学习率的优化算法,结合了动量法和自适应梯度方法。它通过估计梯度的一阶矩(均值)和二阶矩(方差)来调整学习率,并在训练过程中自适应地更新参数。

7.什么是AdaFactor?

AdaFactor是一种新型优化器,它通过低秩分解来减少内存使用,并采用自适应学习率调整策略,以更好地适应不同任务和数据集。与Adam相比,AdaFactor在训练过程中能够更快收敛,并使用更少的参数和计算资源。此外,AdaFactor还可以用于各种不同类型的模型和任务,如图像分类、自然语言处理和语音识别等。

8.什么是混合精度训练?

混合精度训练是一种利用不同数据精度的训练方法,通常涉及将参数和梯度保存在更高精度的数据类型中,而将计算部分保存在更低精度的数据类型中。这种方法可以提高计算性能,同时又不会对模型的精度产生太大影响。混合精度训练可以有效地提高训练速度,同时又能够保持模型的准确性

神经网络运算中,部分运算对数值精度不敏感,此时使用较低精度可以达到明显的加速效果(如conv、matmul等);而部分运算由于输入和输出的数值差异大,通常需要保留较高精度以保证结果的正确性(如log、softmax等)。当前的AI加速卡通常通过针对计算密集、精度不敏感的运算设计了硬件加速模块,如NVIDIA GPU的TensorCore、Ascend NPU的Cube等。对于conv、matmul等运算占比较大的神经网络,其训练速度通常会有较大的加速比。

混合精度训练的应用场景广泛,包括深度学习、自然语言处理、图像识别等领域。例如,在自然语言处理中,混合精度训练可以通过降低模型参数的数值精度来减少模型大小和计算资源的需求,从而提高训练速度。在图像识别中,混合精度训练可以通过将部分计算转换为低精度进行加速,同时保留关键计算的准确性,从而提高模型的性能。

9.什么是学习率?

学习率是机器学习中用于调整模型参数更新幅度的超参数。在每次训练迭代中,学习率决定了模型参数的更新量。

学习率对于训练神经网络至关重要。如果学习率过高,可能会导致模型参数在最优解附近震荡而无法收敛;如果学习率过低,则可能会导致训练过程过于缓慢,甚至可能会陷入局部最小值。

一种常见的学习率调整策略是使用指数衰减法,即随着训练的进行逐渐减小学习率。这种方法通常能确保训练的稳定性。另外,根据具体情况,一些策略如学习率退火周期性学习率调整等也可以用来调整学习率。

混合精度训练学习率更新策略都是优化神经网络模型的技术,可以单独或结合使用,以提高训练速度、减少内存消耗以及降低能源成本等。

10.在大模型训练中初始化的作用?

  1. 避免梯度消失和梯度爆炸:通过合适的初始化,可以避免梯度在反向传播过程中过早地变得非常小或非常大,导致梯度消失或梯度爆炸的问题。这样可以使模型更容易学习和更新参数,提高模型的稳定性和收敛速度。

  2. 提高模型的表达能力:通过合理地初始化参数,可以为模型提供一定的学习能力和表达能力,使其能够更好地适应训练数据和提取有效的特征。

  3. 防止陷入局部最优解:合适的初始化可以使模型具有足够的多样性,避免陷入局部最优解,并提高模型的泛化能力。

  4. 影响模型收敛到的解的质量:权重是否进行了合理的初始化,决定着模型的很多走向,比如模型算法离最优解的距离远近或方向是否准确、是否会出现梯度爆炸或梯度消失从而导致训练无法收敛、同等效果下需要花多长时间来训练等。合理的权重初始化会让模型算法梯度更加正常且更加容易到达全局最优解。同样反过来,不合理权重初始化很容易让模型算法出现梯度问题,让模型算法陷入局部最优解导致训练失败等。

  5. 优化计算效率:在实践中,将Model Parameters进行切分,每个worker都会分摊部分模型参数。假如有3个worker,则每个worker分担了1/3,于是它们就把不属于自己的另外2/3(因为已经是冗余的了)释放掉。但是3个worker各自模型参数合并起来,恰好又是整个模型参数。这样可以在一定程度上优化计算效率。