当前位置: 首页 > news >正文

DoRA详解:从LoRA到权重分解的进化

DoRA​​是一种用于​​大语言模型(LLM)微调​​的技术,全称为 ​​"Weight-Decomposed Low-Rank Adaptation"​​(权重分解的低秩自适应)。它是对现有微调方法(如 ​​LoRA​​)的改进,旨在更高效地调整模型参数,同时减少计算资源消耗。

论文链接:https://arxiv.org/pdf/2402.09353

​1. 概括​

​2. 详解

overview of DoRA

  • 核心思想​​:DoRA 通过​​分解预训练模型的权重矩阵​​,将其拆分为​​幅度(magnitude)​​和​​方向(direction)​​两部分,分别进行低秩(low-rank)调整。这种分解方式能更精细地控制参数更新,提升微调效果。

  • ​与 LoRA 的关系​​:

    • ​LoRA(Low-Rank Adaptation)​​:通过在原始权重旁添加低秩矩阵(而非直接修改权重)来微调模型,减少参数量。

    • ​DoRA​​:在 LoRA 基础上引入​​权重分解​​,进一步优化参数更新的方向和幅度,提高训练稳定性。

1. 权重矩阵分解

输入与目标​

  • ​输入​​:预训练权重矩阵 W_0\in \mathbb{R}^{d\times d}(蓝色矩形)。
  • 目标​​:将 W_0分解为​​幅度(Magnitude) m 和​​方向(Direction) V

✅分解操作

1.1 计算幅度m

m=\left \| W_0 \right \|_c\in \mathbb{R}^{d\times d}

  • \left \| \cdot \right \|_c​表示矩阵的 ​​C范数​​(具体可能是列范数或Frobenius范数,需根据上下文确定)。

  • 幅度 m 是标量或对角矩阵(图中浅绿色矩形),表示权重的整体缩放因子。

1.2 计算方向V

 

V=\frac{W_0}{\left \| W_0 \right \|_c}\in \mathbb{R}^{d\times d}

  • 方向V(浅黄色矩形)是归一化后的权重矩阵,保留原始权重的“方向”信息。

1.3 验证分解​

  • 重构公式:

    W_0=m\cdot \frac{V}{\left \| V \right \|}_c=\left \| W_0 \right \|_c\cdot \frac{W_0}{\left \| W_0 \right \|}_c
    
  • 说明:分解后可通过幅度和方向重新组合得到原始权重,确保数学等价性。

  • V的范数 \left \| V \right \|_c=1(单位范数)。

2. 微调训练

2.1 方向矩阵V的低秩适应(LoRA)

  • 低秩分解​
    • 对方向矩阵V应用标准 LoRA:
      • \bigtriangleup V=BA\in \mathbb{R}^{d\times d}
      • 其中A\in \mathbb{R}^{d \times r},B\in \mathbb{R}^{r\times d}, r\ll d
    • A和 B是​​可训练的低秩矩阵​​(绿色矩形),r为秩(超参数)。
  • ​更新方向矩阵​
    • 微调后的方向矩阵:
      • V'=V+\bigtriangleup V=V+BA

​2.2 幅度m的训练​

  • 幅度m直接作为​​可训练参数​​(绿色矩形),通过梯度下降调整。

    • W'=m\cdot \frac{V}{\left \| V \right \|_c}=m\cdot \frac{V+BA}{\left \| V+BA \right \|_c}
    • 通过归一化确保方向矩阵的单位性。
  • ​可训练参数​​:

    • 低秩矩阵 A、B(方向调整)。

    • 幅度 m(全局缩放调整)。

  • ​冻结参数​​:

    • 原始方向 V(仅用于初始化,不更新)。

3. 代码

伪代码如下

import torch
import torch.nn as nnclass DoRALayer(nn.Module):def __init__(self, d, r):super().__init__()# 初始化预训练权重 W0self.W0 = nn.Parameter(torch.randn(d, d))# 分解为幅度和方向self.m = nn.Parameter(torch.norm(self.W0, dim=0))  # 幅度(可训练)self.V = self.W0 / torch.norm(self.W0, dim=0)      # 方向(冻结)# LoRA 参数self.A = nn.Parameter(torch.randn(d, r))self.B = nn.Parameter(torch.zeros(r, d))def forward(self, x):V_prime = self.V + torch.matmul(self.B, self.A)  # V + BAV_prime_norm = torch.norm(V_prime, dim=0)W_prime = self.m * (V_prime / V_prime_norm)       # 合并权重return torch.matmul(x, W_prime.T)

4. 总结​

DoRA 的核心是通过​​权重分解 + 低秩适应​​,实现对预训练模型更精细的微调。其操作流程清晰分为两步:

  1. ​分解​​:提取权重的幅度和方向。

  2. ​微调​​:用 LoRA 调整方向,独立训练幅度。

    这种方法在保持参数效率的同时,提升了模型微调的灵活性和性能。

 

http://www.lryc.cn/news/605743.html

相关文章:

  • 小杰数据结构(three day)——静以修身,俭以养德。
  • 【Linux系统】库的制作与原理
  • 【数据结构】算法代码
  • 渗透RCE
  • TS 常用类型与语法
  • Cesium 快速入门(六)实体类型介绍
  • Jmeter 性能测试常用图表、服务器资源监控
  • C语言指针(三):数组传参本质、冒泡排序与二级指针详解
  • FISCO BCOS Gin调用WeBASE-Front接口发请求
  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 操作系统数据格式相关(AI回答)
  • 无人船 | 图解基于LQR控制的路径跟踪算法(以欠驱动无人艇Otter为例)
  • 学习笔记《区块链技术与应用》第4天 比特币脚本语言
  • Docker部署Seata
  • Linux核心转储(Core Dump)原理、配置与调试实践
  • 前端-移动Web-day2
  • 野生动物巡查系统(H题)--2025 年全国大学生电子设计竞赛试题
  • ENSP防火墙部署
  • 快速理解RTOS中的pendsv中断和systick中断
  • Java Stream进阶:map是“一对一”,flatMap是“一对多”
  • H.266 vs H.265/AV1/H.264:从工程落地看下一代视频系统的技术演进
  • 前端核心技术Node.js(五)——Mongodb、Mongoose和接口
  • Web3:在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境
  • 硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能
  • 云原生环境 DDoS 防护:容器化架构下的流量管控与弹性应对
  • 对git 熟悉时,常用操作
  • Java学习第九十一部分——OkHttp
  • MongoDB用户认证authSource
  • 微服务架构技巧篇——接口类设计技巧
  • 智能交通顶刊TITS论文分享|跨区域自适应车辆轨迹预测:TRACER框架攻克域偏移难题!