Họ DeepSeek
This content is not available in your language yet.
Mục tiêu
Phần tiêu đề “Mục tiêu”Sau bài này, bạn sẽ:
- Hiểu mixture of experts (MoE, hỗn hợp chuyên gia): bộ định tuyến (router) chọn vài expert cho mỗi token, và hai ý của DeepSeekMoE là chia nhỏ expert (fine-grained expert segmentation) và expert dùng chung (shared expert). Phân biệt được tổng tham số với tham số được kích hoạt.
- Hiểu MLA (multi-head latent attention) giảm KV cache bằng cách nén, khác attention truy vấn theo nhóm (GQA) giảm bằng cách dùng chung, và tính được KV cache mỗi token.
- Nắm ba cách DeepSeek-V3 làm huấn luyện rẻ hơn: cân bằng tải (load balancing) không cần loss phụ, dự đoán nhiều token (multi-token prediction, MTP), FP8; và đọc đúng con số “5.576 triệu USD”.
- Tự dẫn được advantage của GRPO (group relative policy optimization) và hiểu vì sao DeepSeek-R1-Zero học được cách suy luận chỉ từ phần thưởng theo luật (rule-based reward).
Cần biết trước
Phần tiêu đề “Cần biết trước”- The LLaMA Family: RoPE and Parallel Training, in Large Language Models(Not translated yet) (Learned)
- RLHF, in Large Language Models(Not translated yet) (Learned)
Trực giác
Phần tiêu đề “Trực giác”Bệnh viện có rất nhiều bác sĩ
Phần tiêu đề “Bệnh viện có rất nhiều bác sĩ”Tháng 12/2024, DeepSeek công bố báo cáo kỹ thuật của DeepSeek-V3: 671 tỉ tham số, nhưng mỗi token chỉ đi qua 37 tỉ. Làm sao một mô hình “to” mà mỗi lần tính lại “nhỏ”?
Hình dung một bệnh viện. Không bệnh nhân nào khám qua mọi khoa: lễ tân chuyển bạn tới vài bác sĩ hợp nhất. Bệnh viện có hàng trăm bác sĩ, nhưng mỗi ca chỉ tốn công của vài người.
Trong MoE, bệnh nhân là token, lễ tân là router, bác sĩ là expert. DeepSeek thêm hai ý: nhiều chuyên khoa hẹp thay vì vài khoa lớn, để ca khám ghép được linh hoạt hơn; và một khoa tổng quát ai cũng qua, để các chuyên khoa khỏi tự học lại điều cơ bản.
Bốn điểm nghẽn
Phần tiêu đề “Bốn điểm nghẽn”DeepSeek giữ bộ khung Transformer của bài Họ LLaMA. Mỗi paper nhắm vào một điểm nghẽn:
| Điểm nghẽn | Cách của DeepSeek | Paper |
|---|---|---|
| Tính toán mỗi token | MoE có chia nhỏ expert và expert dùng chung | DeepSeekMoE, V2, V3 |
| Bộ nhớ KV cache khi sinh văn bản | MLA | V2, V3 |
| Chi phí huấn luyện | Cân bằng tải bằng bias, MTP, FP8 | V3 |
| Dạy mô hình suy luận | GRPO, phần thưởng theo luật | DeepSeekMath, R1 |
Phần lớn các ý này có tiền thân mà chính các paper dẫn nguồn: lớp MoE có router có từ Shazeer và cộng sự (2017), GRPO là biến thể của PPO. Đóng góp của DeepSeek là kết hợp, cải tiến và chạy chúng ở quy mô lớn.
Bài toán của bài này là: làm sao để mô hình có rất nhiều tham số mà mỗi token chỉ tốn một phần nhỏ tính toán, KV cache nhỏ, huấn luyện rẻ, và làm sao dạy nó suy luận khi chỉ biết đáp án cuối đúng hay sai?
Lý thuyết
Phần tiêu đề “Lý thuyết”MoE: mỗi token chỉ chạy vài expert
Phần tiêu đề “MoE: mỗi token chỉ chạy vài expert”Trong khối Transformer thường, sau attention, mỗi token có vectơ đi qua một FFN, cộng kết nối tắt: . Lớp MoE thay FFN đó bằng nhiều FFN, mỗi FFN là một expert. Theo cách viết của DeepSeek-V3, có expert dùng chung và expert định tuyến:
Đọc từng số hạng: là kết nối tắt; tổng thứ nhất là các expert dùng chung, luôn chạy, không qua router; tổng thứ hai là các expert định tuyến, mỗi expert nhân với trọng số cổng (gate) .
Router chấm điểm. Mỗi expert định tuyến có một vectơ học được , như “hồ sơ chuyên môn” của nó. Điểm khớp (affinity) giữa token và expert là ở DeepSeekMoE và V2: tích vô hướng lớn thì điểm cao.
Chỉ giữ top-. Cổng chỉ khác 0 ở expert có điểm cao nhất:
là tập điểm lớn nhất. Expert có không cần chạy, nên mỗi token chỉ chạy FFN, dù lớp có FFN. Số tham số tăng theo , còn tính toán mỗi token chỉ tăng theo .
Với DeepSeek-V3: , , , tức mỗi token chạy 9 trong 257 expert của mỗi lớp MoE. Cả mô hình có 671 tỉ tham số, mỗi token kích hoạt 37 tỉ, khoảng 5.5% (tự tính). Tỉ lệ này lớn hơn 9/257 chủ yếu vì attention, embedding và ba lớp đầu (không phải MoE) thì token nào cũng dùng (giải thích và tự tính của bài). Nhưng cả 671 tỉ tham số vẫn phải nằm trong bộ nhớ, vì token nào cũng có thể chọn bất kỳ expert nào.
Chia nhỏ expert. MoE kiểu GShard (Lepikhin và cộng sự, 2020) chọn 2 trong vài expert cỡ FFN thường. DeepSeekMoE (Dai và cộng sự, 2024) cho rằng khi đó mỗi expert phải ôm nhiều loại kiến thức lẫn lộn. Cách sửa: chia mỗi expert thành 4 expert nhỏ (chiều ẩn còn một phần tư) và chọn gấp 4 số expert. Tổng tham số và tính toán không đổi, nhưng số cách ghép tăng vọt: 16 expert chọn 2 có cách; 64 expert chọn 8 có cách (ví dụ của paper).
Expert dùng chung. Token nào cũng cần một ít kiến thức chung. Không có chỗ riêng cho nó thì nhiều expert cùng học lại phần đó: lãng phí tham số. DeepSeekMoE tách expert cho mọi token đi qua, và bớt số expert định tuyến được chọn đi chừng ấy để tính toán như cũ.
Paper báo cáo bản DeepSeekMoE 16B ngang LLaMA2 7B với khoảng 40% tính toán.
Cân bằng tải: từ loss phụ tới bias
Phần tiêu đề “Cân bằng tải: từ loss phụ tới bias”Router tự học dễ rơi vào sụp định tuyến (routing collapse): vài expert được chọn mãi, nên học tốt hơn, nên lại càng được chọn, còn các expert khác gần như không được huấn luyện. Khi expert nằm trên nhiều GPU, GPU giữ expert đông khách thành nút thắt.
Cách cũ: loss phụ. DeepSeekMoE và V2 cộng thêm vào hàm mất mát một loss cân bằng (auxiliary loss, loss phụ). Nó lớn khi một expert vừa nhận nhiều token vừa được router chuộng, nên giảm nó kéo tải về đều. Vấn đề, theo báo cáo V3: loss phụ quá lớn làm hại chất lượng mô hình. Wang và cộng sự (2024), paper gốc của cách làm V3 dùng, giải thích rằng loss phụ lớn đưa vào gradient gây nhiễu cho việc dự đoán.
Cách của V3: một bias cho mỗi expert. Mỗi expert có một số , chỉ cộng vào điểm khi chọn top-:
Ba điều cần đọc ra:
- Bias chỉ đổi expert nào được chọn. Trọng số cổng vẫn là điểm gốc . ở đây là một số dùng để xếp hạng, không phải hệ số tự do của một lớp tuyến tính.
- Cổng được chuẩn hóa trên các expert đã chọn, nên cổng cộng lại bằng 1. V3 cũng đổi điểm khớp từ softmax sang sigmoid: .
- không học bằng gradient. Cuối mỗi bước huấn luyện, nhìn tải trên cả lô: expert quá tải thì giảm đi , expert thiếu tải thì tăng thêm . gọi là tốc độ cập nhật bias (V3 dùng ).
Như biển chỉ dẫn ở quầy: quầy đông thì hạ biển xuống, quầy vắng thì nâng lên; chỉ đổi người nào vào quầy nào. Hàm mất mát không có số hạng mới, nên gradient chỉ phục vụ việc dự đoán.
V3 vẫn giữ một loss cân bằng theo từng chuỗi với hệ số cực nhỏ, , và giới hạn mỗi token chỉ gửi tới tối đa 4 node (máy) để giảm truyền thông.
MLA: nén KV cache
Phần tiêu đề “MLA: nén KV cache”Bài Họ LLaMA đã tính: KV cache mỗi token là byte, với là số byte mỗi số (khác điểm khớp ở trên). GQA giảm , tức cho các đầu dùng chung K, V. MLA của DeepSeek-V2 đi đường khác: nén.
Gọi là đầu vào attention của token thứ (khác là đầu ra lớp MoE ở trên), với đầu, mỗi đầu chiều. MLA chiếu xuống một vectơ ẩn (latent vector) có chiều, rồi từ đó dựng lại khóa và giá trị của mọi đầu:
là ma trận nén (“D” là down), là hai ma trận mở rộng (“U” là up), và nhỏ hơn nhiều so với . Khi sinh văn bản, chỉ cần lưu . Nhờ tính kết hợp của phép nhân ma trận, có thể gộp vào ma trận truy vấn và vào ma trận đầu ra, nên không cần dựng lại K, V đầy đủ.
Vướng RoPE. RoPE xoay khóa theo vị trí. Ma trận xoay đứng giữa truy vấn và thì không gộp đi được nữa, vì nhân ma trận không giao hoán. V2 giải bằng RoPE tách riêng (decoupled RoPE): thêm một khóa nhỏ chiều chỉ để mang vị trí, dùng chung cho mọi đầu, lưu vào cache cùng . Vậy KV cache mỗi token là:
So với GQA, được thay bằng . Paper V2 chọn , , nên mỗi lớp lưu số, bằng GQA với chỉ 2.25 nhóm. Paper cũng báo cáo chất lượng của MLA mạnh hơn MHA trong thí nghiệm của họ.
Áp vào số của V3 (, , , , 61 lớp; tự tính):
- MLA: số mỗi token. Lưu 2 byte mỗi số thì khoảng 69 KiB, còn nhỏ hơn 128 KiB mỗi token của Llama 3 8B ở bài trước.
- Nếu dùng MHA thường với cùng 128 đầu: số, lớn hơn khoảng 57 lần.
Đó là phép so trên giấy với cùng số đầu. Con số “giảm KV cache 93.3%” trong tóm tắt của V2 là phép so khác: DeepSeek-V2 so với DeepSeek 67B, mô hình dày (dense, không MoE) trước đó của họ.
Huấn luyện rẻ hơn: MTP, FP8 và con số chi phí
Phần tiêu đề “Huấn luyện rẻ hơn: MTP, FP8 và con số chi phí”MTP. Bình thường, mỗi vị trí chỉ học đoán token kế tiếp. V3 thêm một mô-đun MTP (một khối Transformer, dùng chung embedding và lớp đầu ra với mô hình chính) để mỗi vị trí đoán thêm token sau nữa. Theo báo cáo, việc này làm tín hiệu huấn luyện dày hơn và có thể giúp mô hình “tính trước” xa hơn. Khi dùng thật, có thể bỏ mô-đun MTP, hoặc dùng nó làm bản nháp cho speculative decoding (giải mã suy đoán): báo cáo ghi token thứ hai được chấp nhận 85–90% số lần, tốc độ sinh tăng 1.8 lần.
FP8. Phần lớn phép nhân ma trận lớn chạy ở FP8, số thực 8 bit, một số phép nhạy cảm vẫn giữ độ chính xác cao hơn. Để số nhỏ không bị mất, mỗi ô nhỏ của ma trận có hệ số co giãn riêng. Trên hai mô hình nhỏ hơn, báo cáo đo sai số tương đối của loss so với BF16 luôn dưới 0.25%. (Lượng tử hóa nói chung có ở bài Đánh giá mô hình và PEFT.)
Đọc con số chi phí. Bảng 1 của báo cáo V3:
| Chỉ số | Pre-train | Mở rộng ngữ cảnh | Hậu huấn luyện | Tổng |
|---|---|---|---|---|
| Giờ GPU H800 | 2 664K | 119K | 5K | 2 788K |
| USD, giả định 2 USD mỗi giờ GPU | 5.328M | 0.238M | 0.01M | 5.576M |
Hai điều phải đi kèm con số này: 2 USD mỗi giờ là giá thuê giả định, và báo cáo nói rõ con số chỉ tính lần huấn luyện chính thức của V3, không gồm chi phí nghiên cứu và các thí nghiệm trước đó. Nó không phải tổng số tiền làm ra DeepSeek-V3.
GRPO: bỏ critic, so trong nhóm
Phần tiêu đề “GRPO: bỏ critic, so trong nhóm”Vấn đề của PPO. Advantage (giữ nguyên tiếng Anh) là phần thưởng cao hơn hay thấp hơn mức kỳ vọng bao nhiêu: dương thì tăng xác suất câu trả lời, âm thì giảm. Ở bài RLHF, PPO cần thêm một hàm giá trị (value function), còn gọi là critic, để ước lượng mức kỳ vọng đó. Critic thường là một mô hình cỡ ngang chính sách, nên tốn thêm rất nhiều bộ nhớ và tính toán. DeepSeekMath (Shao và cộng sự, 2024) nêu thêm một lý do: phần thưởng thường chỉ chấm ở token cuối, nên khó học một critic đúng ở từng token.
Ý của GRPO. Với mỗi câu hỏi , lấy mẫu một nhóm câu trả lời từ chính sách cũ , chấm được . Mức kỳ vọng không do critic đoán nữa, mà lấy ngay từ nhóm:
Như chấm điểm theo lớp: không hỏi “bạn được mấy điểm” mà hỏi “bạn hơn trung bình lớp bao nhiêu độ lệch chuẩn”.
Advantage khi phần thưởng là đúng/sai. Giả sử và tỉ lệ câu đúng trong nhóm là , với . Ta dẫn từng bước:
Bước 1: trung bình. Trung bình của các số 0 và 1 là tỉ lệ số 1: .
Bước 2: độ lệch chuẩn. Phương sai là trung bình của trừ . Vì nên , trung bình của cũng là . Vậy phương sai là , và .
Bước 3: thay vào. Gọi là advantage của câu đúng (), là advantage của câu sai ():
Mỗi dòng rút gọn bằng cách viết tử số thành (dòng đầu) hay (dòng sau) rồi giản ước với mẫu. Với và 3 câu đúng, : câu đúng được , câu sai được . Câu đúng càng hiếm, thưởng càng lớn. Còn hay (cả nhóm cùng sai hay cùng đúng) thì tử số bằng 0 với mọi câu: không có tín hiệu học.
Mục tiêu. Theo paper R1, chính sách được cập nhật để cực đại:
Kỳ vọng lấy theo câu hỏi và nhóm câu trả lời sinh từ . cho biết chính sách mới làm câu dễ ra hơn chính sách cũ bao nhiêu lần, là độ rộng của kẹp, là hệ số phạt KL. Lấy để khi , vượt không được lợi thêm; khi , dưới cũng không được lợi thêm. Phần chính là cái kẹp của PPO ở bài RLHF; chỗ khác PPO là lấy từ nhóm. DeepSeekMath viết cùng công thức ở mức từng token, và mọi token của câu nhận cùng một .
Phạt KL nằm thẳng trong mục tiêu. Ở RLHF, phạt KL bị trừ vào phần thưởng. GRPO trừ thẳng vào mục tiêu, nên không làm rối phép tính advantage. Số hạng là một ước lượng KL từ một mẫu (theo Schulman, 2020):
Hai tính chất làm nó dùng được. Không âm: đặt là tỉ số trong phân số, hàm có đạo hàm , âm khi , dương khi , nên nhỏ nhất tại , giá trị nhỏ nhất là . Không chệch (chính xác khi mẫu lấy từ chính ): lấy kỳ vọng theo , số hạng đầu cho ; số hạng giữa đổi dấu thành ; trừ 1 thì còn đúng .
So với DPO: DPO bỏ hẳn vòng học tăng cường, còn GRPO giữ học tăng cường nhưng bỏ critic. Hai cách bỏ hai thứ khác nhau.
DeepSeek-R1: học suy luận từ đúng và sai
Phần tiêu đề “DeepSeek-R1: học suy luận từ đúng và sai”R1-Zero. Paper R1 lấy DeepSeek-V3-Base (bản mới pre-train) rồi chạy GRPO ngay, không qua fine-tune có giám sát (SFT) trước. Mẫu prompt chỉ ép cấu trúc: suy nghĩ trong cặp thẻ <think>, rồi mới ghi đáp án. Phần thưởng hoàn toàn theo luật:
- Đúng hay sai. Bài toán có đáp án xác định phải ghi đáp án theo định dạng quy định để chương trình kiểm được. Bài lập trình thì biên dịch và chạy các ca kiểm thử.
- Định dạng. Có đặt phần suy nghĩ đúng trong cặp thẻ không.
Hai phần cộng với trọng số bằng nhau. Paper nói họ không dùng mô hình phần thưởng thần kinh cho bài suy luận, vì nó dễ bị reward hacking khi RL quy mô lớn. Luật kiểm đáp án khó bị lợi dụng hơn một mô hình phần thưởng học từ dữ liệu (như mô hình “thích câu dài” ở bài RLHF), nhưng chỉ dùng được cho bài kiểm tra được.
Kết quả paper báo cáo: pass@1 (tỉ lệ đúng trung bình của một lần trả lời) trên AIME 2024 tăng từ 15.6% lên 77.9% trong quá trình RL; trong lúc đó, mô hình tham chiếu được thay bằng chính sách mới nhất sau mỗi 400 bước. Câu trả lời dài dần, mô hình tự kiểm tra lại và thử cách khác dù không ai dạy cách suy luận; paper gọi khoảnh khắc một phiên bản trung gian tự dừng lại để xem lại lời giải là “aha moment”.
Vì sao còn cần R1. R1-Zero khó đọc, hay trộn tiếng Anh và tiếng Trung trong một chuỗi suy luận, và yếu ở việc ngoài suy luận như viết hay hỏi đáp mở. DeepSeek-R1 đi qua nhiều giai đoạn:
- SFT trên vài nghìn mẫu “khởi động lạnh” (cold start) có lối suy nghĩ dễ đọc.
- RL hướng suy luận, thêm phần thưởng nhất quán ngôn ngữ: tỉ lệ từ thuộc ngôn ngữ đích trong chuỗi suy luận.
- Lấy mẫu từ chối (rejection sampling): sinh nhiều câu trả lời, giữ câu tốt, rồi SFT lần nữa trên cả dữ liệu suy luận lẫn không suy luận.
- RL lần hai để mô hình hữu ích và vô hại hơn, có thêm phần thưởng theo sở thích do mô hình phần thưởng chấm.
Paper còn chắt lọc (distill) năng lực sang các mô hình nhỏ dựa trên Qwen và Llama, không phải MoE của R1. Trọng số của V3 và R1 có trên Hugging Face; giấy phép của mã, của trọng số và của mô hình nền (với bản chắt lọc) có thể khác nhau, nên đọc thẻ mô hình trước khi dùng.
Dòng thời gian
Phần tiêu đề “Dòng thời gian”Ngày là ngày nộp bản đầu lên arXiv.
| Ngày | Paper | Điểm mới chính |
|---|---|---|
| 11/1/2024 | DeepSeekMoE | Chia nhỏ expert, expert dùng chung |
| 5/2/2024 | DeepSeekMath | GRPO |
| 7/5/2024 | DeepSeek-V2 | MLA, định tuyến giới hạn thiết bị |
| 27/12/2024 | DeepSeek-V3 | Cân bằng tải bằng bias, MTP, huấn luyện FP8 |
| 22/1/2025 | DeepSeek-R1 | R1-Zero học bằng RL thuần, quy trình nhiều giai đoạn |
| 2/12/2025 | DeepSeek-V3.2 | Bài không đi vào nội dung |
Số liệu R1 trong bài lấy từ bản sửa ngày 4/1/2026 của paper (bản đăng trên Nature, 2025).
Giới hạn
Phần tiêu đề “Giới hạn”- Bài chỉ đi tới mức ý tưởng. Song song chuyên gia (expert parallelism), chồng tính toán với truyền thông và chi tiết FP8 nằm ngoài phạm vi; chạy mô hình trên nhiều GPU thuộc bài Deploy LLM: nhiều GPU, phân tán. Số benchmark là của paper, đo theo cách của tác giả, tại thời điểm công bố.
- Phần thưởng theo luật chỉ hợp với bài kiểm tra được. Viết văn, hội thoại mở vẫn cần mô hình phần thưởng hay người đánh giá (bài RLHF). Chính paper R1 cũng ghi R1 còn kém ở đầu ra có cấu trúc, chưa dùng được công cụ, và có lúc suy nghĩ quá dài với câu hỏi đơn giản.
Minh họa
Phần tiêu đề “Minh họa”Hình dưới vẽ một lớp MoE kiểu DeepSeek với một token. Hãy nhìn hai nhóm expert: nhóm dùng chung luôn sáng, còn nhóm định tuyến chỉ vài ô được router tô sáng.
Bảng dưới đặt ba mô hình có paper cạnh nhau. Hãy nhìn hàng tỉ lệ kích hoạt: ở ba mô hình này, mô hình càng lớn, phần tham số mỗi token dùng tới càng nhỏ. R1 không có cột riêng vì dùng đúng kiến trúc V3.
| Thông số | DeepSeekMoE 16B (2024) | DeepSeek-V2 (2024) | DeepSeek-V3 (2024) |
|---|---|---|---|
| Tổng tham số | 16.4B | 236B | 671B |
| Kích hoạt mỗi token | 2.8B | 21B | 37B |
| Tỉ lệ kích hoạt (tự tính) | 17.1% | 8.9% | 5.5% |
| Số lớp | 28 | 60 | 61 |
| Expert dùng chung + định tuyến | 2 + 64 | 2 + 160 | 1 + 256 |
| Expert định tuyến chọn mỗi token | 6 | 6 | 8 |
| Attention | nhiều đầu (MHA) | MLA | MLA |
| Token pre-train | 2T | 8.1T | 14.8T |
Ví dụ code
Phần tiêu đề “Ví dụ code”Code trong bài chạy thử lần cuối tháng 10/2026, với Python 3.14 và NumPy 2.4 (bản có trong Pyodide). Cả hai ô chạy ngay trên trang, độc lập, không cần mô hình thật.
Định tuyến top-K và cân bằng tải bằng bias
Phần tiêu đề “Định tuyến top-K và cân bằng tải bằng bias”Ô dưới đây tạo một lô token và expert định tuyến, mỗi token chọn . Điểm khớp là sigmoid của các số ngẫu nhiên (hạt giống 0), riêng expert 0 được cộng thêm 1.0 trước sigmoid để router cố ý “chuộng” nó. Hàm route chọn top- theo nhưng lấy cổng từ gốc, như V3. Sau đó 200 bước chỉnh bias với .
Đây là mô phỏng đồ chơi: “quá tải” được hiểu là nhận nhiều hơn trung bình của lô, và điểm khớp giữ nguyên qua mọi bước (huấn luyện thật thì điểm đổi theo mô hình).
Định tuyến top-K và cân bằng tải
# Định tuyến top-K kiểu DeepSeek-V3 và cân bằng tải bằng biasimport numpy as np
rng = np.random.default_rng(0)B, N, K = 64, 8, 2 # số token trong lô, số expert định tuyến, số expert chọnlogits = rng.normal(size=(B, N)) # u^T e_i của từng token với từng expertlogits[:, 0] += 1.0 # cố ý cho expert 0 được router "chuộng" hơns = 1 / (1 + np.exp(-logits)) # điểm khớp bằng sigmoid, như V3
def route(s, bias, k): # Chọn top-k theo s + bias, nhưng trọng số cổng lấy từ s gốc picked = np.argsort(-(s + bias), axis=1)[:, :k] mask = np.zeros_like(s, dtype=bool) np.put_along_axis(mask, picked, True, axis=1) gate = np.where(mask, s, 0.0) return mask, gate / gate.sum(axis=1, keepdims=True)
bias = np.zeros(N)gamma = 0.01 # tốc độ cập nhật bias (paper dùng 0.001)for step in range(200): mask, gate = route(s, bias, K) load = mask.sum(axis=0) # số token mỗi expert nhận if step in (0, 199): print(f"step {step:3d} load:", load) # Bản đơn giản: quá tải (trên trung bình) thì giảm, thiếu tải thì tăng bias -= gamma * np.sign(load - load.mean())
print("bias:", np.round(bias, 2))print("gates of token 0:", np.round(gate[0][mask[0]], 3))print("experts per token:", mask.sum(axis=1).min(), mask.sum(axis=1).max())The first run downloads Python, about 10 MB.
Đọc kết quả:
step 0: 128 lượt chọn, chia đều thì mỗi expert nhận 16. Chưa có bias, expert 0 nhận 42 lượt, expert 2 chỉ nhận 6.step 199: tải còn[18 16 18 16 15 16 15 14], dao động quanh 16 vì bias nhảy từng bước cố định .bias: expert 0 bị hạ xuống ; expert vắng khách được nâng lên, cao nhất là expert 2 với .gates of token 0: và , cộng lại bằng 1, tính từ điểm gốc chứ không từ điểm đã cộng bias.experts per token: 2 2: token nào cũng vẫn đúng 2 expert, nên tính toán mỗi token giữ nguyên.
Advantage của GRPO trên một nhóm
Phần tiêu đề “Advantage của GRPO trên một nhóm”Ô dưới đây tính advantage cho một nhóm câu trả lời, phần thưởng 1 nếu đúng, 0 nếu sai. Mẫu số được cộng thêm eps = 1e-8 để không chia cho 0 (paper không nói tới chi tiết này). np.std mặc định chia cho , khớp phép dẫn ở mục Lý thuyết.
Advantage của GRPO
# Advantage của GRPO: chuẩn hóa phần thưởng trong một nhóm G câu trả lờiimport numpy as np
def advantages(r, eps=1e-8): r = np.asarray(r, dtype=float) # eps để không chia cho 0 khi cả nhóm cùng điểm (paper không nói tới) return (r - r.mean()) / (r.std() + eps)
# G = 8 câu trả lời cho cùng một câu hỏi; 1 là đúng, 0 là saigroup = [1, 0, 0, 1, 0, 0, 0, 1]a = advantages(group)print("rewards :", group)print("advantages:", np.round(a, 3))print("mean, std :", round(a.mean(), 6), round(a.std(), 3))
# Câu đúng càng hiếm trong nhóm thì advantage của nó càng lớnfor n_ok in (1, 3, 7): r = [1] * n_ok + [0] * (8 - n_ok) a_ok, a_bad = advantages(r)[[0, -1]] print(f"{n_ok} of 8 ok : right {a_ok:+.3f}, wrong {a_bad:+.3f}")
# Cả nhóm cùng điểm: không có tín hiệu họcprint("all wrong :", np.round(advantages([0] * 8), 3))
# Nhân mọi phần thưởng với 10: advantage không đổiscaled = advantages([10 * x for x in group])print("scaled x10 same:", np.allclose(a, scaled))The first run downloads Python, about 10 MB.
Đọc kết quả:
- Nhóm có 3 câu đúng: câu đúng được , câu sai được , đúng như và ở mục Lý thuyết. Advantage có trung bình 0.0 và độ lệch chuẩn 1.0.
- Câu đúng càng hiếm, thưởng càng lớn: 1 trên 8 đúng thì câu đúng được (); 7 trên 8 đúng thì chỉ được , còn câu sai duy nhất bị .
- Cả nhóm sai: mọi advantage bằng 0, không có tín hiệu học.
- Nhân phần thưởng với 10: advantage không đổi (
True), vì cả tử lẫn mẫu cùng nhân 10. Chỉ thứ bậc trong nhóm là có nghĩa.
Lỗi hay gặp
Phần tiêu đề “Lỗi hay gặp”Kiểm tra nhanh
Phần tiêu đề “Kiểm tra nhanh”Tóm tắt và đọc thêm
Phần tiêu đề “Tóm tắt và đọc thêm”Ý chính:
- MoE: mỗi token chạy expert dùng chung và trong expert định tuyến. DeepSeekMoE chia nhỏ expert để ghép linh hoạt hơn và tách expert dùng chung cho kiến thức chung. Tham số theo , tính toán theo , bộ nhớ vẫn phải chứa hết.
- V3 cân bằng tải bằng bias chỉ dùng khi chọn top-, thay cho loss phụ lớn; thêm MTP và FP8. 5.576 triệu USD là giá thuê giả định cho riêng lần huấn luyện chính thức.
- MLA chỉ lưu vectơ nén và một khóa RoPE nhỏ: số mỗi lớp, so với của GQA.
- GRPO bỏ critic, lấy mức kỳ vọng từ nhóm. R1-Zero học suy luận dài chỉ từ phần thưởng theo luật; R1 thêm khởi động lạnh và nhiều giai đoạn để dễ đọc, dùng được cho việc khác.
Đọc thêm:
- DeepSeek-AI (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, arXiv:2501.12948 (bản sửa 4/1/2026; đăng trên Nature 645, 633–638, 2025), mục 2. GRPO, phần thưởng theo luật và R1-Zero, đọc trong khoảng 15 phút.
- Dai, D., Deng, C., Zhao, C., và cộng sự (2024). DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models, arXiv:2401.06066, hình 2 và mục 3. Ba hình (a), (b), (c) cho thấy từng bước chia nhỏ expert và tách expert dùng chung, với , , ứng với , , của bài.
- DeepSeek-AI (2024). DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model, arXiv:2405.04434, mục 2.1 và bảng 1. MLA, RoPE tách riêng và bảng so KV cache, với , , ứng với , , của bài.
- DeepSeek-AI (2024). DeepSeek-V3 Technical Report, arXiv:2412.19437, mục 1 (bảng chi phí), 2.1.2, 2.2 và 3.3. Cân bằng tải bằng bias, MTP và FP8.
- Wang, L., Gao, H., Zhao, C., Sun, X., Dai, D. (2024). Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts, arXiv:2408.15664. Paper gốc của cách cân bằng tải bằng bias mà V3 dùng.
- Shao, Z., Wang, P., Zhu, Q., và cộng sự (2024). DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models, arXiv:2402.03300, mục 4.1. Nơi GRPO ra đời, viết mục tiêu ở mức từng token với , , ứng với , , của bài.
- Shazeer, N., Mirhoseini, A., Maziarz, K., và cộng sự (2017). Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer, arXiv:1701.06538. Lớp MoE thưa có router chọn top-, nguồn gốc của các ý trong bài.
Your browser is blocking storage. Your progress will be lost when you reload the page.
Content licensed under CC BY-NC-SA 4.0. Code under the MIT license.About