# Dùng RL để Qwen 4B đuổi theo Qwen 27B

[Muhammad Farooq](https://homus.dev/speakers/muhammad-farooq) · [Prompt Engineering](https://homus.dev/orgs/prompt-engineering)

> Train Qwen 3.5 4B bằng GRPO trên RL environments mở: checker chặt, chọn task ở mép năng lực, vì sao điểm chững lại, rồi distillation từ 27B.

Topics: Evals, Agents

Canonical: https://homus.dev/talks/i-trained-qwen-4b-with-rl-to-catch-qwen-27b

## 1. Câu hỏi: RL có kéo một model 4B lên ngang model 27B không?

Muhammad Farooq mở video bằng một câu hỏi: liệu có thể làm cho một model 4 tỷ tham số (4 billion) đạt mức tương đương một model 27 tỷ tham số bằng RL (reinforcement learning) không? Đó chính là thứ anh sẽ cho xem trong video này.

![Hai robot: 4B + RL với 51.8% và dấu hỏi, đối diện 27B với 64.0%](https://homus.dev/photos/Pl_2TelxjdY-0003.jpg)

Màn hình mở đầu: "RL in a sandbox · two DGX Sparks". Bên trái là model 4B + RL với điểm 51.8% kèm dấu hỏi, bên phải là model 27B với 64.0%, và câu hỏi phụ "and on the 87 unseen datasets?" (còn trên 87 dataset chưa thấy thì sao). Hai con số là theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026).

Theo Muhammad, nếu nhìn vào các đợt ra mắt model gần đây (tính đến video đăng ngày 17/10/2026), có một thứ cứ lặp đi lặp lại, đó là RL environments. Anh lấy ví dụ Anthropic: theo tin được đưa ra, công ty này đã bàn tới chuyện chi hơn một tỷ đô la cho RL environments chỉ trong một năm. Và có vẻ như có được những RL environment tốt có thể đẩy giới hạn hiệu năng của model đi xa hơn.

Trên màn hình lúc đó là đoạn trích bài TechCrunch "Silicon Valley bets big on 'environments' to train AI agents" (đăng ngày 21/09/2025, dẫn lại The Information), với dòng tô sáng "$1 billion on RL environments" và con số "$1B+ per year" viết tay bên cạnh (theo video đăng ngày 17/10/2026).

## 2. RL environments đã có trong open source

Tin tốt, theo Muhammad (video đăng ngày 17/10/2026), là đã bắt đầu xuất hiện những RL environment thực sự ấn tượng trong open source. Xiaomi đã open source hàng nghìn environment cùng với MiMo V2.6; trên màn hình, bài viết của Xiaomi ghi "7k+ high-quality RL task environments", phủ bốn loại task cho agent, trong đó có software engineering, tái hiện lỗ hổng bảo mật, công việc nặng về kiến thức và web design. Và team Hugging Face cũng đã ra mắt các RL environment được build riêng cho model nhỏ (theo video đăng ngày 17/10/2026).

Vì vậy, trong video này anh muốn tìm hiểu một câu hỏi đơn giản: có thể dùng những environment mở này trên phần cứng của chính mình để làm cho một model nhỏ tốt hơn không? Để tìm câu trả lời, anh chạy một loạt thí nghiệm trên hai máy DGX Spark mà anh có, và sẽ đi qua tất cả những thí nghiệm đó. Trên màn hình, năm thí nghiệm được đánh số: random tasks, edge tasks, more RL, distillation và distill + RL.

Câu trả lời ngắn gọn: có, nó hoạt động. Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), một model 4 tỷ tham số đã tốt lên rõ ràng và thu hẹp hơn một nửa khoảng cách tới một model lớn gấp khoảng sáu lần. Nhưng điều anh để ý là tới một lúc nào đó, nó ngừng tiến bộ. Và lý do vì sao, theo anh, có lẽ là phần hữu ích nhất của video này.

