从矩阵到秩:理解大模型参数与 LoRA 微调

在学习大模型、Transformer 和参数高效微调时,经常会遇到三个概念:

  • 矩阵是什么?
  • 矩阵的秩(Rank)是什么意思?
  • LoRA 和 DoRA 为什么都与低秩矩阵有关?

这些概念并不只是数学知识,它们直接决定了模型如何表示信息、如何进行参数更新,以及为什么 LoRA 能够减少微调成本。


一、矩阵:模型中的"信息变换器"

在机器学习中,矩阵可以理解为一个信息变换器。

一个线性层通常表示为:

y=Wx+b y=Wx+b y=Wx+b

其中:

  • (x):输入向量;
  • (W):参数矩阵;
  • (b):偏置;
  • (y):输出向量。

#mermaid-svg-z6bt8QzklvKrpGMp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-z6bt8QzklvKrpGMp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-z6bt8QzklvKrpGMp .error-icon{fill:#552222;}#mermaid-svg-z6bt8QzklvKrpGMp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-z6bt8QzklvKrpGMp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-z6bt8QzklvKrpGMp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-z6bt8QzklvKrpGMp .marker.cross{stroke:#333333;}#mermaid-svg-z6bt8QzklvKrpGMp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-z6bt8QzklvKrpGMp p{margin:0;}#mermaid-svg-z6bt8QzklvKrpGMp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-z6bt8QzklvKrpGMp .cluster-label text{fill:#333;}#mermaid-svg-z6bt8QzklvKrpGMp .cluster-label span{color:#333;}#mermaid-svg-z6bt8QzklvKrpGMp .cluster-label span p{background-color:transparent;}#mermaid-svg-z6bt8QzklvKrpGMp .label text,#mermaid-svg-z6bt8QzklvKrpGMp span{fill:#333;color:#333;}#mermaid-svg-z6bt8QzklvKrpGMp .node rect,#mermaid-svg-z6bt8QzklvKrpGMp .node circle,#mermaid-svg-z6bt8QzklvKrpGMp .node ellipse,#mermaid-svg-z6bt8QzklvKrpGMp .node polygon,#mermaid-svg-z6bt8QzklvKrpGMp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-z6bt8QzklvKrpGMp .rough-node .label text,#mermaid-svg-z6bt8QzklvKrpGMp .node .label text,#mermaid-svg-z6bt8QzklvKrpGMp .image-shape .label,#mermaid-svg-z6bt8QzklvKrpGMp .icon-shape .label{text-anchor:middle;}#mermaid-svg-z6bt8QzklvKrpGMp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-z6bt8QzklvKrpGMp .rough-node .label,#mermaid-svg-z6bt8QzklvKrpGMp .node .label,#mermaid-svg-z6bt8QzklvKrpGMp .image-shape .label,#mermaid-svg-z6bt8QzklvKrpGMp .icon-shape .label{text-align:center;}#mermaid-svg-z6bt8QzklvKrpGMp .node.clickable{cursor:pointer;}#mermaid-svg-z6bt8QzklvKrpGMp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-z6bt8QzklvKrpGMp .arrowheadPath{fill:#333333;}#mermaid-svg-z6bt8QzklvKrpGMp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-z6bt8QzklvKrpGMp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-z6bt8QzklvKrpGMp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z6bt8QzklvKrpGMp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-z6bt8QzklvKrpGMp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z6bt8QzklvKrpGMp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-z6bt8QzklvKrpGMp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-z6bt8QzklvKrpGMp .cluster text{fill:#333;}#mermaid-svg-z6bt8QzklvKrpGMp .cluster span{color:#333;}#mermaid-svg-z6bt8QzklvKrpGMp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-z6bt8QzklvKrpGMp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-z6bt8QzklvKrpGMp rect.text{fill:none;stroke-width:0;}#mermaid-svg-z6bt8QzklvKrpGMp .icon-shape,#mermaid-svg-z6bt8QzklvKrpGMp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z6bt8QzklvKrpGMp .icon-shape p,#mermaid-svg-z6bt8QzklvKrpGMp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-z6bt8QzklvKrpGMp .icon-shape .label rect,#mermaid-svg-z6bt8QzklvKrpGMp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z6bt8QzklvKrpGMp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-z6bt8QzklvKrpGMp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-z6bt8QzklvKrpGMp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入向量 x
参数矩阵 W
线性变换 Wx+b
输出向量 y

例如:

W=2001 W= \begin{bmatrix} 2&0\\ 0&1 \end{bmatrix} W=2001

它会将:

x=x1x2 x= \begin{bmatrix} x_1\\ x_2 \end{bmatrix} x=x1x2

变换为:

Wx=2x1x2 Wx= \begin{bmatrix} 2x_1\\ x_2 \end{bmatrix} Wx=2x1x2

这表示:

  • 第一个特征被放大 2 倍;
  • 第二个特征保持不变。

因此,矩阵可以完成:

  • 特征放大;
  • 特征缩小;
  • 不同特征混合;
  • 空间旋转;
  • 维度压缩;
  • 信息投影。

二、大模型为什么大量使用矩阵?

Transformer 中最核心的计算,基本都离不开矩阵。

以 Attention 为例:

Q=XWQ Q=XW_Q Q=XWQ

