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 (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ộ có kích thước , LoRA phân rã nó thành tích của hai ma trận nhỏ: (kích thước ) và (kích thước ), với — thường là 8, 16, hoặc 64.
Công thức đơn giản đến ngạc nhiên:
Trong đó:
- là weight gốc (frozen, không thay đổi)
- và 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
- là rank, điều khiển "độ lớn" của không gian thay đổi
- là scaling factor (thường bằng hoặc )
Đó là toàn bộ bí mật. Bạn chỉ train và — chỉ 0.01% số parameter — trong khi 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 -chiều thay vì toàn bộ chiều.
Toán học đằng sau sự tiết kiệm:
- Full fine-tuning 175B model: Cần lưu (Adam moments) bytes 1.4TB memory.
- LoRA với : Chỉ cần lưu 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: Vì khởi tạo zero, ban đầu là ma trận zero, nên 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, và có thể merge lại thành một ma trận duy nhất 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ỏ 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 và , 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 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ỏ , 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 có rank thấp và cách phân rã với đủ để đạ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.
Reward Modeling — Neural net chấm điểm thay con người
Reward Model là 'trọng tài' AI tự động chấm điểm câu trả lời, giúp huấn luyện LLM bằng RLHF mà không cần con người ngồi canh từng token.
Prompt Engineering — Zero-shot, Few-shot, và nghệ thuật 'ra đề'
Từ zero-shot đến few-shot: cách 'ra đề' khéo léo để khai thác triệt để khả năng ẩn trong LLM mà không cần huấn luyện lại.