Trên màn hình lúc này là một đường cong điểm số đi lên rồi đi ngang, với dòng chữ "four routes ≈ 58%" (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026), nằm dưới vạch của model 27B, cạnh một chữ "why?" to màu đỏ.

## 3. RL environment là gì: một bài thi có sẵn đáp án

Trước khi cho xem setup và các thí nghiệm, Muhammad giải thích chính xác RL environment là gì. Một mental model tốt là một bài thi thử (practice exam) kèm đáp án (answer key). Model nhận một task, cố giải nó, và có một thứ gì đó kiểm tra câu trả lời.

Để cụ thể hơn, anh lấy một environment mà anh đã dùng, tên là Small Data Environments (SmolDataEnvs). Mỗi task là một dataset thật lấy từ Kaggle, đi kèm một câu hỏi về dữ liệu đó, và một đáp án mà một chương trình có thể kiểm tra được. Ví dụ, đây là một bảng tính doanh số video game, và câu hỏi là publisher nào có tổng doanh số cao nhất. Với task cụ thể này, đáp án là Nintendo.

![Trang Kaggle Video Game Sales và file vgsales.csv với các game của Nintendo](https://homus.dev/photos/Pl_2TelxjdY-0203.jpg)

Task ví dụ: dataset "Video Game Sales" trên Kaggle (dữ liệu doanh số của hơn 16.500 game). File `vgsales.csv` có các cột Rank, Name, Platform, Year, Publisher, Global_Sales, với 16.598 dòng; bảy dòng đầu đều là game của Nintendo, từ Wii Sports tới New Super Mario Bros. Câu hỏi: publisher nào có tổng doanh số cao nhất.

Bao quanh mỗi task, environment đưa cho model ba thứ khác nhau:

- **Một sandbox**: về cơ bản là một máy tính bị khoá chặt, nơi model không thể làm hỏng gì.

- **Một tool**: trong trường hợp này là một terminal, để model có thể xem các file và chạy Python.

- **Một checker**: model ghi câu trả lời cuối cùng vào một file, và checker so nó với đáp án. Nếu đúng, model nhận reward bằng 1. Nếu sai, nó nhận reward bằng 0.

Reward đó là phản hồi duy nhất mà model từng nhận được.

Trên màn hình, chế độ này được gọi là "agent mode": model gửi command vào một cửa sổ `bash` (ví dụ `ls /home/user/input`, rồi `head -3 churn.csv`), nhận output trở lại, và có tối đa 12 lượt ("up to 12 turns").

## 4. Checker và reward hacking

Điều quan trọng nhất cần nhớ, theo Muhammad, là model học bất cứ thứ gì checker thưởng, chứ không học thứ bạn muốn nói. Và điều này rất quan trọng: nếu checker thưởng sai thứ, model của bạn sẽ học sai thứ từ dữ liệu.

Theo Muhammad (video đăng ngày 17/10/2026), checker đi kèm dataset cụ thể này hơi dễ dãi (lenient). Ví dụ, nếu đáp án đúng là 42 và model viết "42, yes", câu đó vẫn được chấm đạt. Một model được train với một checker như vậy có thể học cách độn thêm chữ vào câu trả lời, và đó là thứ được gọi là reward hacking.

![Lenient checker chấm pass cho 42, yes; danh sách 42, 42 yes yes, 42 label yes đều được tick](https://homus.dev/photos/Pl_2TelxjdY-0323.jpg)

"Lenient checker" đi kèm dataset: nó lấy con số đầu tiên ("takes the first number"), nên "42", "42, yes", "42 yes yes" và "42 label yes" đều qua khi đáp án là 42. Góc phải ghi "accepts ~69% of right answers with extra words" kèm nhãn "our audit", theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026).

Vì vậy, khi xem kỹ checker đó, anh đã phải tự viết một checker chặt hơn (stricter checker). Và mọi điểm số trong video này đều dựa trên checker chặt hơn đó, chứ không dựa trên checker dễ dãi đi kèm dataset.

## 5. RL nằm ở đâu trong quá trình train một model

Tiếp theo, Muhammad nói về chỗ đứng của RL trong việc train một model. Các model thường được train theo từng giai đoạn.

- **Pre-training**: model đọc một lượng văn bản khổng lồ và học cách đoán từ tiếp theo. Theo Muhammad, đây là nơi phần lớn model thu được kiến thức về thế giới thực và khả năng hiểu ngôn ngữ.

- **Fine-tuning**: supervised fine-tuning là một ví dụ tốt, trong đó model học bằng cách chép lại các ví dụ về câu trả lời tốt. Ở bước này nó cũng đi từ một cỗ máy đoán từ tiếp theo đơn thuần thành một cỗ máy hỏi đáp.

- **RL** đến sau đó. Thay vì chép, model luyện tập (practice) xem một câu trả lời tốt trông như thế nào. Chẳng hạn, nó sẽ thử một task, checker cho nó biết nó làm thế nào, và về cơ bản nó tự điều chỉnh dựa trên reward nhận được.

Ba giai đoạn train theo lời Muhammad Farooq, và vòng lặp luyện tập của RL: thử một task, checker cho biết kết quả, model tự điều chỉnh theo reward.

Vậy là bạn không thực sự phải viết ra lời giải. Bạn chỉ cần một cách để kiểm tra đáp án.

## 6. GRPO: model chỉ học từ những task nó lúc đúng lúc sai

Với thí nghiệm này, phương pháp RL được dùng là GRPO. Với mỗi task, model thực hiện tám lần thử (attempts). Những lần thử làm tốt hơn mức trung bình của cả nhóm sẽ được củng cố (reinforced), nên model có nhiều khả năng sẽ thử theo hướng đó lần sau. Còn những lần làm tệ hơn thì về cơ bản bị đẩy xuống. Trên màn hình, một task tỏa ra tám episode ("1 task → 8 episodes"), mỗi episode là một chuỗi command và output, và episode nào ghi ra file trả lời thì được "strict checker" chấm.

Đây là một phần rất quan trọng của cả câu chuyện: nếu tất cả các lần thử đều đúng, hoặc tất cả đều sai, thì không lần nào vượt mức trung bình. Khi đó task ấy chẳng dạy model được gì. Muhammad nhấn mạnh rằng cần nhớ kỹ điều này: model chỉ học từ những task nó đôi khi làm đúng, không học từ những task nó luôn làm đúng hay luôn làm sai. Anh sẽ quay lại điểm này một chút nữa.

![advantage = score - group mean; all 8 the same → no signal; Qwen3.5-4B + LoRA r64](https://homus.dev/photos/Pl_2TelxjdY-0503.jpg)

Công thức trên màn hình: "advantage = score − group mean". Khi cả tám lần đều bằng 0, chúng trùng với group mean: "all 8 the same → no signal", nên task được sàng lọc trước ("so tasks are pre-screened"). Dòng dưới ghi model chỉ train trên token của chính nó ("trains on its own tokens only"), còn output của tool bị che (masked). Bên phải: Qwen3.5-4B + LoRA r64.

## 7. Setup: hai DGX Spark, Qwen 3.5 4B, LoRA và một bài thi giữ lại

Giờ tới setup thực tế và những gì Muhammad học được qua các thí nghiệm. Anh dùng hai máy DGX Spark, mỗi máy có 128 GB unified memory (theo video đăng ngày 17/10/2026). Model anh cố train là Qwen 3.5 4B. Thay vì train lại toàn bộ model, anh train một phần gắn thêm nhỏ (add-on) gọi là LoRA, mà theo anh (video đăng ngày 17/10/2026) rẻ hơn nhiều để train.

![Hai DGX Spark nối với nhau 200 Gb/s; một node chạy 27B, node 2 train 4B](https://homus.dev/photos/Pl_2TelxjdY-0523.jpg)

Hai máy nối với nhau ở 200 Gb/s, một node chạy model 27B, "node 2" train model 4B.

Trên màn hình (video đăng ngày 17/10/2026), phần giải thích LoRA vẽ toàn bộ model ("whole model") với 4.66B tham số bị khoá lại ("frozen"), và chỉ những khối nhỏ gắn bên cạnh mỗi lớp là được train.

Để đo tiến bộ, anh giữ lại một bài thi mà model chưa từng được train trên đó, về cơ bản là một validation set. Bài thi này cũng gồm cả những task lấy từ các dataset mà model chưa từng thấy. Trên màn hình (video đăng ngày 17/10/2026), bài thi có 394 task, trong đó 87 task dùng dataset chưa từng xuất hiện trong lúc train.

Trước khi train gì cả, theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), model 4B làm đúng khoảng một nửa và sai khoảng một nửa (trên màn hình mở đầu là 51.8%). Model đối chiếu là một model 27B, cùng họ Qwen. Đó là model mục tiêu, và mục tiêu là đạt được hiệu năng ngang model 27B này (64.0% theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026).

## 8. Thí nghiệm 1 và 2: task ngẫu nhiên, rồi task ở "mép" năng lực

Vậy làm sao thu hẹp khoảng cách hiệu năng? Muhammad mô tả từng thí nghiệm. Đầu tiên, anh train trên một tập task chọn ngẫu nhiên. Model có học được một điều hữu ích: nó bắt đầu làm xong task thay vì hết lượt (running out of turns). Nhưng theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), điểm chỉ nhích lên một chút, và theo anh, hoàn toàn có thể nói đó là may mắn.

Một trong những lý do thú vị đến từ chính chi tiết của GRPO đã nói ở trên. Khi xem lại các task dùng để train, phần lớn là những task mà model hoặc luôn làm đúng, hoặc luôn làm sai. Nghĩa là phần lớn thời gian train bị dành cho việc học... chẳng gì cả. Trên màn hình, nhóm "always right" và "always wrong" đều ghi "no signal", chỉ nhóm "sometimes" là "learns", kèm dòng "55-70% of groups: no signal" (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026).

Đây là lúc anh đổi tập task dùng để train. Anh cho model thử khoảng một nghìn task, mỗi task bốn lần. Rồi anh chỉ giữ lại những task model giải được một số lần, và bỏ đi những task nó luôn giải được hoặc không bao giờ giải được.

![999 tasks × 4 tries each: 271 never solved, 240 sometimes, 488 always solved](https://homus.dev/photos/Pl_2TelxjdY-0843.jpg)

Thí nghiệm 2 (edge tasks): "999 tasks × 4 tries each" chia thành ba nhóm theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026): 271 task không bao giờ giải được, 240 task lúc được lúc không ("sometimes", được giữ lại), và 488 task luôn giải được.

Lý do là những task này về cơ bản nằm ở mép (edge) của những gì model làm được. Anh train trên những task đó gần trọn một ngày. Và nó thực sự hiệu quả: theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), điểm tăng lên rõ rệt và khoảng cách tới model 27B được thu hẹp hơn một nửa. Biểu đồ trên màn hình cho điểm bài thi theo training step: 51.8 ở bước 0, 51.5 ở bước 20, 56.1 ở bước 40, 54.8 ở bước 60 và 56.6 ở bước 80, dưới vạch 64.0% của model 27B (cùng nguồn số đo, video đăng ngày 17/10/2026).