K=XWK K=XW_K K=XWK

V=XWV V=XW_V V=XWV

其中:

  • (X):输入 token 的向量表示;
  • (W_Q):Query 参数矩阵;
  • (W_K):Key 参数矩阵;
  • (W_V):Value 参数矩阵。

#mermaid-svg-hJtwaPbDcWt5aMyl{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hJtwaPbDcWt5aMyl .error-icon{fill:#552222;}#mermaid-svg-hJtwaPbDcWt5aMyl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hJtwaPbDcWt5aMyl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hJtwaPbDcWt5aMyl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hJtwaPbDcWt5aMyl .marker.cross{stroke:#333333;}#mermaid-svg-hJtwaPbDcWt5aMyl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hJtwaPbDcWt5aMyl p{margin:0;}#mermaid-svg-hJtwaPbDcWt5aMyl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster-label text{fill:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster-label span{color:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster-label span p{background-color:transparent;}#mermaid-svg-hJtwaPbDcWt5aMyl .label text,#mermaid-svg-hJtwaPbDcWt5aMyl span{fill:#333;color:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl .node rect,#mermaid-svg-hJtwaPbDcWt5aMyl .node circle,#mermaid-svg-hJtwaPbDcWt5aMyl .node ellipse,#mermaid-svg-hJtwaPbDcWt5aMyl .node polygon,#mermaid-svg-hJtwaPbDcWt5aMyl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hJtwaPbDcWt5aMyl .rough-node .label text,#mermaid-svg-hJtwaPbDcWt5aMyl .node .label text,#mermaid-svg-hJtwaPbDcWt5aMyl .image-shape .label,#mermaid-svg-hJtwaPbDcWt5aMyl .icon-shape .label{text-anchor:middle;}#mermaid-svg-hJtwaPbDcWt5aMyl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hJtwaPbDcWt5aMyl .rough-node .label,#mermaid-svg-hJtwaPbDcWt5aMyl .node .label,#mermaid-svg-hJtwaPbDcWt5aMyl .image-shape .label,#mermaid-svg-hJtwaPbDcWt5aMyl .icon-shape .label{text-align:center;}#mermaid-svg-hJtwaPbDcWt5aMyl .node.clickable{cursor:pointer;}#mermaid-svg-hJtwaPbDcWt5aMyl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hJtwaPbDcWt5aMyl .arrowheadPath{fill:#333333;}#mermaid-svg-hJtwaPbDcWt5aMyl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hJtwaPbDcWt5aMyl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hJtwaPbDcWt5aMyl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJtwaPbDcWt5aMyl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hJtwaPbDcWt5aMyl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJtwaPbDcWt5aMyl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster text{fill:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl .cluster span{color:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hJtwaPbDcWt5aMyl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hJtwaPbDcWt5aMyl rect.text{fill:none;stroke-width:0;}#mermaid-svg-hJtwaPbDcWt5aMyl .icon-shape,#mermaid-svg-hJtwaPbDcWt5aMyl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJtwaPbDcWt5aMyl .icon-shape p,#mermaid-svg-hJtwaPbDcWt5aMyl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hJtwaPbDcWt5aMyl .icon-shape .label rect,#mermaid-svg-hJtwaPbDcWt5aMyl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJtwaPbDcWt5aMyl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hJtwaPbDcWt5aMyl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hJtwaPbDcWt5aMyl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Token 表示 X
WQ
WK
WV
Query Q
Key K
Value V
Attention

Feed-Forward Network 同样是矩阵变换:

H=σ(XW1+b1) H=\sigma(XW_1+b_1) H=σ(XW1+b1)

Y=HW2+b2 Y=HW_2+b_2 Y=HW2+b2

因此,Transformer 可以简单理解为:

text 复制代码
Token 向量
    ↓
矩阵变换
    ↓
Attention / FFN
    ↓
新的 Token 表示

模型训练的本质,就是不断调整这些矩阵中的参数。


三、矩阵的 Rank 是什么?

矩阵的 Rank,也叫矩阵的秩,可以理解为:

矩阵中真正独立的信息方向或变化模式的数量。

例如:

A=1224 A= \begin{bmatrix} 1&2\\ 2&4 \end{bmatrix} A=1224

第二行是第一行的 2 倍:

2,4\]=2\[1,2\] \[2,4\]=2\[1,2\] \[2,4\]=2\[1,2

因此,第二行没有提供新的独立方向:

rank(A)=1 rank(A)=1 rank(A)=1

虽然矩阵中有 4 个数字,但真正独立的信息只有一个方向。

再看:

B=1001 B= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix} B=1001

它的两行和两列都相互独立:

rank(B)=2 rank(B)=2 rank(B)=2


四、Rank 的几何含义

