Hiểu sâu về MoE (Mixture of Experts) - Kiến trúc đứng sau mọi LLM hàng đầu
Từ GPT-4, Gemini, DeepSeek V3 đến Kimi K2, MiniMax M2.5 — tất cả đều dùng chung một kiến trúc: MoE (Mixture of Experts). Đây không còn là "tính năng" thử nghiệm nữa, mà là xương sống kiến trúc của mọi mô hình ngôn ngữ lớn hàng đầu hiện nay.
Nhưng MoE hoạt động thế nào? Tại sao nó cho phép mô hình 1.000 tỷ tham số chạy với chi phí chỉ bằng mô hình 32 tỷ? Router định tuyến token ra sao? Làm thế nào để tránh "chuyên gia chết"?
Bài viết này giúp bạn hiểu tận gốc kiến trúc MoE — từ nguyên lý cơ bản đến chi tiết triển khai, kèm ví dụ minh họa và so sánh thực tế giữa các mô hình.
Tổng quan nhanh: MoE là gì?
MoE (Mixture of Experts) là một kiến trúc cho phép tạo ra những mô hình siêu lớn nhưng vẫn chạy nhanh và tiết kiệm tài nguyên. Thay vì dùng toàn bộ bộ não cho mọi tác vụ, MoE chỉ kích hoạt một phần nhỏ phù hợp nhất — giống như bệnh viện có 100 bác sĩ nhưng với mỗi bệnh nhân, bạn chỉ gọi đúng 1-2 chuyên khoa.
Toàn bộ tham số được kích hoạt cho MỌI token
→ Chậm, tốn compute, không scale được
Chỉ 1-2 expert được kích hoạt mỗi token
→ Nhanh, tiết kiệm, scale không giới hạn
Tại sao cần MoE? Đơn giản: muốn mô hình thông minh hơn thì cần nhiều tham số hơn. Nhưng với kiến trúc Dense, thêm tham số = thêm chi phí tính toán tuyến tính. MoE phá vỡ ràng buộc này: tham số tổng tăng vọt, nhưng chi phí mỗi token gần như không đổi.
Kiến trúc cốt lõi: 2 trụ cột
Một lớp MoE thay thế khối FFN (Feed-Forward Network) truyền thống trong Transformer bằng 2 thành phần:
1. Experts (Chuyên gia)
Mỗi expert là một mạng FFN nhỏ, độc lập, có cùng cấu trúc nhưng tham số khác nhau. Qua quá trình huấn luyện, mỗi expert tự học cách chuyên môn hóa vào một miền tri thức hoặc kiểu xử lý riêng:
| Expert | Có thể chuyên về | Ví dụ input phù hợp |
|---|---|---|
| E₁ | Toán học, logic | x² + 2x + 1 = 0, O(n log n) |
| E₂ | Lập trình, code | async function, SELECT * FROM |
| E₃ | Ngữ pháp, cấu trúc câu | mặc dù... nhưng..., however |
| E₄ | Dịch thuật đa ngôn ngữ | Bonjour, 你好世界 |
| E₅ | Kiến thức chung, ngữ cảnh | Hà Nội là thủ đô của |
Quan trọng: Expert không được gán nhãn trước. Chúng tự học chuyên môn hóa một cách tự nhiên trong quá trình huấn luyện. Bạn không "dạy" E₁ giỏi toán — mô hình tự khám phá ra rằng việc gửi token toán học cho cùng một expert giúp giảm loss tốt nhất.
2. Router (Bộ định tuyến)
Router là một mạng neural nhỏ (thường chỉ là 1 lớp Linear + Softmax), có nhiệm vụ: nhận một token → tính điểm phù hợp cho từng expert → chọn ra Top-k expert có điểm cao nhất.
Với mỗi token x:
1. scores = Softmax(W_router · x) // vector [s₁, s₂, ..., sₙ] có tổng = 1
2. top_k_indices = TopK(scores, k=2) // chọn 2 expert điểm cao nhất
3. outputs = [expert_i(x) for i in top_k_indices]
4. final = Σ (scores[i] * outputs[i]) // tổng có trọng số
k thường bằng 1 hoặc 2. Với k=2, mỗi token được gửi đến 2 expert, tăng độ chính xác với chi phí gấp đôi. Hầu hết các mô hình lớn (GPT-4, Kimi K2, DeepSeek V3) dùng k=2 nhưng chỉ tính 1 lần FFN cho mỗi token (nhờ kỹ thuật load balancing nâng cao).
Hành trình của một token: Ví dụ từng bước
Hãy theo dõi câu "Tính đạo hàm của f(x) = x² + 2x" qua một lớp MoE có 8 expert (k=2):
Bước 1: Token "Tính" đến lớp MoE
Bước 2: Token "đạo hàm" đến lớp MoE
Bước 3: Token "x²" đến lớp MoE
Tổng kết
| Token | Expert được chọn | Lý do |
|---|---|---|
"Tính" | E₅ (72%), E₇ (10%) | Từ thông dụng, cần ngữ cảnh + văn phong |
"đạo hàm" | E₁ (68%), E₅ (15%) | Toán học + một chút ngữ cảnh |
"f(x)" | E₁ (75%), E₂ (8%) | Toán học + ký hiệu giống code |
"x²" | E₁ (81%), E₆ (7%) | Thuần túy toán học |
"+" | E₁ (55%), E₂ (12%) | Toán tử, cả toán lẫn code đều dùng |
"2x" | E₁ (78%), E₆ (9%) | Biểu thức toán |
→ Chỉ 2/8 expert làm việc mỗi token. Tổng compute ≈ 25% so với Dense model cùng kích thước.
MoE trong Transformer: Nó nằm ở đâu?
Trong kiến trúc Transformer chuẩn, mỗi block gồm 2 phần:
- Self-Attention: token nhìn nhau (không bị MoE thay thế)
- FFN: xử lý độc lập từng token → đây là nơi MoE thay thế
Mỗi Transformer layer có thể có một Router riêng với tập expert riêng — hoặc dùng chung expert cho tất cả layer (kiến trúc phổ biến hơn). Càng nhiều layer, router càng có cơ hội "tinh chỉnh" việc định tuyến cho từng tầng xử lý.
Ưu điểm của MoE: Tại sao ai cũng dùng
1. Scale không giới hạn
Đây là lợi thế lớn nhất. Với kiến trúc Dense, mô hình 100B tham số tốn 100B tham số compute mỗi token. Với MoE (active 2%), mô hình 1.000B tham số chỉ tốn ~20B tham số compute mỗi token.
Kimi K2 (1.000B params, 32B active) là ví dụ điển hình: huấn luyện chỉ tốn 4,6 triệu USD — rẻ hơn rất nhiều so với các mô hình cùng đẳng cấp nhưng dùng kiến trúc Dense.
2. Chuyên môn hóa tự nhiên
Các expert tự động phân công "lãnh địa". Kết quả: mỗi token được xử lý bởi một bộ tham số đã "thuộc lòng" miền tri thức đó — dẫn đến chất lượng cao hơn trên tác vụ hỗn hợp.
3. Hiệu quả inference
Trong quá trình inference (sinh văn bản), MoE đặc biệt nhanh hơn Dense với context dài. Tại 128K token, MiniMax M2.5 (MoE) giảm >90% chi phí so với Transformer thuần.
Nhược điểm và thách thức
1. VRAM khổng lồ
Dù chỉ kích hoạt 2-5% tham số, toàn bộ expert vẫn phải nằm trong bộ nhớ GPU. Kết quả: mô hình 1.000B tham số cần nhiều card GPU để chứa, dù mỗi card chỉ chạy một phần.
2. Huấn luyện khó — "Chuyên gia chết"
Thách thức lớn nhất: load balancing. Nếu không kiểm soát, Router có xu hướng luôn chọn 1-2 expert "giỏi nhất" ban đầu, bỏ qua hẳn các expert khác. Hệ quả:
- Expert được chọn nhiều → ngày càng giỏi → càng được chọn nhiều (vòng lặp dương)
- Expert không được chọn → không học được gì → mãi mãi "chết" (dead expert)
3. Fine-tuning khó khăn
Khi fine-tune một mô hình MoE, bạn dễ phá vỡ cấu trúc chuyên môn hóa đã học. Router "quên" cách phân phối token, dẫn đến collapse — tất cả token dồn vào 1 expert. Đây là lý do fine-tuning MoE model cho domain-specific tasks khó hơn Dense model rất nhiều.
Giải pháp: Auxiliary Loss (Hàm mất mát phụ)
Để giải quyết vấn đề load balancing, hầu hết mô hình MoE sử dụng auxiliary loss — một hàm mất mát phạt mô hình nếu phân phối không đều:
# Pseudo-code cho auxiliary loss
def auxiliary_loss(router_probs, expert_mask):
"""
router_probs: [batch, seq_len, num_experts] - điểm softmax của router
expert_mask: [batch, seq_len, num_experts] - expert nào được chọn (0/1)
"""
# f_i: tần suất expert i được chọn (trung bình trên batch)
f = expert_mask.float().mean(dim=[0, 1]) # [num_experts]
# P_i: xác suất trung bình router gán cho expert i
P = router_probs.mean(dim=[0, 1]) # [num_experts]
# Loss = num_experts * Σ(f_i * P_i)
# Khuyến khích f_i và P_i phân phối đều (đều = 1/num_experts)
load_balance_loss = num_experts * torch.sum(f * P)
return load_balance_loss
# Tổng loss = task_loss + α × load_balance_loss
total_loss = cross_entropy_loss + 0.01 * auxiliary_loss(probs, mask)
Cách hiểu trực quan: Hàm loss này nói với mô hình: "Nếu mày cứ gửi token cho cùng một expert, tao sẽ phạt. Phân phối đều ra!"
Trong thực tế, các mô hình lớn còn dùng thêm:
- Expert capacity limits: Giới hạn số token tối đa mỗi expert xử lý mỗi batch
- Load balancing via noise: Thêm nhiễu vào điểm router để tránh "đường mòn"
- Switch Transformer routing: Chỉ gửi token đến đúng 1 expert, tăng hiệu quả
So sánh các mô hình MoE hàng đầu
| Mô hình | Tổng tham số | Active params | Số expert | Top-k | Context |
|---|---|---|---|---|---|
| GPT-4 | ~1.800B | ~280B | 8-16 (ước tính) | 2 | 128K |
| Gemini 2.5 Pro | Không công bố | Không công bố | Không công bố | - | 1M+ |
| DeepSeek V3 | 671B | 37B | 256 (1 shared) | 8 | 128K |
| Kimi K2 | 1.000B | 32B | ~380 | 8 | 128K |
| MiniMax M2.5 | 230B | 10B | Không công bố | 2 (ước tính) | 128K |
| MiniMax M2.7 | 230B | 10B | Không công bố | 2 (ước tính) | 200K |
| Qwen2.5-Max | Không công bố | Không công bố | Không công bố | - | 128K |
Điểm thú vị:
- DeepSeek V3 dùng 256 expert nhưng mỗi token chỉ gọi 8 — tỷ lệ active chỉ 3,1%
- Kimi K2 thậm chí còn "sparse" hơn: active rate 3,2% với ~380 expert, mỗi token gọi 8 expert
- MiniMax M2.5 dùng tỷ lệ active cực thấp (4,3%) kết hợp với Linear Attention để xử lý context dài với chi phí thấp kỷ lục
Linear Attention + MoE: Bộ đôi tối ưu
MiniMax kết hợp MoE với Linear Attention — đây là ví dụ hoàn hảo cho việc hai công nghệ bổ trợ cho nhau:
| Transformer cổ điển | MoE + Linear Attention | |
|---|---|---|
| Attention | O(n² × d) - quadratic | O(n × d²) - linear |
| FFN | O(n × d_ff) - toàn bộ | O(n × k × d_ff / num_experts) - chỉ 4,3% |
| Context 128K | Rất chậm | Nhanh gấp 10x |
| Tổng chi phí | ~$15/1M token (Claude) | ~$0,3/1M token (MiniMax M2.5) |
Kết quả: MiniMax M2.5 rẻ hơn Claude Sonnet ~25 lần nhưng vẫn đạt SWE-Bench 80,2% — hiệu năng coding gần tương đương.
Tương lai của MoE: Xu hướng & dự đoán
1. Self-Evolution (Tự tiến hóa)
MiniMax M2.7 đã chứng minh rằng MoE model có thể tự tham gia vào quá trình huấn luyện chính mình: model tự xây dựng agent harness, tự thu thập data chất lượng, và tự fine-tune qua RL. Đây là hướng đi mà cả OpenAI (Strawberry) và Anthropic đều đang theo đuổi.
2. Expert chuyên sâu hơn
Xu hướng rõ ràng: nhiều expert hơn, mỗi expert nhỏ hơn, chuyên môn hóa sâu hơn. DeepSeek V3 đã chứng minh 256 expert không phải là quá nhiều. Các mô hình tương lai có thể có hàng nghìn expert siêu nhỏ — mỗi expert chỉ 10-50M params — đủ để gói gọn kiến thức về một chủ đề cụ thể.
3. Dynamic Expert Creation
Thay vì cố định số lượng expert từ đầu, các mô hình tương lai có thể tự động tạo expert mới khi gặp domain tri thức mới, và prune expert không dùng. Điều này giúp mô hình liên tục mở rộng không giới hạn.
4. MoE trong Edge Devices
Apple Intelligence và Qualcomm đang nghiên cứu MoE on-device: mô hình nhỏ (vài tỷ params) nhưng dùng MoE để xử lý đa nhiệm (text, image, audio, code) trên một thiết bị duy nhất, không cần cloud.
Tổng kết
| Khía cạnh | Tóm tắt |
|---|---|
| MoE là gì | Kiến trúc thay thế FFN bằng nhiều expert nhỏ + router thông minh |
| Tại sao cần | Phá vỡ giới hạn scale: tham số tăng nhưng compute gần như không đổi |
| Cơ chế cốt lõi | Router (Softmax) chọn Top-k expert → xử lý → tổng hợp có trọng số |
| Ưu điểm chính | Scale không giới hạn, chuyên môn hóa tự nhiên, inference nhanh, chi phí thấp |
| Thách thức | VRAM lớn, load balancing, fine-tuning khó, dead experts |
| Giải pháp | Auxiliary loss, expert capacity, noise routing, switch transformer |
| Ai đang dùng | GPT-4, Gemini, DeepSeek, Kimi, MiniMax, Qwen, Mixtral — hầu như tất cả |
| Tương lai | Self-evolution, dynamic experts, nhiều expert hơn, MoE on-device |
MoE không phải là "một lựa chọn" nữa. Nó là nền tảng kiến trúc cho mọi mô hình AI thế hệ mới. Hiểu MoE = hiểu cách AI vận hành ở scale lớn nhất.
Bài viết tổng hợp từ các nguồn: báo cáo kỹ thuật của Kimi K2 (Moonshot AI), MiniMax M2 series, DeepSeek V3, và các phân tích từ cộng đồng AI/ML research.
Đọc tiếp
Một vài bài liên quan có thể bạn sẽ thích
Vibe Coding Cho Người Mới: Cách Dùng OpenCode + DeepSeek + OpenCode Go Không Cháy Ví
Hướng dẫn vibe coding cho người mới với OpenCode, OpenCode Go và DeepSeek: cách viết PLAN.md, AGENTS.md, chia workflow orchestrator-worker và tối ưu chi phí token.
Cuộc chiến AI Trung Quốc — Khi pháp sư làm rung chuyển thị trường toàn cầu
Toàn cảnh cuộc chiến AI Trung Quốc 2026: Morgan Stanley báo cáo chi phí inference chỉ 15-20% Mỹ, 6 Tiểu Hổ phân hóa 3 nhóm, DeepSeek giảm 90% trong khi Zhipu tăng 83% — và developer Việt Nam nên chọn gì.
MiniMax M2 — AI Giá Rẻ Nhất Cho Coding: Từ Startup 400 Người Đến IPO Kỷ Lục
Toàn cảnh MiniMax: hành trình 4 năm từ startup đến IPO Hong Kong, kiến trúc MoE + Linear Attention giúp M2.5 rẻ hơn GPT-4o 25 lần, SWE-Bench 80,2%, và hướng dẫn dùng MiniMax với OpenCode.