## 9. Có phải ăn may không, và RL thực sự đổi hành vi gì

Muhammad nói mỗi khi thấy một bước nhảy như vậy, câu hỏi đầu tiên phải là: có phải chỉ là may mắn không? Nên anh so model đã train với model chưa train, từng task một. Có một nhóm task mà model mới train làm đúng (trong khi trước đó sai), và một nhóm khác mà nó làm sai (trong khi trước đó đúng). Nếu việc train không có tác dụng gì, hai nhóm này phải có kích thước xấp xỉ nhau. Trong trường hợp của anh, theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), nhóm đầu lớn hơn rất nhiều, và xác suất chuyện đó xảy ra do ngẫu nhiên là rất nhỏ. Trên màn hình, hai lưới 394 task của model chưa train và sau RL đặt cạnh nhau, rồi các task đổi kết quả được dồn lên hai đĩa cân "newly right" và "newly wrong", với chữ "luck?" ở góc.

Trên màn hình kế tiếp, điểm bài thi đi từ 51.8% của model 4B chưa train lên 58.4% sau RL (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026), với câu hỏi "what changed?". Vì đã có tiến bộ, anh thực sự muốn hiểu việc train đã đổi những hành vi nào. Nên anh cho xem vài lần chạy thật: cùng một task, trước và sau khi train.