矩阵也可以看成一种空间变换。
#mermaid-svg-Wf4PUetogTYiSNkf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Wf4PUetogTYiSNkf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Wf4PUetogTYiSNkf .error-icon{fill:#552222;}#mermaid-svg-Wf4PUetogTYiSNkf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Wf4PUetogTYiSNkf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Wf4PUetogTYiSNkf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Wf4PUetogTYiSNkf .marker.cross{stroke:#333333;}#mermaid-svg-Wf4PUetogTYiSNkf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Wf4PUetogTYiSNkf p{margin:0;}#mermaid-svg-Wf4PUetogTYiSNkf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Wf4PUetogTYiSNkf .cluster-label text{fill:#333;}#mermaid-svg-Wf4PUetogTYiSNkf .cluster-label span{color:#333;}#mermaid-svg-Wf4PUetogTYiSNkf .cluster-label span p{background-color:transparent;}#mermaid-svg-Wf4PUetogTYiSNkf .label text,#mermaid-svg-Wf4PUetogTYiSNkf span{fill:#333;color:#333;}#mermaid-svg-Wf4PUetogTYiSNkf .node rect,#mermaid-svg-Wf4PUetogTYiSNkf .node circle,#mermaid-svg-Wf4PUetogTYiSNkf .node ellipse,#mermaid-svg-Wf4PUetogTYiSNkf .node polygon,#mermaid-svg-Wf4PUetogTYiSNkf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Wf4PUetogTYiSNkf .rough-node .label text,#mermaid-svg-Wf4PUetogTYiSNkf .node .label text,#mermaid-svg-Wf4PUetogTYiSNkf .image-shape .label,#mermaid-svg-Wf4PUetogTYiSNkf .icon-shape .label{text-anchor:middle;}#mermaid-svg-Wf4PUetogTYiSNkf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Wf4PUetogTYiSNkf .rough-node .label,#mermaid-svg-Wf4PUetogTYiSNkf .node .label,#mermaid-svg-Wf4PUetogTYiSNkf .image-shape .label,#mermaid-svg-Wf4PUetogTYiSNkf .icon-shape .label{text-align:center;}#mermaid-svg-Wf4PUetogTYiSNkf .node.clickable{cursor:pointer;}#mermaid-svg-Wf4PUetogTYiSNkf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Wf4PUetogTYiSNkf .arrowheadPath{fill:#333333;}#mermaid-svg-Wf4PUetogTYiSNkf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Wf4PUetogTYiSNkf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Wf4PUetogTYiSNkf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Wf4PUetogTYiSNkf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Wf4PUetogTYiSNkf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Wf4PUetogTYiSNkf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Wf4PUetogTYiSNkf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Wf4PUetogTYiSNkf .cluster text{fill:#333;}#mermaid-svg-Wf4PUetogTYiSNkf .cluster span{color:#333;}#mermaid-svg-Wf4PUetogTYiSNkf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Wf4PUetogTYiSNkf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Wf4PUetogTYiSNkf rect.text{fill:none;stroke-width:0;}#mermaid-svg-Wf4PUetogTYiSNkf .icon-shape,#mermaid-svg-Wf4PUetogTYiSNkf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Wf4PUetogTYiSNkf .icon-shape p,#mermaid-svg-Wf4PUetogTYiSNkf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Wf4PUetogTYiSNkf .icon-shape .label rect,#mermaid-svg-Wf4PUetogTYiSNkf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Wf4PUetogTYiSNkf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Wf4PUetogTYiSNkf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Wf4PUetogTYiSNkf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 二维平面
矩阵 Rank
Rank=2:仍是二维区域
Rank=1:压缩成一条线
Rank=0:压缩成一个点

因此:

  • Rank=2:保留两个独立方向;
  • Rank=1:只保留一个有效方向;
  • Rank=0:没有有效变化。

所以 Rank 也可以理解为:

矩阵变换之后,信息保留下来的有效维度。


五、矩阵大小和 Rank 不是一回事

一个 (n\times n) 的矩阵拥有:

n2 n^2 n2

个参数,但它的 Rank 最大只有:

n n n

例如:

项目 含义
矩阵大小 (10000\times10000)
参数数量 1 亿
最大 Rank 10000
Rank 的含义 独立信息方向数量

因此:

参数很多,不代表信息方向同样多。

对于任意 (n\times n) 矩阵:

0≤rank(W)≤n 0\leq rank(W)\leq n 0≤rank(W)≤n

所以一个 (n\times n) 的矩阵完全可能满足:

rank(W)<n rank(W)<n rank(W)<n


六、Rank=1 的矩阵能表达什么?

Rank=1 的矩阵可以写成两个向量的外积:

A=uvT A=uv^T A=uvT

例如:

u=12,v=34 u= \begin{bmatrix} 1\\ 2 \end{bmatrix}, \quad v= \begin{bmatrix} 3&4 \end{bmatrix} u=12,v=34

那么:

A=uvT=3468 A=uv^T= \begin{bmatrix} 3&4\\ 6&8 \end{bmatrix} A=uvT=3648

矩阵中的 4 个位置都发生了变化,但第二行是第一行的 2 倍。

