今天主要介紹的主題是關於 LLM 的微調(Fine-tuning),會簡單帶過微調的基本概念,然後介紹可以快速對 LLM 模型進行微調的工具 Unsloth,讓各位稍爲瞭解微調模型的基本資訊後,可以自己動手操作。
碎碎念:IT 邦幫忙居然不能使用 LaTex 🙂
Unsloth 是一款讓 LLM fine-tuning 變地更快、更省記憶體的開源工具,在 GitHub 上提供了很多 Colab 模版,提供給使用者可以直接在 Colab 上進行微調訓練。
因爲微調的範圍很廣,不是三言兩語可以說清楚的。這邊先做簡單的微調假設:(1)希望微調後的模型能夠在某個特定任務上表現更好;(2)沒有要壓縮模型大小(如:蒸餾、剪枝等)。基於以上假設,常見的微調方法有三種:
在 Unsloth 裡面,主要是使用 PEFT 的方法來進行微調,主要是因爲使用全模型微調的話,對於記憶體的需求會非常高,同時全模型微調不一定會帶來更好的效果。Unsloth 目前支援兩種 PEFT 的方法:
數學符號 | 解釋 |
---|---|
$W'$ | 更新後的權重矩陣 |
$W$ | 原始權重矩陣 |
$\Delta W$ | 調整項(由 LoRA 訓練得到) |
$A, B$ | 低秩分解出的可訓練的矩陣 |
$
W =
\underbrace{\left[\begin{array}{ccccccc}
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\end{array}\right]}_{n\times n}
$
$
\Delta W =
\underbrace{\left[\begin{array}{c}
\square \
\square \
\square \
\square \
\square \
\square \
\square \
\end{array}\right]}{n\times r}
\times
\underbrace{\left[\begin{array}{ccccccc}
\square & \square & \square & \square & \square & \square & \square \
\end{array}\right]}{r\times n}
= \underbrace{\left[\begin{array}{ccccccc}
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\end{array}\right]}_{n\times n}
$
$
W' =
\underbrace{\left[\begin{array}{ccccccc}
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\square & \square & \square & \square & \square & \square & \square \
\end{array}\right]}{n\times n}
;+;
\left(
\underbrace{\left[\begin{array}{c}
\square \ \square \ \square \ \square \ \square \ \square \ \square
\end{array}\right]}{n\times r}
;\times;
\underbrace{\left[\begin{array}{ccccccc}
\square & \square & \square & \square & \square & \square & \square
\end{array}\right]}_{r\times n}
\right)
$