**Ví dụ 1: câu hỏi video game.** Nhớ câu hỏi doanh số video game ở đầu video chứ? Trong lần chạy Muhammad cho xem (video đăng ngày 17/10/2026), model chưa train thực ra làm phân tích đúng, và còn nói "Nintendo" trong câu trả lời của nó. Nhưng trong file đáp án, nó lại ghi con số doanh số thay vì cái tên, nên nhận điểm 0. Model đã train thì kiểm tra lại năm publisher đứng đầu và ghi "Nintendo".

![Before untrained 4B chạy groupby Publisher và kết luận Nintendo với 1786.56; after RL bắt đầu từ cùng câu hỏi](https://homus.dev/photos/Pl_2TelxjdY-1003.jpg)

Câu hỏi "Which publisher has the highest total global sales?", đáp án Nintendo. Bên trái (model 4B chưa train): `ls`, `head -20` file `vgsales.csv`, chạy `groupby('Publisher')['Global_Sales'].sum()`, rồi viết "The analysis shows that Nintendo has the highest total global sales with 1786.56". Bên phải (after RL) bắt đầu từ cùng đề bài, yêu cầu "Write only that value to /workdir/answer.txt".

Anh phải tự xem kỹ, vì muốn chắc đây không chỉ là một trường hợp lẻ (one-off). Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), trên những câu hỏi mà đáp án là một cái tên, model đã train ghi một con số trơn ít hơn hẳn so với model chưa train. Trên màn hình, phép so này làm trên 140 câu hỏi như vậy.

