Chuyển tới nội dung chính

Định tuyến top-k và tham số hoạt động

Hai con số, không phải mộtDựng lại đúng 671 tỉTính lại thật

Định tuyến top-k và tham số hoạt động

Một mô hình khoe 671 tỉ tham số nhưng nói mỗi token chỉ dùng 37 tỉ. Nghe như quảng cáo. Thực ra cả hai con số đều dựng lại được từ tệp cấu hình mà mô hình công bố, bằng phép nhân bạn tự làm được, và bài này bắt bạn làm.

chương trước bạn thấy chi phí sinh chữ nằm ở bộ nhớ chứ không ở phép tính. Bài này sang một chỗ khác của cùng mô hình: khối feed-forward. Trong một transformer dày, khối này chiếm phần lớn tham số, và mọi token đều chạy qua toàn bộ nó. Muốn mô hình biết nhiều hơn thì phải làm khối đó to ra, mà to ra thì mỗi token lại tốn thêm đúng bằng ngần ấy.

Trộn chuyên gia cắt sợi dây buộc hai chuyện đó lại với nhau. Thay vì một khối feed-forward duy nhất, mỗi lớp giữ nhiều chuyên gia cùng hình dạng, và một bộ định tuyến nhỏ chọn ra vài chuyên gia cho mỗi token. Kho kiến thức lớn lên theo số chuyên gia, còn chi phí mỗi token chỉ lớn lên theo số chuyên gia được chọn. Từ đó có hai con số hoàn toàn khác nhau mà người ta hay nhét vào cùng một chỗ.

Bảng tính dưới đây tách hai con số đó ra và cho bạn tự đẩy chúng đi hai hướng.

Trộn chuyên gia · vì sao 671 tỉ tham số chạy như 37 tỉ
Tổng 671,03 tỉHoạt động 37,55 tỉThưa 17,9×
Cấu hình mẫu:
DeepSeek-V3. Nguồn: config.json phát hành kèm mô hình, đọc ngày 27/07/2026. Các trường num_hidden_layers, hidden_size, n_routed_experts, num_experts_per_tok, moe_intermediate_size, intermediate_size, first_k_dense_replace, n_shared_experts, scoring_func, norm_topk_prob, vocab_size. Số có thể đã lạc hậu và mọi tham số ở đây đều sửa được. Attention mỗi lớp cộng từ 5 phép chiếu của MLA, lấy thẳng từ config.json: q_a_proj 7168 × 1536, q_b_proj 1536 × 128 × (128 + 64), kv_a_proj 7168 × (512 + 64), kv_b_proj 512 × 128 × (128 + 128), o_proj 128 × 128 × 7168.
671,03 tỉ
tham số tổng
671.025.397.760 · phải chứa hết trong bộ nhớ
37,55 tỉ
tham số hoạt động mỗi token
37.551.276.032 · 5,60% của tổng
17,9×
tỉ lệ thưa
trần chỉ tính FFN: 28,6×
624,94 GiB
VRAM để chứa trọng số
8 thẻ 80 GiB · phần hoạt động chỉ 34,97 GiB
Cấu hình✎ sửa được
số lớp
tổng số lớp transformer
chiều mô hình
chiều của vector token đi qua mọi lớp
số chuyên gia định tuyến
kho chuyên gia mà bộ định tuyến chọn trong đó
chuyên gia hoạt động mỗi token (k)
k của top-k, số chuyên gia thật sự chạy
số chuyên gia chia sẻ
luôn chạy, không cần định tuyến
chiều trong của một chuyên gia
chiều trong của một chuyên gia, thường nhỏ
chiều trong của lớp dày
chiều trong của lớp dày, thường lớn hơn nhiều
số lớp đầu để dày
first_k_dense_replace: mấy lớp đầu chưa dùng MoE
cỡ từ vựng
dùng cho cả bảng nhúng vào lẫn đầu ra
tham số attention mỗi lớp
preset điền sẵn, cộng từ các phép chiếu của mô hình đó
token đang định tuyến
đổi token là đổi điểm cổng, nên đổi cả tập thắng
một chuyên gia3 × 7.168 × 2.048 = 44.040.192
một lớp MoE257 × 44.040.192 = 11.318.329.344
toàn bộ lớp MoE58 × 11.318.329.344 = 656.463.101.952
phần MoE hoạt động58 × 9 × 44.040.192 = 22.988.980.224
các lớp dày3 × 3 × 7.168 × 18.432 = 1.189.085.184
ma trận cổng định tuyến58 × 7.168 × 256 = 106.430.464
nhúng vào và ra2 × 129.280 × 7.168 = 1.853.358.080
attention mỗi lớp × số lớp187.105.280 × 61 = 11.413.422.080
trong đó 5 phép chiếu MLA11.010.048 + 37.748.736 + 4.128.768 + 16.777.216 + 117.440.512 = 187.105.280
Định tuyến token số 0: điểm cổng, vạch cắt top-8, và trọng số trộn
chuyên giađiểm cổng (sigmoid)trọng số trộnE350,9950,1271E1850,9930,1268E250,9860,1259E2120,9820,1253E600,9710,1240E2020,9690,1238E720,9680,1236E2090,9670,1235E1110,963E1050,961E1990,956E570,945E80,941E640,939E1450,938E470,936E410,935E2500,932E530,931E540,929E1590,926E1920,922E130,919E2310,917vạch cắt top-8
Tổng trọng số 1,0000 · đã chuẩn hoá lại · tổng điểm của cả 256 chuyên gia 128,351 · cộng thêm 1 chuyên gia chia sẻ luôn chạy
Hình chỉ vẽ được 24 trong 256 chuyên gia, xếp theo điểm giảm dần, nên 232 chuyên gia điểm thấp không có mặt. Chúng vẫn được đếm đủ trong phần tham số.
Trọng số 624,94 GiB không vừa một thẻ 80 GiB, cần 8 thẻ. Nếu tính theo tham số hoạt động thì chỉ thấy 1 thẻ, và đó là con số sai.
Thành phầnCó trong bộ nhớChạy cho một token
58 lớp MoE656,46 tỉ22,99 tỉ
3 lớp dày1,19 tỉ1,19 tỉ
attention, 61 lớp11,41 tỉ11,41 tỉ
nhúng vào và đầu ra1,85 tỉ1,85 tỉ
ma trận cổng định tuyến106,43 triệu106,43 triệu
cộng lại671,03 tỉ37,55 tỉ