这说明:
Rank=1 并不是只能修改一个参数,而是所有变化必须共享同一种模式。
#mermaid-svg-YFRvlZc3UkztxB7X{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YFRvlZc3UkztxB7X .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YFRvlZc3UkztxB7X .error-icon{fill:#552222;}#mermaid-svg-YFRvlZc3UkztxB7X .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YFRvlZc3UkztxB7X .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YFRvlZc3UkztxB7X .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YFRvlZc3UkztxB7X .marker.cross{stroke:#333333;}#mermaid-svg-YFRvlZc3UkztxB7X svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YFRvlZc3UkztxB7X p{margin:0;}#mermaid-svg-YFRvlZc3UkztxB7X .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YFRvlZc3UkztxB7X .cluster-label text{fill:#333;}#mermaid-svg-YFRvlZc3UkztxB7X .cluster-label span{color:#333;}#mermaid-svg-YFRvlZc3UkztxB7X .cluster-label span p{background-color:transparent;}#mermaid-svg-YFRvlZc3UkztxB7X .label text,#mermaid-svg-YFRvlZc3UkztxB7X span{fill:#333;color:#333;}#mermaid-svg-YFRvlZc3UkztxB7X .node rect,#mermaid-svg-YFRvlZc3UkztxB7X .node circle,#mermaid-svg-YFRvlZc3UkztxB7X .node ellipse,#mermaid-svg-YFRvlZc3UkztxB7X .node polygon,#mermaid-svg-YFRvlZc3UkztxB7X .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YFRvlZc3UkztxB7X .rough-node .label text,#mermaid-svg-YFRvlZc3UkztxB7X .node .label text,#mermaid-svg-YFRvlZc3UkztxB7X .image-shape .label,#mermaid-svg-YFRvlZc3UkztxB7X .icon-shape .label{text-anchor:middle;}#mermaid-svg-YFRvlZc3UkztxB7X .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YFRvlZc3UkztxB7X .rough-node .label,#mermaid-svg-YFRvlZc3UkztxB7X .node .label,#mermaid-svg-YFRvlZc3UkztxB7X .image-shape .label,#mermaid-svg-YFRvlZc3UkztxB7X .icon-shape .label{text-align:center;}#mermaid-svg-YFRvlZc3UkztxB7X .node.clickable{cursor:pointer;}#mermaid-svg-YFRvlZc3UkztxB7X .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YFRvlZc3UkztxB7X .arrowheadPath{fill:#333333;}#mermaid-svg-YFRvlZc3UkztxB7X .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YFRvlZc3UkztxB7X .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YFRvlZc3UkztxB7X .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YFRvlZc3UkztxB7X .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YFRvlZc3UkztxB7X .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YFRvlZc3UkztxB7X .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YFRvlZc3UkztxB7X .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YFRvlZc3UkztxB7X .cluster text{fill:#333;}#mermaid-svg-YFRvlZc3UkztxB7X .cluster span{color:#333;}#mermaid-svg-YFRvlZc3UkztxB7X div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YFRvlZc3UkztxB7X .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YFRvlZc3UkztxB7X rect.text{fill:none;stroke-width:0;}#mermaid-svg-YFRvlZc3UkztxB7X .icon-shape,#mermaid-svg-YFRvlZc3UkztxB7X .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YFRvlZc3UkztxB7X .icon-shape p,#mermaid-svg-YFRvlZc3UkztxB7X .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YFRvlZc3UkztxB7X .icon-shape .label rect,#mermaid-svg-YFRvlZc3UkztxB7X .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YFRvlZc3UkztxB7X .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YFRvlZc3UkztxB7X .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YFRvlZc3UkztxB7X :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 基础方向 1
组合后的 Rank=1 矩阵
基础方向 2
多个参数同步变化
但变化之间存在固定关联


七、为什么 Rank=1 不能表达所有变化?

假设我们想要:

ΔW=100−1 \Delta W= \begin{bmatrix} 1&0\\ 0&-1 \end{bmatrix} ΔW=100−1

这个变化表示:

  • 左上角增加 1;
  • 右下角减少 1;
  • 其他位置不变。

这是两个相互独立的变化方向,因此:

rank(ΔW)=2 rank(\Delta W)=2 rank(ΔW)=2

如果使用 Rank=1 的矩阵,就无法精确表达它,只能得到一个近似结果。

所以:

  • Rank=1:只能表达一个主要变化模式;
  • Rank=2:可以表达两个独立变化模式;
  • Rank=8:可以组合八个基础变化方向。

注意:

Rank=8 不是只能修改 8 个参数,而是所有参数变化都由 8 个基础方向组合而来。


八、矩阵分解可以是精确的,也可以是近似的

矩阵分解不一定只能近似。

如果目标矩阵的 Rank 不超过分解使用的 Rank,就可以精确表示:

ΔW=BA \Delta W=BA ΔW=BA

如果目标矩阵的 Rank 大于分解使用的 Rank,则只能近似:

ΔW≈BA \Delta W\approx BA ΔW≈BA

例如,目标矩阵的 Rank 是 2:

分解 Rank 结果
(r=1) 只能近似
(r=2) 可以精确表示
(r>2) 也可以精确表示,但可能存在冗余

因此,低秩分解的核心是:

用较少的独立方向,表示一个可能更复杂的矩阵。


九、LoRA:用低秩矩阵表示参数更新

LoRA 的基本公式是:

W′=W+ΔW W'=W+\Delta W W′=W+ΔW

LoRA 不直接训练完整的 (\Delta W),而是将它表示为:

ΔW=BA \Delta W=BA ΔW=BA

因此:

W′=W+BA W'=W+BA W′=W+BA

其中:

  • (W):原始模型参数,保持冻结;
  • (A,B):可训练的小矩阵;
  • (r):LoRA 的 Rank。

