大语言模型学习笔记

大模型学习笔记

什么是step,batch size,epoch

一般来说,会同时跑batch size个样本,然后把梯度平均一下,然后根据这个梯度更新参数。

  • step: 模型一次step代表了一次更新参数的过程。
  • batch的设置:batch size使得单次遍历数据集所更新的参数次数减少了,因此通常似乎认为batch size是为了增加训练速度,所以batch size越小越好。但是实际上并不一定。如果数据集很多样,则最好让模型多看一些数据,使得数据能够比较好地代表整个数据集,然后再更新参数。
  • batch size与显存:batch size越大,占用的显存也越大。但是有时候想要batch size大一些但是显存不够,此时需要增加gradient accumulation。将多次的梯度聚集起来再做参数更新(step)。
  • 然而,梯度聚集虽然能够显著减少显存使用,但随着梯度聚集的值增加,显存占用还是会增长不少。gradient_checkpointing_enable参数可以使用checkpoint技术进一步减少显存占用,但是会增加20%左右的训练开销。

大模型的训练阶段

  • Is DPO Always the Better Choice for Preference Tuning LLMs?

  • Empowering Language Models: Pre-training, Fine-Tuning, and In-Context Learning 解释了PreTraining的特点(无监督,填空),和Fine-Tuning的特点(转移学习,根据梯度优化参数)。

  • PreTraining 预训练:一般是无监督学习类似填空这样的任务。

  • Supervised Fine-Tuning 有监督微调:直接让模型学习输出对应的东西。

  • RLHF 基于人类反馈的大模型微调过程。首先收集人类反馈,然后基于反馈训练奖励模型(Rewarding Model),代替人类做出实时反馈。基于奖励模型,使用“Proximal Policy Optimization”(PPO)这种强化学习算法,使这个过程更加稳定。最终大模型的输出被训练为最大化奖励模型的奖励。

  • DPO: 一种和RLHF类似,但是更为简化和稳定的方法:基于大模型生成的输出对,直接标注哪个更好。使用这些输出优化大模型的参数。

什么是RoPE scaling

现有的大模型存在上下文长度的问题:当输入的上下文长度超过了训练时的上下文时,会出现困惑度(基于模型输出时概率分布,衡量模型是否确信自己的输出的指标。)猛增的情况。

RoPE:位置编码是 Transformer 里一个重要组成部分。通过生成一些位置向量,加到词向量上,使模型知道每个词之间的位置信息。否则模型无法知道词之间的位置关系。RoPE是LLaMA模型引入的一种新的生成位置向量的方法,不使用加法,而是给向量增加一些旋转。

Linear RoPE scaling:最初,Meta(和reddit/kaiokendev同时发现)提出了RoPE interpolation方法提升上下文长度。它基于插值。打个比方,例如训练的时候是360上下文,此时RoPE可以比作给每个向量旋转1度编码位置关系。此时我们想输入720长度的文字,则我们在原来的360度中分720段,每个字旋转0.5度,从而让大模型更适应长上下文。

Reddit上有人提出了两个重要的RoPE scaling方法(是的,没有论文,论文也引用的reddit): - NTK-Aware RoPE scaling 引入了neural tangent kernel - Dynamically Scaled RoPE 根据当前上下文位置,动态调整线性或者NTK方法的参数。

基于这些方法,可以零微调直接提升上下文长度,或者让大模型在长上下文中进行进一步微调,更大地提升上下文长度。