Một chuyên gia đáng giá bao nhiêu

Bắt đầu từ đơn vị nhỏ nhất. Một chuyên gia là một khối feed-forward có cổng, tức ba ma trận chứ không phải hai: ma trận cổng, ma trận đi lên, ma trận đi xuống. Cả ba đều nối chiều mô hình với chiều trong, nên:

một chuyên gia = 3 × chiều mô hình × chiều trong

Với DeepSeek-V3 đang mở sẵn trong bảng, chiều mô hình là 7.168 và chiều trong của một chuyên gia là 2.048:

3 × 7.168 × 2.048 = 44.040.192

Khoảng 44 triệu tham số. Nhỏ đến bất ngờ, và đó là chủ ý: chuyên gia trong MoE thường hẹp hơn nhiều so với lớp dày tương ứng, vì mỗi lớp có hàng trăm cái như vậy.

Một lớp MoE phải chứa hết. 256 chuyên gia định tuyến cộng 1 chuyên gia chia sẻ là 257:

257 × 44.040.192 = 11.318.329.344

Hơn 11 tỉ tham số cho một lớp. Mô hình có 61 lớp, trong đó 3 lớp đầu vẫn là lớp dày (first_k_dense_replace bằng 3), nên còn 58 lớp MoE:

58 × 11.318.329.344 = 656.463.101.952

Cộng nốt bốn thứ còn lại là ra đúng 671 tỉ

Chuyên gia là phần lớn nhất nhưng không phải tất cả. Bốn thành phần còn lại đều tính được từ chính tệp config.json mà mô hình công bố, không phải đoán.

Attention. DeepSeek-V3 dùng multi-head latent attention, tức là không chiếu thẳng từ dòng residual sang các đầu mà đi xuống một không gian tiềm ẩn hạng thấp rồi đi lên lại. Vì vậy có năm ma trận chứ không phải bốn, và cả năm kích thước đều nằm trong config.json:

q_a_proj : 7.168 × 1.536 = 11.010.048
q_b_proj : 1.536 × 128 × (128 + 64) = 37.748.736
kv_a_proj : 7.168 × (512 + 64) = 4.128.768
kv_b_proj : 512 × 128 × (128 + 128) = 16.777.216
o_proj : 128 × 128 × 7.168 = 117.440.512
-----------
187.105.280