**Ví dụ 2: game có tổng thời gian chơi nhiều nhất.** Câu hỏi là game nào có tổng thời gian chơi cao nhất, và đây cũng là lần chạy cho xem trong video đăng ngày 17/10/2026. File không có dòng tiêu đề (header row), nghĩa là các cột trong file không có tên. Model chưa train gặp hết lỗi này tới lỗi khác. Về cơ bản nó lặp lại đúng y một command, từng chữ một, và cuối cùng hết lượt mà không ghi được đáp án. Model đã train thì tìm ra các cột, tìm ra Dota 2, rồi ghi nó xuống, với ít bước hơn nhiều. Trên màn hình, file là `steam-200k.csv`, dòng đầu đã là dữ liệu (`151603712,"The Elder Scrolls V Skyrim",purchase,1.0,0`); model chưa train ở lượt 7/12 chạy `.groupby(1).sum()`, gặp Traceback, rồi lại thử `.groupby(0).sum()`.

**Không hoàn hảo.** Model đã train cũng mất một số task nó từng làm đúng. Trong một ví dụ, nó làm phép tính đúng nhưng ghi ra một phân số, trong khi đáp án lại muốn một tỷ lệ phần trăm. Trên màn hình, cán cân ghi 43 task mới đúng và 17 task mới sai (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026).

Anh cũng muốn kiểm tra reward hacking, vì checker gốc khá dễ dãi. Nhưng trong trường hợp này, theo kiểm tra của Muhammad Farooq (video đăng ngày 17/10/2026), anh không thấy bất kỳ dấu hiệu reward hacking nào, và đó là điều tuyệt vời.