#mermaid-svg-OZHQI7sZHFwxgWWJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OZHQI7sZHFwxgWWJ .error-icon{fill:#552222;}#mermaid-svg-OZHQI7sZHFwxgWWJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OZHQI7sZHFwxgWWJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .marker.cross{stroke:#333333;}#mermaid-svg-OZHQI7sZHFwxgWWJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OZHQI7sZHFwxgWWJ p{margin:0;}#mermaid-svg-OZHQI7sZHFwxgWWJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster-label text{fill:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster-label span{color:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster-label span p{background-color:transparent;}#mermaid-svg-OZHQI7sZHFwxgWWJ .label text,#mermaid-svg-OZHQI7sZHFwxgWWJ span{fill:#333;color:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .node rect,#mermaid-svg-OZHQI7sZHFwxgWWJ .node circle,#mermaid-svg-OZHQI7sZHFwxgWWJ .node ellipse,#mermaid-svg-OZHQI7sZHFwxgWWJ .node polygon,#mermaid-svg-OZHQI7sZHFwxgWWJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .rough-node .label text,#mermaid-svg-OZHQI7sZHFwxgWWJ .node .label text,#mermaid-svg-OZHQI7sZHFwxgWWJ .image-shape .label,#mermaid-svg-OZHQI7sZHFwxgWWJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-OZHQI7sZHFwxgWWJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .rough-node .label,#mermaid-svg-OZHQI7sZHFwxgWWJ .node .label,#mermaid-svg-OZHQI7sZHFwxgWWJ .image-shape .label,#mermaid-svg-OZHQI7sZHFwxgWWJ .icon-shape .label{text-align:center;}#mermaid-svg-OZHQI7sZHFwxgWWJ .node.clickable{cursor:pointer;}#mermaid-svg-OZHQI7sZHFwxgWWJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .arrowheadPath{fill:#333333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OZHQI7sZHFwxgWWJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OZHQI7sZHFwxgWWJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OZHQI7sZHFwxgWWJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster text{fill:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ .cluster span{color:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OZHQI7sZHFwxgWWJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OZHQI7sZHFwxgWWJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-OZHQI7sZHFwxgWWJ .icon-shape,#mermaid-svg-OZHQI7sZHFwxgWWJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OZHQI7sZHFwxgWWJ .icon-shape p,#mermaid-svg-OZHQI7sZHFwxgWWJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OZHQI7sZHFwxgWWJ .icon-shape .label rect,#mermaid-svg-OZHQI7sZHFwxgWWJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OZHQI7sZHFwxgWWJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OZHQI7sZHFwxgWWJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OZHQI7sZHFwxgWWJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 原始权重 W
最终权重 W+BA
低秩矩阵 A、B
冻结
训练


十、LoRA 为什么能减少参数?

假设原始矩阵为:

W∈R4096×4096 W\in\mathbb{R}^{4096\times4096} W∈R4096×4096

如果直接训练完整更新矩阵,需要:

4096×4096≈16.8 million 4096\times4096\approx16.8\text{ million} 4096×4096≈16.8 million

个参数。

如果使用 LoRA,并设置:

r=8 r=8 r=8

那么只需训练:

4096×8+8×4096=65,536 4096\times8+8\times4096=65,536 4096×8+8×4096=65,536

个参数。

对比:

方法 可训练参数量
全量微调 约 1680 万
LoRA,(r=8) 约 6.5 万

因此,LoRA 具有:

  • 显存占用低;
  • 训练速度快;
  • 参数量少;
  • Adapter 易于保存;
  • 多个任务可以共享基础模型。

十一、LoRA 中 Rank 小意味着什么?

LoRA 的 (r) 不是"只能学习 (r) 个参数",而是:

最多使用 (r) 个基础变化方向。