Nhân 61 lớp được 11.413.422.080. Bảng in đủ năm số hạng này ngay dưới các dòng công thức khi bạn đang ở preset DeepSeek-V3.

Nhúng vào và đầu ra. Hai bảng riêng biệt, mỗi bảng cỡ từ vựng × chiều mô hình:

2 × 129.280 × 7.168 = 1.853.358.080

Ba lớp dày dẫn đầu. Cùng ba ma trận như một chuyên gia, nhưng ở chiều trong 18.432:

3 × 3 × 7.168 × 18.432 = 1.189.085.184

Ma trận cổng của bộ định tuyến. Đây là thứ hay bị quên. Mỗi lớp MoE cần một ma trận chiều mô hình × số chuyên gia để chấm điểm:

58 × 7.168 × 256 = 106.430.464

Cộng cả năm:

Thành phầnTham số
chuyên gia MoE, 257 × 58 lớp656.463.101.952
attention MLA × 61 lớp11.413.422.080
nhúng vào và đầu ra1.853.358.080
FFN dày × 3 lớp1.189.085.184
ma trận cổng định tuyến106.430.464
tổng671.025.397.760

671.025.397.760. Con số mô hình được công bố là 671 tỉ. Lệch 25 triệu tham số, tức 0,004%. Đây không phải trùng hợp: bảng này không lấy con số công bố ở đâu cả, nó cộng từ các trường trong config.json, và cái ra được đúng bằng cái người ta ghi trên bìa.

Còn mỗi token thì trả bao nhiêu

Cùng cấu hình đó, một token chỉ chạy qua k chuyên gia định tuyến cộng chuyên gia chia sẻ. Ở đây k là 8, chia sẻ là 1, nên 9 chuyên gia:

58 × 9 × 44.040.192 = 22.988.980.224

Bốn thành phần kia thì chạy cho mọi token, không có gì để bỏ bớt: attention, hai bảng nhúng, ba lớp dày, và cả ma trận cổng, vì bộ định tuyến phải chấm điểm toàn bộ 256 chuyên gia mới biết chọn ai. Cộng lại:

22.988.980.224 + 11.413.422.080 + 1.853.358.080 + 1.189.085.184 + 106.430.464
= 37.551.276.032

37,55 tỉ, so với con số 37 tỉ thường được trích. Có một cách kiểm chéo rất gọn: lấy tổng trừ đi các chuyên gia không nổ. Mỗi lớp MoE có 248 chuyên gia ngồi không:

671.025.397.760 − 58 × 248 × 44.040.192 = 671.025.397.760 − 633.474.121.728
= 37.551.276.032

Đúng con số cũ. Hai đường tính hoàn toàn khác nhau gặp nhau ở một chỗ, đó là dấu hiệu phép kế toán không có lỗ.

Tỉ lệ thưa là 17,9×, và mỗi token dùng 5,60% số tham số.

Hai cái núm đi hai hướng

Chỗ đáng dừng lại nằm ở đây. Kéo thanh số chuyên gia định tuyến từ 256 xuống 32: tổng tụt từ 671,03 tỉ còn 98,76 tỉ, trong khi ô tham số hoạt động gần như không nhúc nhích, từ 37,55 tỉ xuống 37,46 tỉ. Nó có động, nhưng chỉ động đúng 93.126.656 tham số, tức phần cột bị cắt khỏi các ma trận cổng (58 × 7.168 × 224). Đó là 0,25% của con số hoạt động, trong khi tổng mất đi 85%.

Rồi làm ngược lại: trả về 256 và kéo k từ 8 xuống 1. Tổng đứng yên tuyệt đối ở 671,03 tỉ trong khi hoạt động tụt còn 19,67 tỉ và tỉ lệ thưa vọt lên 34,1×. Kéo k lên 16 thì hoạt động thành 57,99 tỉ, lớn hơn cả một mô hình dày 50 tỉ, mà tổng vẫn không đổi một tham số nào.