Phát hiện chính, theo Muhammad (video đăng ngày 17/10/2026), là model vốn đã biết phân tích dữ liệu. Phần RL không thực sự dạy điều đó, mà dạy nó làm cho xong việc và trả lời đúng câu hỏi được hỏi.

## 10. Thí nghiệm 3: RL thêm nữa và cái trần

Bước hiển nhiên tiếp theo là làm thêm RL. Một lần nữa, Muhammad sàng lọc một lô task mới theo đúng cách cũ và train lại. Nhưng đáng ngạc nhiên là nó không cải thiện model thêm chút nào (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026; trên màn hình, điểm cao nhất vẫn là 58.4% kèm một dấu hỏi).

Đó chính là chi tiết của GRPO đã nói: ta cần những task mà nếu chạy model nhiều lần, đôi khi nó làm đúng, đôi khi làm sai. Nếu không, chẳng có tín hiệu nào để nó học cả.

Anh đưa ra một thí nghiệm đơn giản mà bạn có thể tự chạy để thấy cái trần đó: cho model chưa train bốn lần thử mỗi task thay vì một, và đếm xem có bao nhiêu task nó giải được ít nhất một lần. Con số đó sẽ nhiều hơn số task nó giải được chỉ với một lần thử. Và khoảng chênh lệch ấy đại khái chính là khoảng trống mà RL có thể khai thác.

![Try it yourself: model 4B chưa train, 4 tries; cột training tasks solved 62.3%, 68.8%, 72.9%, vạch ceiling](https://homus.dev/photos/Pl_2TelxjdY-1223.jpg)

"Try it yourself": model 4B chưa train được thử 4 lần mỗi task, chỉ cần đúng một lần là tính là giải được. Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), tỷ lệ task train giải được là 62.3% với 1 lần thử, 68.8% với 2 lần, 72.9% với 4 lần; vạch "ceiling" nằm ở đỉnh cột 4 lần thử.

Phỏng đoán của anh là việc train trên các edge task đã dùng hết một phần lớn khoảng trống đó.

## 11. Thí nghiệm 4: distillation từ model 27B

Nếu model không thể tự khám phá kỹ năng mới bằng cách luyện tập, thì lựa chọn tiếp theo là chỉ cho nó xem. Muhammad cho model 27B giải một lô task train. Rồi anh giữ lại những lời giải mà nó trả lời đúng, và fine-tune model nhỏ trên đó. Về cơ bản đây là toàn bộ khái niệm distillation: một model học trò (student) học bằng cách xem một model thầy (teacher) giải từng bài. Trên màn hình (video đăng ngày 17/10/2026), lô này gồm 2.000 task, model 27B là "teacher", model 4B là "student".

Khi thử cách này, điểm thực ra không thay đổi nhiều, vẫn gần như giữ nguyên (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026). Nhưng điều thú vị là model bắt đầu làm việc giống model 27B. Anh lấy một câu hỏi: một cách rescale dữ liệu có cho sai số thấp hơn cách kia không? Model RL thử hết model machine learning này tới model khác. Model distilled thì chạy một phép so sánh gọn gàng duy nhất rồi trả lời, với ít bước hơn nhiều, đúng như model 27B sẽ làm. Trên màn hình, câu hỏi là "Did z-score scaling beat min-max scaling? (error rate)" trên file `breast-cancer.csv`, đáp án "no"; cột của model RL liệt kê Random Forest (gặp NameError), Random Forest, Logistic Regression, SVM, Gradient Boosting, MLP, Logistic Regression lần nữa, rồi mới `echo -n "no"` vào file đáp án, tổng cộng 12 lệnh và hết lượt.

Nhưng anh để ý một điều thực sự thú vị (theo số đo của Muhammad Farooq, video đăng ngày 17/10/2026): model distilled bắt đầu giải được một số task mà model RL không bao giờ làm được.

![RL never solved 479 tasks; model distilled now solved 60](https://homus.dev/photos/Pl_2TelxjdY-1343.jpg)

Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026): trong 479 task mà model RL không bao giờ giải được ("RL never solved"), model distilled nay giải được 60 task ("60 now solved").

