跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 02 — LoRA(Low Rank Adaption)基本原理与基本概念,fine-tune 大语言模型

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列

    LoRA(Low-Rank Adaptation)把完整微调中与任务相关的权重增量 ΔW,表示为两个低秩矩阵的乘积。基础模型权重保持冻结,只训练小规模 adapter 参数,从而降低每个下游任务需要保存和优化的参数量。

    本讲依次解释 LoRA 的动机、full fine-tuning 与 LoRA 的差异、参数量计算、rank r 的容量/效率权衡,以及 A/B 矩阵的初始化与前向伪代码。

    • 课程先区分 In-Context Learning/prompt engineering 与 fine-tuning:前者不修改模型参数,后者会改变或新增可训练参数。
    • 即使大模型有较强的上下文学习能力,若模型缺少某些领域概念、任务格式或专门行为,仅靠 prompt 未必足够。
    • 随模型规模增大,为每个任务保存一套完整权重增量变得昂贵,因此需要参数高效微调。
    • 设预训练参数为 Φ,完整微调后为 Φ + ΔΦ
    • 完整微调中,ΔΦΦ 的形状和参数规模相同。
    • LoRA 用规模更小的参数 Θ 编码任务增量:ΔΦ = ΔΦ(Θ),目标是 |Θ| ≪ |ΔΦ|
    • 对某个大矩阵 W,课程 notebook 采用 ΔW = W_A W_B 的记号;不同论文/实现可能写成 BA,关键是乘积形状最终与 W 一致。

    3. 冻结基础权重、注入可训练分支

    Section titled “3. 冻结基础权重、注入可训练分支”
    • 原始分支计算 xW,其中 W 来自预训练模型并被冻结。
    • LoRA 分支计算 x(W_AW_B),只更新 W_AW_B
    • 两个分支相加形成新的输出,并可乘一个缩放系数 alpha
    • 课程强调注入位置通常是 Transformer 自注意力中的大投影矩阵,如 Wq/Wk/Wv/Wo;具体目标模块由模型架构和实现配置决定。

    若:

    • W ∈ R^(A×B)
    • W_A ∈ R^(A×r)
    • W_B ∈ R^(r×B)

    则完整增量参数量是 A×B,LoRA 参数量是 r(A+B)

    课程示例:A=100B=500r=5

    • 完整增量:100×500 = 50,000
    • LoRA:5×(100+500) = 3,000
    • 比例:3,000/50,000 = 6%

    这说明“参数高效”是相对于需要训练/保存的任务增量参数而言,不代表前向时基础模型本身消失。

    • 较小 r:参数少、训练更快、硬件需求更低,但任务适配容量可能不足。
    • 较大 r:表达能力更强,但参数量、过拟合风险和计算成本上升。
    • 课程把 r 描述为模型复杂度、适配能力、欠拟合/过拟合之间的超参数。

    课程伪代码把 W_A 用 Kaiming uniform 初始化,把 W_B 初始化为零。因此初始时:

    W_A W_B = 0

    LoRA 分支一开始不会改变基础模型输出,随后通过训练逐步学习任务增量。

    完整微调:

    h=fW(x)h=fW+ΔW(x)h=f_W(x) \quad\Rightarrow\quad h=f_{W+\Delta W}(x)

    低秩分解:

    ΔW=WAWB,WARA×r,WBRr×B\Delta W=W_AW_B, \quad W_A\in\mathbb R^{A\times r}, \quad W_B\in\mathbb R^{r\times B}

    参数量:

    ΔW=AB,WA+WB=r(A+B)|\Delta W|=AB, \qquad |W_A|+|W_B|=r(A+B)

    课程伪代码的核心形式:

    W_A = nn.Parameter(torch.empty(input_dim, rank))
    W_B = nn.Parameter(torch.empty(rank, output_dim))
    nn.init.kaiming_uniform_(W_A, a=math.sqrt(5))
    nn.init.zeros_(W_B)
    h = x @ W
    h += x @ (W_A @ W_B) * alpha

    注意:该 cell 是说明性伪代码,缺少完整导入、数据和训练循环;标准 PEFT 实现中的缩放常由配置计算,本讲没有展开具体 alpha/r 规则。

    • 00:32:LoRA 与低秩矩阵思想,说明本讲是原理篇。
    • 01:04:LoRA 名称、adapter 和 parameter-efficient 定位。
    • 03:02:In-Context Learning 不改参数,LoRA 仍属于微调。
    • 05:01:冻结预训练权重,在 Transformer 层注入可训练低秩矩阵。
    • 06:30:完整微调的 Φ + ΔΦ
    • 08:30:用两个低秩矩阵近似 ΔW
    • 10:03:full fine-tuning 与 LoRA 双分支对比。
    • 12:02r(A+B) 参数量与 6% 示例。
    • 13:30:rank r 的容量/成本权衡。
    • 14:31:A/B 初始化与前向伪代码。
    • 16:02:BLOOM 的 query_key_value 投影中 LoRA A/B 的形状。
    • 理论、公式和图片可在任何平台阅读,不要求 GPU。
    • notebook 的伪代码不是可独立执行的程序,缺少 torchnnmath 导入和训练数据。
    • 课程用 BLOOM 层结构图说明注入位置,但本讲没有实际执行微调。
    • ASR 把 LoRA、fine-tune、adapter、rank、projection、PEFT 等识别成大量近音词;本稿按 notebook 与论文链接校正。
    • notebook 写作 Adaption,LoRA 论文标题通常使用 Adaptation;本稿概念名采用通行写法 Low-Rank Adaptation。
    • 承接第 1 讲:基础模型参数很大,完整任务微调和保存成本高。
    • 第 3 讲:用 PEFT 在 BLOOM-7B1 上实际冻结基础权重、注入 LoRA 并训练。
    • 第 4 讲:追踪 PEFT 如何找到目标模块并把普通层替换为 LoRA 层。
    1. 为什么 LoRA 仍然属于 fine-tuning,而不是 prompt engineering?
    2. W∈R^(A×B),LoRA 为什么只需训练 r(A+B) 个参数?
    3. W_B 初始化为零会对训练开始时的模型输出产生什么影响?
    4. rank r 太小或太大分别可能带来什么问题?
    5. LoRA 减少了哪些参数成本,又没有消除哪些基础模型成本?
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。