例如:
#mermaid-svg-ghf7g9KcZHWxWrYA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ghf7g9KcZHWxWrYA .error-icon{fill:#552222;}#mermaid-svg-ghf7g9KcZHWxWrYA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ghf7g9KcZHWxWrYA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ghf7g9KcZHWxWrYA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ghf7g9KcZHWxWrYA .marker.cross{stroke:#333333;}#mermaid-svg-ghf7g9KcZHWxWrYA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ghf7g9KcZHWxWrYA p{margin:0;}#mermaid-svg-ghf7g9KcZHWxWrYA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster-label text{fill:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster-label span{color:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster-label span p{background-color:transparent;}#mermaid-svg-ghf7g9KcZHWxWrYA .label text,#mermaid-svg-ghf7g9KcZHWxWrYA span{fill:#333;color:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA .node rect,#mermaid-svg-ghf7g9KcZHWxWrYA .node circle,#mermaid-svg-ghf7g9KcZHWxWrYA .node ellipse,#mermaid-svg-ghf7g9KcZHWxWrYA .node polygon,#mermaid-svg-ghf7g9KcZHWxWrYA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ghf7g9KcZHWxWrYA .rough-node .label text,#mermaid-svg-ghf7g9KcZHWxWrYA .node .label text,#mermaid-svg-ghf7g9KcZHWxWrYA .image-shape .label,#mermaid-svg-ghf7g9KcZHWxWrYA .icon-shape .label{text-anchor:middle;}#mermaid-svg-ghf7g9KcZHWxWrYA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ghf7g9KcZHWxWrYA .rough-node .label,#mermaid-svg-ghf7g9KcZHWxWrYA .node .label,#mermaid-svg-ghf7g9KcZHWxWrYA .image-shape .label,#mermaid-svg-ghf7g9KcZHWxWrYA .icon-shape .label{text-align:center;}#mermaid-svg-ghf7g9KcZHWxWrYA .node.clickable{cursor:pointer;}#mermaid-svg-ghf7g9KcZHWxWrYA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ghf7g9KcZHWxWrYA .arrowheadPath{fill:#333333;}#mermaid-svg-ghf7g9KcZHWxWrYA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ghf7g9KcZHWxWrYA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ghf7g9KcZHWxWrYA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ghf7g9KcZHWxWrYA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ghf7g9KcZHWxWrYA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ghf7g9KcZHWxWrYA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster text{fill:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA .cluster span{color:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ghf7g9KcZHWxWrYA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ghf7g9KcZHWxWrYA rect.text{fill:none;stroke-width:0;}#mermaid-svg-ghf7g9KcZHWxWrYA .icon-shape,#mermaid-svg-ghf7g9KcZHWxWrYA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ghf7g9KcZHWxWrYA .icon-shape p,#mermaid-svg-ghf7g9KcZHWxWrYA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ghf7g9KcZHWxWrYA .icon-shape .label rect,#mermaid-svg-ghf7g9KcZHWxWrYA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ghf7g9KcZHWxWrYA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ghf7g9KcZHWxWrYA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ghf7g9KcZHWxWrYA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 任务微调需求
变化方向 1
变化方向 2
变化方向 3
变化方向 4
LoRA Rank=2
无法完整表达

如果任务只需要一个主要变化模式,(r=1) 可能就够。

如果任务同时涉及:

  • 中文语义;
  • 代码保护;
  • JSON 结构;
  • 工具调用;
  • 专业术语;
  • 风格变化;

这些变化可能更加独立,就需要更大的 Rank,或者直接使用全量微调。


十二、LoRA 的问题是什么?

LoRA 直接使用:

ΔW=BA \Delta W=BA ΔW=BA

但实际权重变化通常包含两部分:

  1. 权重大小变化;
  2. 权重方向变化。

可以把权重想象成一个箭头:

  • 箭头长度:权重大小;
  • 箭头方向:权重方向。

例如:

text 复制代码
原始权重:长度 10,方向 30°
微调权重:长度 12,方向 35°

这包含两种变化:

text 复制代码
长度:10 → 12
方向:30° → 35°

LoRA 需要用同一个低秩更新同时学习这两种变化。

当 Rank 较小或训练数据较少时,不同变化可能争夺有限的低秩表达空间:

text 复制代码
一个更新方向同时负责:
- 增强某些特征
- 改变某些语义方向
- 保留某些结构信息

这可能导致:

  • 某些变化学得不充分;
  • 不同任务之间互相干扰;
  • 在训练数据上有效,但泛化不稳定。

十三、DoRA:将大小和方向分开学习

DoRA 的核心思想是:

将权重大小和权重方向拆开学习。

它将权重表示为:

W=mV∥V∥ W=m\frac{V}{\|V\|} W=m∥V∥V

其中:

  • (m):权重大小;
  • (V/|V|):权重方向。

微调后的权重可以写成:

W′=m′W+BA∥W+BA∥ W'=m'\frac{W+BA}{\|W+BA\|} W′=m′∥W+BA∥W+BA

