diff --git a/README.md b/README.md index 7d2843f..613b741 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ + [第六章:用于分类任务的微调](./cn-Book/6.用于分类任务的微调.md) + [第七章:指令遵循微调](./cn-Book/7.指令遵循微调.md) + [附录A:PyTorch简介](./cn-Book/附录A.PyTorch简介.md) -+ [附录B:参考文献和进一步阅读](./cn-Book/附录B.参考文献和进一步阅读.md) ++ [附录B:参考文献和扩展阅读](./cn-Book/附录B.参考文献和扩展阅读.md) + [附录C:习题解答](./cn-Book/附录C.习题解答.md) + [附录D:给训练循环添加高级技巧](./cn-Book/附录D.给训练循环添加高级技巧.md) diff --git a/cn-Book/附录B.参考文献和进一步阅读.md b/cn-Book/附录B.参考文献和扩展阅读.md similarity index 100% rename from cn-Book/附录B.参考文献和进一步阅读.md rename to cn-Book/附录B.参考文献和扩展阅读.md diff --git a/cn-Book/附录E.使用 LoRA 的参数高效微调.md b/cn-Book/附录E.使用 LoRA 的参数高效微调.md new file mode 100644 index 0000000..4cf7b2d --- /dev/null +++ b/cn-Book/附录E.使用 LoRA 的参数高效微调.md @@ -0,0 +1,27 @@ +本附录介绍低秩适应 (LoRA),这是最广泛使用的参数高效微调技术之一。在解释 LoRA 背后的主要思想之后,本附录将基于第 6 章中的垃圾邮件分类微调示例并对 LLM 进行微调。然而,需要注意的是,LoRA 微调也适用于第 7 章中讨论的有监督的指令微调。 + +## E.1 LoRA 简介 + +LoRA,即低秩适应,是一种通过仅调整模型权重参数的一小部分,使预训练模型更好地适应特定(通常较小)数据集的技术。“低秩”指的是将模型调整限制在总权重参数空间的一个较小维度子空间的数学概念,这有效地捕获了训练期间权重参数变化的最具影响力的方向。 + +> [!TIP] +> +> **个人思考:** LoRA技术现在用的比较多,我们该怎么理解LoRA,想象你有一个非常厉害的工具箱(预训练模型),里面有很多工具,可以做各种各样的事情。现在你只想用这个工具箱来修自行车(特定任务)。 +> +> LoRA 就像是给你的工具箱增加了一些专门用来修自行车的“小工具”(模型的一小部分权重参数)。你不需要把整个工具箱里的工具都换掉或者重新学习怎么使用它们,只需要学会用这些新增的“小工具”就行了。 +> +> “低秩”的意思是,这些新增的“小工具”并不是全新的、非常复杂的工具。它们是在已有的工具基础上进行了一些简单的调整或者组合,就能很好地完成修自行车的任务。这就好比你不需要重新发明轮子,只需要给现有的扳手加个特殊的套筒就能拧紧自行车上的螺丝。 +> +> 所以,LoRA 的好处就是,它能让预训练模型快速适应新的任务,而且只需要学习和调整很少的“小工具”,这样就更高效、更省资源。 + +LoRA 方法之所以有用且受欢迎,是因为它能够高效地在特定任务的数据上对大型模型进行微调,从而显著降低了传统微调方法所需的计算成本和资源。 + +为了解释 LoRA 的工作原理,假设存在一个与特定层相关联的大型权重矩阵 W。LoRA 可以应用于 LLM 中的所有线性层(稍后将会看到),为了说明,我们先关注单个层。 + +在训练深度神经网络时,在反向传播过程中,我们会学习到一个 ΔW 矩阵,它包含了关于我们如何更新原始权重参数的信息,以便在训练过程中最小化损失函数。在本附录的其余部分,我们将使用术语“权重”作为模型权重参数的简称。 + +在传统训练和微调中,权重更新定义如下: + +Wupdated = W + ΔW + +由 Hu 等人 (https://arxiv.org/abs/2106.09685) 提出的 LoRA 方法提供了一种更有效的方法来计算权重更新矩阵 ΔW,通过学习它的近似值: \ No newline at end of file