Hai cái núm, hai con số, gần như không cái nào chạm vào cái kia. Đó là toàn bộ ý tưởng của MoE gói trong một câu: kho kiến thức đi theo số chuyên gia, hoá đơn mỗi token đi theo k. Ngoại lệ duy nhất là ma trận cổng, và nó nhỏ đến mức không đổi được kết luận.

Có một cái trần cho tỉ lệ thưa, bảng in ngay dưới ô tỉ lệ. Nếu chỉ nhìn phần chuyên gia thì tỉ lệ đúng bằng:

(số chuyên gia + chia sẻ) / (k + chia sẻ) = 257 / 9 = 28,6

Tỉ lệ thật là 17,9 chứ không phải 28,6, và khoảng cách đó là bốn thành phần luôn chạy: chúng chỉ làm mẫu số to lên. Kéo k lên đúng 256 thì mọi chuyên gia đều nổ, tỉ lệ về đúng 1,0 và ô hoạt động trùng khít ô tổng: mô hình thưa vừa biến thành mô hình dày.

Bộ định tuyến chọn ai, và với trọng số nào

Hình trong bảng vẽ đúng một token. Với mỗi chuyên gia, bộ định tuyến sinh một điểm cổng; bảng xếp các chuyên gia theo điểm giảm dần, tô đậm k cái trên cùng và in trọng số trộn của chúng ở cột phải. Đổi k là thấy vạch cắt trượt lên xuống và tập thắng đổi theo. Đổi token đang định tuyến sang 1 là cả tám cái tên đổi hết: token 0 chọn 35, 185, 25, 212, 60, 202, 72, 209, token 1 chọn 24, 85, 52, 104, 146, 113, 98, 60.

Có hai cách biến điểm thô thành điểm, và bảng cho bạn bật qua lại.

Softmax ép điểm của toàn bộ 256 chuyên gia cộng lại bằng 1. Nên khi bạn lấy top-8, tám cái đó chỉ giữ một phần nhỏ của cái bánh: tắt chuẩn hoá lại và bảng ghi tổng trọng số 0,4857, tức tám chuyên gia thắng chỉ nắm 48,57% khối lượng, 248 chuyên gia còn lại giữ phần kia. Bật chuẩn hoá lại thì tám trọng số ấy cộng về 1 mà vẫn rất chênh nhau: 0,3595 / 0,2290 / 0,1187 / 0,0878 / 0,0554 / 0,0519 / 0,0492 / 0,0485.

Sigmoid thì khác hẳn: mỗi chuyên gia có một cổng riêng, không ai ràng buộc ai. Tổng điểm của cả 256 chuyên gia là 128,351, chẳng gần 1 chút nào. Và vì sigmoid bão hoà, tám cái đứng đầu đều dính sát trần: điểm cao nhất là 0,995. Tắt chuẩn hoá lại thì tổng trọng số của tám cái thắng là 7,8326, tức đầu ra của lớp bị nhân lên gần tám lần so với một lớp dày bình thường.

Đó chính là lý do DeepSeek-V3 có cờ norm_topk_prob. Bật nó lên, trọng số của k cái thắng được chia lại cho tổng của chính chúng, nên cộng lại đúng 1 dù hàm điểm là gì. Bảng in tổng ngay dưới hình để bạn kiểm: bật thì 1,0000, tắt thì 7,8326 với sigmoid và 0,4857 với softmax.

Một hệ quả dễ bỏ qua: với sigmoid, sau khi chuẩn hoá lại tám trọng số gần như bằng nhau, 0,1271 / 0,1268 / 0,1259 / 0,1253 / 0,1240 / 0,1238 / 0,1236 / 0,1235. Softmax giữ được độ chênh, sigmoid thì san phẳng. Hai lựa chọn đó là quy ước thiết kế của từng mô hình, không phải cái nào đúng cái nào sai, và bảng này không đo được cái nào huấn luyện tốt hơn.

Thưa không miễn phí: chỗ sinh viên nhầm nhiều nhất

Đây là phần quan trọng nhất của bài, và nó nằm ở cái thẻ màu đỏ.

Mỗi token chỉ dùng 37,55 tỉ tham số. Nhưng bộ định tuyến không biết trước token tiếp theo sẽ gọi ai, nên toàn bộ 671,03 tỉ tham số phải nằm sẵn trong bộ nhớ. Ở FP8, một byte mỗi tham số, đó là 624,94 GiB, tức 8 thẻ 80 GiB. Nếu bạn tính theo phần hoạt động thì ra 34,97 GiB và kết luận một thẻ là đủ. Sai gấp tám lần, và là kiểu sai làm hỏng cả một bản dự toán hạ tầng.

