低秩矩阵分解LORA大模型加速微调和训练算法

ChatGPT带领着大模型像雨后春笋一般层出不穷,大家都对大模型微调跃跃欲试,现在咱们聊聊其中的常见的算法

1 低秩矩阵分解LORA

理论

低秩矩阵分解(Low Rank Matrix Factorization,LRMF)是一种常见的数据降维技术,它可以将高维数据映射到低维空间中,并尽量保留原始数据的重要信息。LoRA(Low Rank Approximation)是一种基于LRMF的矩阵近似算法,它可以在保持原始矩阵低秩性的前提下,进一步减小矩阵的存储和计算复杂度。

LoRA算法的核心思想是,将原始矩阵 A A A分解为两个低秩矩阵 X X X Y Y Y的乘积形式,即 A = X ⋅ Y A=X\cdot Y A=XY。具体地,LoRA算法会首先对原始矩阵进行SVD分解,得到矩阵 A = U Σ V T A=U\Sigma V^T A=UΣVT,其中 U U U V V V分别是 A A T AA^T AAT A T A A^TA ATA的特征向量矩阵, Σ \Sigma Σ是奇异值矩阵。然后,LoRA算法会取 U U U的前 k k k列和 V V V的前 k k k行,得到低秩矩阵 X = U ( : , 1 : k ) X=U(:,1:k) X=U(:,1:k) Y = V ( 1 : k , : ) Y=V(1:k,:) Y=V(1:k,:),其中 k k k是预设的参数,表示矩阵 A A A的秩。最后,LoRA算法将近似矩阵 A k = X ⋅ Y A_k=X\cdot Y Ak=XY作为原始矩阵 A A A的近似,即 A k ≈ A A_k \approx A AkA

LoRA算法的优点在于,它可以在保证矩阵低秩性的前提下,进一步减小矩阵的存储和计算复杂度。特别地,LoRA算法的存储复杂度为 O ( m k + n k ) O(mk+nk) O(mk+nk),计算复杂度为 O ( m n k ) O(mnk) O(mnk),其中 m m m n n n分别是矩阵 A A A的行数和列数。因此,LoRA算法适用于大规模数据的处理,特别是在资源受限的环境下,可以大幅度降低计算和存储开销。

总结:冻结预训练模型权重,并将可训练的秩分解矩阵注入到Transformer层的每个权重中,大大减少了下游任务的可训练参数数量

使用方式

HuggingFace的包peft对LoRA做了封装支持,调用api即可
低秩矩阵分解LORA大模型加速微调和训练算法_第1张图片

模型并行计算

在并行训练过程中,各个显卡并行计算,每个模型使用同一份模型权重参数weights,在梯度下降更新时,各个进程会同步一次,致使每个进程的模型都跟新相同的梯度
具体实现,需要在model外套一层DistributedDataParallel,就可以实现backword前向更新梯度时,其他操作依旧,

使用DistributedDataParallel把model封装成ddp_model后,模型的参数名称里多了一个module,这是因为原来的模型model被保存到了ddp_model.module这个成员变量中。

在混用单GPU和多GPU的训练代码时,要注意这个参数名不兼容的问题,包括上面我们使用LoRA加载模型的时候,也会出现模型层名称变换了的情况。最好的做法是每次存取ddp_model.module,这样单GPU和多GPU的checkpoint可以轻松兼容。

人类反馈强化学习(RLHF)

RLHF-Stage1 是 supervised-fintuning,即使用上文提到的数据集进行模型微调。

RLHF-Stage2 训练了奖励模型,它通过对于同一个 prompt 的不同输出进行人工排序,得到对应分数,监督训练奖励模型。

RLHF-Stage3 使用了强化学习算法,是训练流程中最复杂的一部分:

RLHF(Reinforcement Learning Hyperparameter Optimization Framework)是一种用于强化学习模型的超参数优化框架。它结合了强化学习中的经典方法和贝叶斯优化技术,能够更高效地找到最佳超参数组合。下面是强化学习微调的完整 RLHF 流程:

数据预处理:根据需要对强化学习任务的数据进行处理,如归一化、去噪等。
确定超参数空间:为每个超参数指定范围和分布,以便进行超参数优化。
确定评估指标:根据强化学习任务的性质和目标,选择合适的评估指标,如累积回报、平均奖励等。
设计搜索策略:根据评估指标和超参数空间的特点,选择合适的搜索策略,如随机搜索、网格搜索、贝叶斯优化等。
进行超参数优化:使用选择的搜索策略在超参数空间中搜索最优超参数组合,并记录每个超参数组合的性能。
分析结果:分析每个超参数组合的性能和超参数之间的关系,以了解哪些超参数对模型性能有重要影响。
微调模型:根据分析结果,

你可能感兴趣的:(算法,矩阵,机器学习,人工智能)