我近期在写大模型系列文章,欢迎持续关注。喜欢的话,发扬一下传统美德:点赞、在看、收藏、分享!大语言模型RAG落地方案 十分钟学会大模型提示词
大模型的学习路线
| ingFang SC Semibold";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">大语言模型以其卓越的文本生成和理解能力引起了广泛关注。很多研究机构和企业纷纷开源了自己的大型预训练语言模型。例如OpenAI继续领跑该领域,推出了继ChatGPT后的更强大的GPT-4,Meta开源了Llama2,Google推出开源模型Gemma,马斯克旗下的人工智能初创公司xAI开源Grok;国内的科技巨头们也不甘落后,百度带来了文心一言,华为展示了盘古大模型,阿里巴巴集团则开发了通义千问等。 ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">然而,对于小公司或个人开发者来说,从零开始自主训练此类大模型几乎是不可能的任务。毕竟,参数规模动不动就是成百上千亿,计算量用GPU Year衡量,一次完整训练的成本可能高达数百万美元。ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">面对这一现实,小公司和个人开发者应该如何利用那些开源的大模型在特定业务场景下结合自己的数据进行进一步训练呢?是否存在一种低成本且有效的方式对大型模型进行微调以适应特定的应用场景?ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">幸运的是,目前存在若干种主流的微调方法,在开源大模型的基础上,以低成本的方式来完成模型的微调训练:ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">Adapter Tuning:由Houlsby N等人在2019年提出,通过增加模型层数来引入额外的灵活性,但这也导致了额外的推理延迟。LORA (Low-Rank Adaptation):由微软在2021年提出,通过低秩矩阵分解来实现高效的参数调整。 ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">Prefix-Tuning:由斯坦福大学提出,通过修改输入的前缀来调整模型的行为,但这种方法难以训练,并且可能影响模型性能。ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">Prompt Tuning:由谷歌提出,类似于Prefix-Tuning,通过修改输入提示来调整模型行为。ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">P-tuning v2:由清华大学在2022年提出,尽管功能强大,但可能导致旧知识的遗忘。ingFang SC";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">在这些方法中,LORA因其优越的性能和较低的成本而备受推崇。ingFang SC Semibold";color: rgb(0, 0, 0);letter-spacing: normal;text-wrap: wrap;">LORA的假设和思想LORA的基本思想是基于对模型内在维度(intrinsic dimension)的理解。具体来说: 模型的过参数化特性:大型预训练语言模型通常是过参数化的,即它们的参数数量远远超过了实际需要。然而,研究表明,这些模型实际上具有较小的内在维度,即模型主要依赖于这个低的内在维度(low intrinsic dimension)来完成任务适配。 低秩权重变化假设:在任务适配过程中,模型的权重变化量是低秩的,即模型在适应新任务时,参数的改变可以通过较低秩的矩阵来表示。基于这一假设,LORA提出了低秩自适应(LoRA)方法。 LoRA的实现方式:LoRA允许通过优化适应过程中稠密层(Dense Layer)变化的秩分解矩阵,间接地训练神经网络中的一些稠密层,同时保持预先训练的权重不变。

LORA的设计思路 1. 旁路降维与升维操作。 在原始的预训练语言模型(PLM)旁边增加一个旁路,通过降维再升维的操作来模拟内在秩(intrinsic rank)的概念。这个旁路的目的是引入一个低秩特性,使得模型在适应新任务时能够保持较低的参数变化量。 2. 固定预训练模型参数。 在训练过程中,保持预训练模型的参数不变,只训练降维矩阵 A和升维矩阵B。模型输入和输出维度保持不变,输出时将BA和W的参数进行叠加,这样做的目的是为了降低计算成本,并且使得模型能够在不改变输入输出维度的情况下进行有效的参数更新。 3. 参数初始化 使用随机高斯分布初始化降维矩阵A ,而升维矩阵B则初始化为零矩阵,确保训练开始时BA矩阵保持为零矩阵。 4. 微调过程 假设要微调一个预训练语言模型(如GPT-3),则微调过程可以表示为: 
其中h是微调后的模型参数,W0是预训练模型的参数,A和B是需要更新的降维和升维矩阵。对于全参数微调来说,参数量是巨大的,而对于LORA,只需要微调A和B两个矩阵。比如GPT-3的参数量是175B,而LORA参数量则要小10000倍,计算成本的降低是非常显著的。 这种方式的前向传播类似于残差连接的思想,使用旁路的更新来模拟全参数微调的过程。在推理阶段,LORA几乎不会引入额外的推理延迟,只需计算BA*input即可。
LORA微调的实验效果 
生成任务上的效果

结论 此外,除了用于大型预训练语言模型,LORA还可以应用于其他类型的神经网络模型,特别是那些包含稠密层的模型,例如图像处理、语音识别等。Stable Diffusion中就广泛使用了Lora来训练各种绘画风格。 总的来说,LORA通过在原始预训练语言模型旁边增加一个旁路,并训练降维与升维矩阵来模拟内在秩,实现了高效的参数微调。相比于全参数微调,LORA具有更低的计算成本和推理延迟,同时能够保持模型的输入输出维度不变。这种方法使得小型企业和个人开发者能够利用大型预训练语言模型,并在其上进行低成本的微调,从而更灵活地将其应用于特定的业务场景中。 |