Đổi byte mỗi tham số sang BF16: 1,22 TiB, 16 thẻ. Đổi sang INT4: 312,47 GiB, 4 thẻ. Đổi VRAM một thẻ sang 24 GiB: 27 thẻ. Con số hoạt động 37,55 tỉ không đổi trong suốt lúc đó, vì nó không liên quan gì tới chuyện chứa.

Nói cho gọn: thưa làm mỗi token rẻ đi, không làm mô hình nhẹ đi. MoE mua tốc độ bằng bộ nhớ, và đó là một cuộc đổi chác chứ không phải bữa trưa miễn phí.

Vài thứ khác đáng nghịch

Chuyên gia chia sẻ. Đặt số chuyên gia chia sẻ về 0: tổng còn 668,47 tỉ, hoạt động còn 35,00 tỉ, và trần tỉ lệ nhảy từ 28,6 lên đúng 32, vì 256 / 8 bằng 32. Một chuyên gia chia sẻ được lưu một lần nhưng chạy mọi lần, nên nó lấy đi 2.554.331.136 tham số ở cả hai cột, giống hệt nhau. Bài kế tiếp trong chương nói kỹ chuyện này.

Lớp dày dẫn đầu. Đặt số lớp đầu để dày về 0: cả 61 lớp thành MoE, tổng lên 703,80 tỉ và cần 655,46 GiB, tức 9 thẻ thay vì 8. Ô hoạt động chỉ nhích lên đúng 5.505.024 tham số, và đó là ba ma trận cổng mới (3 × 7.168 × 256) chứ không phải phần feed-forward. Phần feed-forward hoạt động không đổi một chút nào, vì có một trùng hợp đẹp: DeepSeek chọn chiều trong của chuyên gia là 2.048 và của lớp dày là 18.432, mà 9 × 2.048 đúng bằng 18.432. Nghĩa là chín chuyên gia hoạt động của một lớp MoE tốn đúng bằng một lớp dày. Đổi chiều trong của lớp dày sang 9.216 rồi thử lại thì trùng hợp đó biến mất.

Kéo số lớp đầu để dày lên 61 thì không còn lớp MoE nào, cũng không còn ma trận cổng nào: mô hình thành một mô hình dày 37,44 tỉ tham số, tỉ lệ thưa về đúng 1,0 và bảng nói thẳng điều đó ra.

Mixtral. Bấm preset Mixtral-8x7B-v0.1: 8 chuyên gia, chọn 2, không có chuyên gia chia sẻ, không có lớp dày dẫn đầu, attention thường bốn phép chiếu nên 41.943.040 mỗi lớp. Bảng ra 46,70 tỉ tổng và 12,88 tỉ hoạt động, so với con số công bố 46,7 tỉ và 12,9 tỉ. Lại khớp. Trần tỉ lệ đúng bằng 8 / 2 = 4, và mỗi token dùng 27,58% số tham số, so với 5,60% của DeepSeek-V3. Cùng một cơ chế, hai mức thưa cách nhau gần một bậc.

Sim này nói được gì và không nói được gì

Phần này phải nói thẳng, vì một phép đếm đúng vẫn dễ bị đọc quá xa.

Phép đếm tham số thì khớp, và khớp là chuyện kiểm được. Với DeepSeek-V3 bảng ra 671.025.397.760 so với 671 tỉ công bố, lệch 0,004%; với Mixtral ra 46,70 tỉ so với 46,7 tỉ. Không con số nào trong hai cái đó được nhập tay từ thông cáo: chúng cộng từ các trường trong config.json. Nếu bạn sửa một tham số thì tên mô hình biến mất khỏi dòng nguồn, đúng như phải thế.

Chỗ duy nhất cần một quy ước là phần hoạt động. Bảng đếm cả hai bảng nhúng vào con số hoạt động, giống cách các model card định nghĩa: tham số hoạt động bằng tổng trừ đi những chuyên gia không nổ. Về mặt vật lý thì một token chỉ đọc một hàng của bảng nhúng vào chứ không nhân với cả bảng, nên nếu đếm theo kiểu đó thì con số sẽ thấp hơn đúng 926.671.872 tham số. Bảng chọn quy ước của model card để con số so được với cái người ta công bố, và đây là chỗ nói rõ ra để bạn biết mình đang so cái gì với cái gì.

