TROISINH
FoundationsAlignment & Adaptation

LoRA — 2 ma trận nhỏ xấp xỉ cả weight update

Hiểu vì sao LoRA chỉ cần 0.01% tham số để fine-tune LLM 70B, thay vì cập nhật cả trăm tỷ weight như full fine-tuning.

Training một model 70B parameter để trở thành trợ lý chuyên biệt từng đòi hỏi hàng triệu đô và cả cụm GPU. Ngày nay, với LoRA, bạn có thể làm điều đó trên một chiếc laptop gaming. Đây là kỹ thuật đã biến fine-tuning từ đặc quyền của Big Tech thành công cụ bình dân, cho phép bạn "ghim" bất kỳ phong cách hay kỹ năng nào vào model chỉ bằng vài MB dữ liệu.

Vấn đề

Full fine-tuning là cơn ác mộng về tài nguyên. Khi bạn muốn dạy LLM một nhiệm vụ mới (ví dụ: viết email theo phong cách công ty), cách truyền thống là cập nhật toàn bộ weight matrix — thường là hàng trăm tỷ con số. Với model 70B, bạn cần 140GB bộ nhớ chỉ để lưu gradients, chưa kể optimizer states (Adam cần gấp đôi). Tổng cộng: hơn 1TB VRAM và tuần lễ training trên 8x A100.

Vấn đề còn tệ hơn: mỗi lần fine-tune cho một task, bạn tạo ra một bản sao model mới toanh. Muốn 10 khách hàng với 10 phong cách khác nhau? Chuẩn bị 1.4TB lưu trữ. Thêm nữa, full fine-tuning dễ gây catastrophic forgetting — model quên kiến thức chung để nhồi nhét task mới.

Nhưng insight cốt lõi là: research (Aghajanyan et al., 2020) chỉ ra rằng, dù model có 175B parameter, các cập nhật hữu ích trong fine-tuning thực chất chỉ nằm trong một không gian con (subspace) rất nhỏ — có thể chỉ vài chục chiều. Chúng ta đang trả giá cho toàn bộ không gian nghìn chiều chỉ để thay đổi một góc nhỏ.

Ý tưởng cốt lõi

"Aha" moment: Thay vì sửa toàn bộ thư viện, hãy thêm một tờ ghi chú vào lề sách.

LoRA (Low-Rank Adaptation) nhận ra rằng ma trận cập nhật ΔW\Delta W (hiệu chỉnh cần áp dụng cho weight gốc) thực chất có rank thấp (low-rank). Thay vì lưu trữ và tính toán toàn bộ ΔW\Delta W có kích thước d×kd \times k, LoRA phân rã nó thành tích của hai ma trận nhỏ: BB (kích thước d×rd \times r) và AA (kích thước r×kr \times k), với rmin(d,k)r \ll \min(d,k) — thường là 8, 16, hoặc 64.

Công thức đơn giản đến ngạc nhiên: W=W+αrBAW' = W + \frac{\alpha}{r} BA

Trong đó:

  • WW là weight gốc (frozen, không thay đổi)
  • BBAA là hai ma trận được khởi tạo ngẫu nhiên (A) và zero (B), để đảm bảo bắt đầu từ model gốc
  • rr là rank, điều khiển "độ lớn" của không gian thay đổi
  • α\alpha là scaling factor (thường bằng rr hoặc 2r2r)

Đó là toàn bộ bí mật. Bạn chỉ train BBAA — chỉ 0.01% số parameter — trong khi WW giữ nguyên. Hãy tưởng tượng model như một tàu sân bay: thay vì đóng lại cả con tàu cho mỗi nhiệm vụ mới, bạn chỉ thay đổi bánh lái (low-rank matrices) để điều hướng con tàu đến đích mới.

Tại sao rank thấp lại đủ? Vì fine-tuning không dạy model kiến thức mới từ zero; nó chỉ "điều chỉnh" cách model áp dụng kiến thức đã có để phù hợp với format hoặc phong cách cụ thể. Sự thay đổi cần thiết nằm gọn trong một mặt phẳng cong nhỏ của không gian parameter khổng lồ.

Tại sao nó hoạt động