## 12. Thí nghiệm 5: distill rồi RL, và các dataset chưa thấy

Bước hiển nhiên tiếp theo: đây chính là những task có thể cần tới RL. Nên Muhammad chạy RL thêm một lần nữa, lần này trên model đã distill.

Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), phần lớn, hay đúng hơn là tất cả các thí nghiệm anh chạy, đều cho điểm cuối gần như nhau. Nhưng trên các dataset mà model chưa từng thấy, model cuối cùng này là model tốt nhất trong các model nhỏ anh đã thử. Và theo anh, đây là model đầu tiên mà phần tăng điểm vượt qua được phép kiểm tra may mắn (luck check).

![87 tasks unseen datasets: untrained 52.9%, RL 58.6%, more RL 54.0%, distilled 57.5%, distill + RL 62.1%, 27B 64.4%](https://homus.dev/photos/Pl_2TelxjdY-1403.jpg)

"87 tasks · unseen datasets", theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026): untrained 52.9%, RL 58.6%, more RL 54.0%, distilled 57.5%, distill + RL 62.1% (được đánh dấu sao), và model 27B 64.4%.

Đây là một trong những task đó, với các lần chạy Muhammad cho xem trong video đăng ngày 17/10/2026. Nó là một database từ Bộ Nông nghiệp Mỹ (U.S. Department of Agriculture), và câu hỏi là giống táo nào phổ biến nhất trong dataset. Model chưa train và model RL đều trả lời "Navel". Đó đúng là giống xuất hiện nhiều nhất trong file, nhưng nó là cam. Model distilled tìm ra đúng đáp án, nhưng hết lượt trong lúc kiểm tra lại. Còn model cuối cùng thì lọc riêng táo trước, rồi ghi "Red Delicious", trùng với đáp án của model 27B. Và đó là đáp án đúng.

![Câu hỏi giống táo phổ biến nhất; model distill + RL lọc commod == 'AP', ra Red Delicious 227; bảng kết quả năm model](https://homus.dev/photos/Pl_2TelxjdY-1443.jpg)

Lần chạy của model distill + RL ở lượt 11/12: lọc `df['commod'] == 'AP'` (chỉ lấy táo), ra 708 dòng táo, top giống là Red Delicious (227), Gala (120), Fuji (100), Granny Smith (78), rồi ghi "Red Delicious" vào `/workdir/answer.txt`. Hàng dưới: untrained và RL trả lời "Navel" (sai), distilled "no answer", distill + RL và 27B đều "Red Delicious".

## 13. Kết luận và giới hạn của thí nghiệm

Vậy có thể dùng RL environments mở ngay tại nhà để làm một model nhỏ tốt hơn không? Muhammad nói: có (theo video đăng ngày 17/10/2026). Anh tóm lại ba thứ cần có (trên màn hình tổng kết: "a checker you trust", "tasks at the edge" và "≈ 1 day"):

- Một checker mà bạn thực sự tin được.

- Một tập task nằm ở mép của những gì model làm được.

- Có lẽ khoảng một ngày train để có cảm nhận đầu tiên xem nó có hiệu quả hay không.

Nhưng điều quan trọng nhất rút ra từ thí nghiệm này, theo Muhammad (video đăng ngày 17/10/2026), là RL mài sắc những gì model đôi khi đã làm được. Một khi dùng hết phần đó, theo ý kiến của anh, điểm số về cơ bản sẽ ngừng tăng.

Anh dặn hãy xem tất cả những điều này với chút dè dặt (take with a grain of salt), vì đây là một thí nghiệm rất hạn chế. Về cơ bản anh chỉ thử trên một model duy nhất. Anh đã thử rất nhiều checkpoint dọc đường, và checkpoint cuối có lẽ là cái tốt nhất anh có được. Theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026), nó vẫn chưa tốt bằng model 27B, nhưng đang tiến tới đó. Anh nghĩ với nhiều dữ liệu train hơn và các kỹ thuật RL đa dạng hơn, anh có thể sẽ đạt tới model 27B.