Điểm cổng ở đây là tôi đặt ra, tất định, không có gì được học. Một bộ định tuyến thật nhân vector token với một ma trận cổng đã huấn luyện, và cái nó học được là thứ quan trọng nhất của cả cơ chế: chuyên gia nào nên nhận loại token nào. Sim đếm đúng kích thước ma trận đó nhưng không có nội dung của nó, nên nó chỉ cho bạn thấy hình dạng của phép chọn top-k và phép chuẩn hoá trọng số, tức phần cơ học, chứ không phải phần trí tuệ.

Sim không nói được mô hình thưa có thông minh bằng mô hình dày hay không. Một mô hình 671 tỉ tham số chạy 37,55 tỉ mỗi token có mạnh bằng một mô hình dày 37,55 tỉ tham số không? Câu trả lời chỉ có bằng cách huấn luyện cả hai rồi đo, và không có con số nào ở trang này đụng tới nó. Bảng chỉ khẳng định một chuyện: với cấu hình như vậy thì số tham số phải là như vậy.

Còn nhiều thứ nữa chưa có trong bảng. Mất cân bằng tải giữa các chuyên gia, hệ số bias của bộ định tuyến, chi phí truyền thông khi các chuyên gia nằm trên nhiều thẻ khác nhau, các tham số vụn như trọng số của lớp chuẩn hoá: mỗi thứ là một bài riêng hoặc quá nhỏ để đổi kết luận, và đều không nằm trong phép đếm này. Đó cũng là một phần của khoảng lệch 0,004% ở trên.

Số trong preset có ngày và có thể đã lạc hậu. Hai preset mang tên mô hình thật lấy số từ config.json phát hành kèm mô hình, đọc ngày 27/07/2026, ghi ngay trên giao diện cùng danh sách trường đã dùng. Preset thứ ba ghi rõ là cấu hình tròn số bịa ra để tính tay và cố tình không có attention. Lĩnh vực này đổi rất nhanh, nên nếu bạn có số mới hơn thì gõ thẳng vào, cả 11 ô đều sửa được. Cổng kiểm số của bài canh phép tính; nó không canh và không thể canh việc mô hình ngoài kia có đúng hình dạng đó hay không.

Điều rút ra

MoE tách một con số thành hai. Tham số tổng bằng số lớp MoE × (số chuyên gia + chia sẻ) × 3 × chiều mô hình × chiều trong, cộng attention, nhúng, lớp dày và ma trận cổng, và nó quyết định bạn cần bao nhiêu VRAM. Tham số hoạt động thay số chuyên gia bằng k ở đúng số hạng đầu tiên và giữ nguyên mọi số hạng còn lại, và nó quyết định mỗi token tốn bao nhiêu phép tính. Với DeepSeek-V3 hai vế đó là 671.025.397.760 và 37.551.276.032, đúng bằng con số công bố. Nhớ đúng một câu là đủ: bộ nhớ trả cho toàn bộ, phép tính trả cho phần được chọn. Ai quên vế đầu sẽ đặt mua thiếu bảy cái card.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Một lớp MoE có 256 chuyên gia định tuyến, 1 chuyên gia chia sẻ, chiều mô hình 7.168, chiều trong của chuyên gia 2.048. Riêng phần chuyên gia của lớp đó chứa bao nhiêu tham số?
  2. 2Bạn giữ nguyên mọi thứ và chỉ kéo số chuyên gia định tuyến từ 256 xuống 32. Điều gì xảy ra với hai con số lớn?
  3. 3Cấu hình mặc định cần 8 thẻ 80 GiB để chứa trọng số ở FP8, trong khi mỗi token chỉ dùng 34,97 GiB tham số. Vì sao không thể dùng một thẻ 80 GiB?

Bài này mới chỉ giả định bộ định tuyến chia việc đều cho mọi chuyên gia. Thực tế không như vậy, và chuyện gì xảy ra khi vài chuyên gia bị gọi liên tục còn phần lớn ngồi không là nội dung của bài tiếp theo. Muốn xem lại toàn bộ lộ trình môn học thì quay về phần giới thiệu.