Giả thuyết Chiều Nội Tại (Intrinsic Dimensionality): Mạng neural over-parameterized không sử dụng hết tất cả các hướng trong không gian parameter. Tập hợp các giải pháp tốt cho một task cụ thể tạo thành một đa tạp (manifold) có chiều thấp lồng trong không gian cao chiều. LoRA khai thác điểm này bằng cách chỉ tìm kiếm trong không gian con rr-chiều thay vì toàn bộ d×kd \times k chiều.

Toán học đằng sau sự tiết kiệm:

  • Full fine-tuning 175B model: Cần lưu 175B×2175B \times 2 (Adam moments) ×4\times 4 bytes \approx 1.4TB memory.
  • LoRA với r=16r=16: Chỉ cần lưu 2×16×d×k2 \times 16 \times d \times k parameters. Với layer 4096×4096, đây là chỉ ~0.1MB per layer. Tổng cộng vài chục MB cho cả model.

Tính ổn định:BB khởi tạo zero, BABA ban đầu là ma trận zero, nên W=WW' = W tại bước đầu tiên. Model bắt đầu từ pretrained state và dần dần "rẽ nhánh" vào task mới, thay vì nhảy vào không gian ngẫu nhiên. Điều này tránh catastrophic forgetting và giữ được kiến thức tổng quát của base model.

Inference: Trong lúc suy luận, WWBABA có thể merge lại thành một ma trận duy nhất Wmerged=W+αrBAW_\text{merged} = W + \frac{\alpha}{r}BA bằng phép cộng đơn giản, không tốn thêm thời gian tính toán so với model gốc nếu đã merge trước. Nếu không merge, chi phí là một phép nhân ma trận nhỏ BABA rất nhanh.

Ý nghĩa thực tế

Dân chủ hóa Fine-tuning: Bạn có thể fine-tune Llama-70B trên RTX 4090 (24GB VRAM) thay vì cần 8x A100. Điều này mở ra khả năng customization cho startups, researchers, và hobbyists.

Lưu trữ siêu nhẹ: Checkpoint LoRA chỉ ~10-30MB (tùy rank) so với 140GB của full model. Bạn có thể lưu hàng nghìn "nhân cách" khác nhau của model trên ổ cứng thường và swap chúng trong vài giây bằng cách load lại BBAA, trong khi giữ base model cố định trong RAM.

Multi-task Serving: Production systems có thể giữ một base model 70B trong memory và phục vụ 100 khách hàng với 100 LoRA adapters khác nhau, switch giữa chúng mà không cần reload hàng trăm GB weights.

Limitations cần biết:

  • Không thể dạy kiến thức hoàn toàn mới: LoRA chỉ "steer" (điều hướng) kiến thức đã có trong base model. Nếu model chưa từng thấy tiếng Swahili, LoRA không thể dạy nó từ đầu.
  • Hyperparameter sensitivity: Rank rr cần chọn đúng — quá nhỏ thì underfit, quá lớn thì mất lợi ích bộ nhớ và có thể overfit.
  • Latency nhẹ: Nếu không merge weights, mỗi forward pass cần thêm một phép nhân ma trận nhỏ BABA, tăng ~1-5% latency.

Đào sâu hơn

  • Paper gốc: Hu et al., "LoRA: Low-Rank Adaptation of Large Language Models" (ICLR 2022) — Phát hiện rằng ΔW\Delta W có rank thấp và cách phân rã BABA với r=8r=8 đủ để đạt 99.9% hiệu năng full fine-tuning trên GPT-3 175B.

  • Cùng cụm (Alignment & Adaptation):

    • SFT (Supervised Fine-Tuning) — Stage thường áp dụng LoRA để dạy model bắt chước output chất lượng cao mà không tốn tài nguyên.
    • Instruction Tuning — Mục tiêu chính của LoRA: chuyển model từ "nối text" thành "làm theo lệnh" chỉ với vài nghìn examples.
    • Chain-of-Thought — LoRA thường được dùng để fine-tune model sinh ra reasoning step-by-step thay vì chỉ đưa ra đáp án.
  • Đọc tiếp (Efficiency & Advanced Alignment):

    • QLoRA — Kết hợp 4-bit quantization với LoRA để fine-tune model 70B trên GPU 24GB, tiết kiệm thêm 4x bộ nhớ.
    • DPO — Alignment không cần reward model, thường dùng LoRA để tối ưu preference trên phần cứng giới hạn.
    • GRPO — Reinforcement Learning cho reasoning (như DeepSeek-R1) áp dụng LoRA để train trên consumer hardware với memory giảm nửa so với PPO.

On this page