![limits: 1 model (Qwen3.5-4B), 1 run each; 15 checkpoints tested; distill + RL 58.6% vs 27B 64.0%, cách 5.4 points; next: more data](https://homus.dev/photos/Pl_2TelxjdY-1543.jpg)

"limits", theo số đo của Muhammad Farooq (video đăng ngày 17/10/2026): một model (Qwen3.5-4B), mỗi cấu hình chạy một lần, 15 checkpoint đã thử, checkpoint tốt nhất là distill + RL. Trên toàn bài thi, distill + RL đạt 58.6% so với 64.0% của model 27B, còn cách 5.4 điểm; bước tiếp theo ghi "more data".

Muhammad nói đây là một thí nghiệm RL thú vị, anh học được rất nhiều và muốn chia sẻ với mọi người. Anh sẽ đưa mọi thứ lên GitHub, gồm checker và model đã train, để nếu muốn, bạn có thể chạy trên GPU của chính mình và xem đẩy nó đi xa được tới đâu. Tất cả các công thức (recipes) cũng sẽ nằm trên GitHub (repo của thí nghiệm đã có trên GitHub, đọc ngày 22/10/2026, xem phần nguồn bên dưới). Anh hy vọng video hữu ích và cảm ơn mọi người đã xem.

## Nguồn và liên kết

- Tên gốc: I Trained Qwen 4B With RL to Catch Qwen 27B
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=Pl_2TelxjdY](https://www.youtube.com/watch?v=Pl_2TelxjdY)

- Kênh YouTube Prompt Engineering (Muhammad Farooq): [youtube.com/channel/UCDq7SjbgRKty5TgGafW8Clg](https://www.youtube.com/channel/UCDq7SjbgRKty5TgGafW8Clg)

- Repo của thí nghiệm: eval harness, sandbox, strict checker, script train và kết quả bài thi (đọc ngày 22/10/2026): [github.com/PromtEngineer/smoldataenvs-grpo-spark](https://github.com/PromtEngineer/smoldataenvs-grpo-spark)

- SmolDataEnvs, bộ RL environment dùng trong video: [huggingface.co/datasets/FineEnvs/SmolDataEnvs](https://huggingface.co/datasets/FineEnvs/SmolDataEnvs)

- FineEnvs: [github.com/adithya-s-k/FineEnvs](https://github.com/adithya-s-k/FineEnvs)

- Qwen3.5-4B: [huggingface.co/Qwen/Qwen3.5-4B](https://huggingface.co/Qwen/Qwen3.5-4B) · Qwen3.5-27B: [huggingface.co/Qwen/Qwen3.5-27B](https://huggingface.co/Qwen/Qwen3.5-27B)

- GRPO Trainer trong thư viện TRL: [huggingface.co/docs/trl/grpo_trainer](https://huggingface.co/docs/trl/grpo_trainer)

- NVIDIA DGX Spark: [nvidia.com/en-us/products/workstations/dgx-spark](https://www.nvidia.com/en-us/products/workstations/dgx-spark/)

- Xiaomi MiMo-V2.6: [mimo.mi.com/docs/en-US/news/latest/v2-6](https://mimo.mi.com/docs/en-US/news/latest/v2-6)

- TechCrunch, "Silicon Valley bets big on 'environments' to train AI agents" (21/09/2025): [techcrunch.com](https://techcrunch.com/2025/09/21/silicon-valley-bets-big-on-environments-to-train-ai-agents/)

- Dataset Video Game Sales trên Kaggle: [kaggle.com/datasets/gregorut/videogamesales](https://www.kaggle.com/datasets/gregorut/videogamesales)

Nguồn: https://homus.dev/talks/i-trained-qwen-4b-with-rl-to-catch-qwen-27b · cập nhật 2026-10-22