其中:

  • (m'):单独训练的大小参数;
  • (BA):使用 LoRA 学习方向变化。

#mermaid-svg-tIPzM1eFn3aUgknC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tIPzM1eFn3aUgknC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tIPzM1eFn3aUgknC .error-icon{fill:#552222;}#mermaid-svg-tIPzM1eFn3aUgknC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tIPzM1eFn3aUgknC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tIPzM1eFn3aUgknC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tIPzM1eFn3aUgknC .marker.cross{stroke:#333333;}#mermaid-svg-tIPzM1eFn3aUgknC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tIPzM1eFn3aUgknC p{margin:0;}#mermaid-svg-tIPzM1eFn3aUgknC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tIPzM1eFn3aUgknC .cluster-label text{fill:#333;}#mermaid-svg-tIPzM1eFn3aUgknC .cluster-label span{color:#333;}#mermaid-svg-tIPzM1eFn3aUgknC .cluster-label span p{background-color:transparent;}#mermaid-svg-tIPzM1eFn3aUgknC .label text,#mermaid-svg-tIPzM1eFn3aUgknC span{fill:#333;color:#333;}#mermaid-svg-tIPzM1eFn3aUgknC .node rect,#mermaid-svg-tIPzM1eFn3aUgknC .node circle,#mermaid-svg-tIPzM1eFn3aUgknC .node ellipse,#mermaid-svg-tIPzM1eFn3aUgknC .node polygon,#mermaid-svg-tIPzM1eFn3aUgknC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tIPzM1eFn3aUgknC .rough-node .label text,#mermaid-svg-tIPzM1eFn3aUgknC .node .label text,#mermaid-svg-tIPzM1eFn3aUgknC .image-shape .label,#mermaid-svg-tIPzM1eFn3aUgknC .icon-shape .label{text-anchor:middle;}#mermaid-svg-tIPzM1eFn3aUgknC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tIPzM1eFn3aUgknC .rough-node .label,#mermaid-svg-tIPzM1eFn3aUgknC .node .label,#mermaid-svg-tIPzM1eFn3aUgknC .image-shape .label,#mermaid-svg-tIPzM1eFn3aUgknC .icon-shape .label{text-align:center;}#mermaid-svg-tIPzM1eFn3aUgknC .node.clickable{cursor:pointer;}#mermaid-svg-tIPzM1eFn3aUgknC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tIPzM1eFn3aUgknC .arrowheadPath{fill:#333333;}#mermaid-svg-tIPzM1eFn3aUgknC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tIPzM1eFn3aUgknC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tIPzM1eFn3aUgknC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tIPzM1eFn3aUgknC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tIPzM1eFn3aUgknC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tIPzM1eFn3aUgknC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tIPzM1eFn3aUgknC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tIPzM1eFn3aUgknC .cluster text{fill:#333;}#mermaid-svg-tIPzM1eFn3aUgknC .cluster span{color:#333;}#mermaid-svg-tIPzM1eFn3aUgknC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tIPzM1eFn3aUgknC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tIPzM1eFn3aUgknC rect.text{fill:none;stroke-width:0;}#mermaid-svg-tIPzM1eFn3aUgknC .icon-shape,#mermaid-svg-tIPzM1eFn3aUgknC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tIPzM1eFn3aUgknC .icon-shape p,#mermaid-svg-tIPzM1eFn3aUgknC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tIPzM1eFn3aUgknC .icon-shape .label rect,#mermaid-svg-tIPzM1eFn3aUgknC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tIPzM1eFn3aUgknC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tIPzM1eFn3aUgknC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tIPzM1eFn3aUgknC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 原始权重 W
方向分支
大小分支
LoRA BA
可训练 magnitude m
归一化方向
权重大小
最终权重 W'

可以简单理解为:

text 复制代码
LoRA:
一个补丁同时负责"改变大小"和"改变方向"

DoRA:
一个模块负责"改变大小"
一个 LoRA 模块负责"改变方向"

十四、LoRA 和 DoRA 的区别

对比项 LoRA DoRA
基本公式 (W'=W+BA) (W'=m'\frac{W+BA}{|W+BA|})
学习内容 整体权重变化 权重大小与方向
参数量 略多
训练复杂度 较低 略高
工程成熟度 很高 相对较低
适合定位 默认高效微调 LoRA 的增强方案

DoRA 的优化点是:

减少"大小变化"和"方向变化"之间的相互干扰,使模型能够更细致地学习参数变化。

但 DoRA 并不意味着:

  • 一定比 LoRA 好;
  • 一定不会遗忘;
  • 一定降低显存;
  • 可以替代高质量训练数据。

十五、如何选择全量微调、LoRA、QLoRA 和 DoRA?

#mermaid-svg-B6TQytRk9uzeV7DC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-B6TQytRk9uzeV7DC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-B6TQytRk9uzeV7DC .error-icon{fill:#552222;}#mermaid-svg-B6TQytRk9uzeV7DC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-B6TQytRk9uzeV7DC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-B6TQytRk9uzeV7DC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-B6TQytRk9uzeV7DC .marker.cross{stroke:#333333;}#mermaid-svg-B6TQytRk9uzeV7DC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-B6TQytRk9uzeV7DC p{margin:0;}#mermaid-svg-B6TQytRk9uzeV7DC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-B6TQytRk9uzeV7DC .cluster-label text{fill:#333;}#mermaid-svg-B6TQytRk9uzeV7DC .cluster-label span{color:#333;}#mermaid-svg-B6TQytRk9uzeV7DC .cluster-label span p{background-color:transparent;}#mermaid-svg-B6TQytRk9uzeV7DC .label text,#mermaid-svg-B6TQytRk9uzeV7DC span{fill:#333;color:#333;}#mermaid-svg-B6TQytRk9uzeV7DC .node rect,#mermaid-svg-B6TQytRk9uzeV7DC .node circle,#mermaid-svg-B6TQytRk9uzeV7DC .node ellipse,#mermaid-svg-B6TQytRk9uzeV7DC .node polygon,#mermaid-svg-B6TQytRk9uzeV7DC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-B6TQytRk9uzeV7DC .rough-node .label text,#mermaid-svg-B6TQytRk9uzeV7DC .node .label text,#mermaid-svg-B6TQytRk9uzeV7DC .image-shape .label,#mermaid-svg-B6TQytRk9uzeV7DC .icon-shape .label{text-anchor:middle;}#mermaid-svg-B6TQytRk9uzeV7DC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-B6TQytRk9uzeV7DC .rough-node .label,#mermaid-svg-B6TQytRk9uzeV7DC .node .label,#mermaid-svg-B6TQytRk9uzeV7DC .image-shape .label,#mermaid-svg-B6TQytRk9uzeV7DC .icon-shape .label{text-align:center;}#mermaid-svg-B6TQytRk9uzeV7DC .node.clickable{cursor:pointer;}#mermaid-svg-B6TQytRk9uzeV7DC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-B6TQytRk9uzeV7DC .arrowheadPath{fill:#333333;}#mermaid-svg-B6TQytRk9uzeV7DC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-B6TQytRk9uzeV7DC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-B6TQytRk9uzeV7DC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-B6TQytRk9uzeV7DC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-B6TQytRk9uzeV7DC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-B6TQytRk9uzeV7DC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-B6TQytRk9uzeV7DC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-B6TQytRk9uzeV7DC .cluster text{fill:#333;}#mermaid-svg-B6TQytRk9uzeV7DC .cluster span{color:#333;}#mermaid-svg-B6TQytRk9uzeV7DC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-B6TQytRk9uzeV7DC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-B6TQytRk9uzeV7DC rect.text{fill:none;stroke-width:0;}#mermaid-svg-B6TQytRk9uzeV7DC .icon-shape,#mermaid-svg-B6TQytRk9uzeV7DC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-B6TQytRk9uzeV7DC .icon-shape p,#mermaid-svg-B6TQytRk9uzeV7DC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-B6TQytRk9uzeV7DC .icon-shape .label rect,#mermaid-svg-B6TQytRk9uzeV7DC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-B6TQytRk9uzeV7DC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-B6TQytRk9uzeV7DC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-B6TQytRk9uzeV7DC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是





开始微调
显存是否紧张?
优先 QLoRA
模型规模和数据量是否可控?
先做全量微调基线
优先 LoRA
LoRA 效果是否不足?
尝试 DoRA
继续使用 LoRA

一般建议:

方法 适用场景
全量微调 模型较小、数据充足、追求效果上限
LoRA 通用生产首选
QLoRA 显存不足时使用
DoRA LoRA 效果不足时尝试
QDoRA 量化模型上使用 DoRA

十六、如何增强新能力又保留原始能力?

如果只使用新领域数据进行全量微调,可能出现灾难性遗忘。

例如:

text 复制代码
中文能力提升
英文能力下降
代码能力下降
原始领域泛化能力下降

更稳妥的方式是:

方案一:使用独立 Adapter

text 复制代码
基础模型
├── 中文 Adapter
├── 英文 Adapter
└── 代码 Adapter

根据请求语言和任务类型选择不同 Adapter。

方案二:混合新旧数据

训练数据同时包含:

text 复制代码
新领域数据 + 原始能力数据 + 多领域数据

损失函数可以表示为:

L=λLnew+(1−λ)Loriginal L=\lambda L_{\text{new}}+(1-\lambda)L_{\text{original}} L=λLnew+(1−λ)Loriginal

这样模型在学习新能力的同时,也会复习原始能力。

方案三:建立回归评测集

需要分别评估:

  • 新领域任务效果;
  • 原始任务效果;
  • 不同语言表现;
  • 代码能力;
  • 工具调用能力;
  • 推理延迟;
  • 显存和训练成本。

十七、最终总结

矩阵是大模型进行特征变换和信息传递的基本工具。

Rank 表示矩阵中真正独立的信息方向数量,也可以理解为矩阵变换后保留下来的有效维度。

LoRA 的核心是:

W′=W+BA W'=W+BA W′=W+BA

它假设:

ΔW=W′−W \Delta W=W'-W ΔW=W′−W

可以用较低的 Rank 近似表示。

DoRA 则进一步将权重变化拆成:

text 复制代码
权重大小变化
+
权重方向变化

从而减少两类变化之间的相互干扰。

可以用一句话概括:

矩阵负责变换信息,Rank 表示独立信息方向,LoRA 用低秩矩阵高效学习任务变化,DoRA 则把权重大小和方向分开学习。

相关推荐
不辣的皮蛋君3 小时前
- 短视频矩阵怎么对接售后运营?的全面解析与应用指南
线性代数·矩阵
TKcloudmaster_H6 小时前
拆解TK跨境矩阵逻辑:不同区域该怎么规避违规风险
大数据·矩阵·新媒体运营·产品运营·流量运营
小小龙学IT7 小时前
GLM 开源图形学数学库深度解析:从向量、矩阵到四元数的完整实战
c++·矩阵·开源·mfc
Lyyaoo.10 小时前
【矩阵】【中等】螺旋矩阵
线性代数·矩阵
ACP广源盛139246256731 天前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
CIO_Alliance1 天前
AI深度系列(2)| CNN卷积池化感受野原理:从局部感知到全局视野
人工智能·深度学习·线性代数·算法·计算机视觉·企业ai转型·企业cio联盟
民乐团扒谱机1 天前
【微科普】压缩感知(CS):违反了奈奎斯特采样定理?不先采集也能还原信号?大白话讲透稀疏采样、L1重建与OMP,一文吃透附代码
python·神经网络·线性代数·算法·数学建模·压缩感知·奈奎斯特
Jasmine_llq2 天前
《P11248 [GESP202409 七级] 矩阵移动》
线性代数·三维 dp·转移来源上i‑1j左边ij‑1·当前字符为两个分支改或者不改·初值全部赋值负无穷,代表不可达·起点特殊初始化·答案取dpnm0]里最大值
ZJU_统一阿萨姆3 天前
【算子开发】矩阵乘法(GEMM)入门与共享内存优化
人工智能·线性代数·矩阵·系统架构