Hôm nay tôi nộp bài báo cáo cuối kỳ của môn Chuyên đề đặc biệt về Machine Learning — môn học cuối cùng trong chương trình thạc sĩ của mình. Cảm giác lạ lắm. Không hẳn là nhẹ nhõm, mà giống như đứng nhìn lại một hành trình dài và thấy mình đã đi được bao xa.
Ghi lại ở đây — về đề tài mình đã chọn và những gì học được từ nó.
Bài toán: AI thiết kế thí nghiệm sinh học
Hãy tưởng tượng bạn cần tìm ra trong số 20.000 gen của con người, những gen nào ảnh hưởng đến khả năng miễn dịch chống ung thư của tế bào T. Mỗi thí nghiệm CRISPR tốn hàng nghìn đô. Bạn chỉ có ngân sách cho 5 vòng thử nghiệm, mỗi vòng kiểm tra được tối đa 128 gen. Bạn chọn gen nào?
Đây không phải bài toán giả định. Đây là thực tế hằng ngày của các phòng thí nghiệm sinh học tính toán trên thế giới.
Năm 2024, nhóm nghiên cứu từ Stanford — Roohani et al. — công bố BioDiscoveryAgent: một LLM agent dùng Claude 3.5 Sonnet để suy luận zero-shot về gen, không cần huấn luyện thêm. Kết quả ấn tượng: cải thiện 21% hit rate so với Bayesian Optimization truyền thống.
Tôi đọc paper đó và thấy ngay một điểm có thể cải thiện được.
Vấn đề tôi phát hiện: “Flat Planning”
BioDiscoveryAgent mỗi vòng chỉ tạo ra một kế hoạch duy nhất — rồi đặt toàn bộ ngân sách thí nghiệm vào hướng đó. Nếu LLM chọn sai hướng (ví dụ tập trung vào JAK-STAT pathway trong khi hit thực sự lại nằm ở NF-κB), cả vòng thí nghiệm đó bị lãng phí.
Cơ chế “đổi hướng” duy nhất của hệ thống gốc là một câu nhắc lỏng lẻo trong prompt: “rethink your design strategy.” Không có cơ sở toán học nào đứng sau quyết định đó cả.
Tôi gọi đây là vấn đề “flat planning” — lập kế hoạch đơn tuyến. Và đó là điểm khởi đầu của đề tài tôi.
Giải pháp: Bio-ToT Lite
Tôi đề xuất Bio-ToT Lite — lấy cảm hứng từ Tree-of-Thoughts (Yao et al., 2023) và lý thuyết multi-armed bandits (Auer et al., 2002).
Ý tưởng cốt lõi gồm hai phần:
1. Multi-path planning — K=3 nhánh song song
Thay vì gọi LLM một lần, mỗi vòng tôi gọi LLM ba lần với system persona và constraint khác nhau, ép LLM phải suy luận theo ba chiến lược hoàn toàn độc lập:
- Pathway-Based: suy luận từ các signaling cascade kinh điển (JAK-STAT, NF-κB, MAPK…)
- Literature-Guided: dựa trên công bố khoa học, GWAS, bằng chứng đã được xác nhận nhiều lần
- Data-Driven: học từ pattern trong kết quả các vòng trước — gene family, paralog, protein complex
2. UCB1 Budget Allocation — phân bổ ngân sách có cơ sở toán học
Coi mỗi nhánh là một “arm” trong bài toán multi-armed bandit. Sau mỗi vòng thử nghiệm, tôi dùng thuật toán UCB1 để tự động phân bổ ngân sách gen cho vòng tiếp theo:
UCB(i) = hit_rate(i) + sqrt( 2 * ln(N) / n(i) )
Nhánh nào có hit rate cao sẽ được cấp thêm slot (exploitation). Nhánh nào ít được thử sẽ nhận thêm một bonus khám phá (exploration). Quan trọng nhất — theo Auer et al. (2002), regret của UCB1 tăng theo O(log N), có thể chứng minh toán học được, không phải chỉ hy vọng.
Kết quả thực nghiệm
Tôi cài đặt Bio-ToT Lite bằng Python (~1.700 dòng code), kế thừa codebase của BioDiscoveryAgent, và chạy thực nghiệm trên dataset IFNG — dữ liệu CRISPR screen thực từ Schmidt et al. (2022) về gene điều hòa Interferon-gamma trong tế bào T người.
Dry-run (deterministic, B=64, R=5 vòng)
| Phương pháp | Hits | Gen đã test | Hit Rate |
|---|---|---|---|
| Bio-ToT Lite | 11 | 320 | 0.0120 |
| BioDiscoveryAgent (baseline) | 8 | 320 | 0.0087 |
UCB1 tự động dồn ngân sách về nhánh literature (10 hits / 116 lượt, hit rate 8.6%) sau khi quan sát nhánh data đóng góp 0 hit — đúng như kỳ vọng lý thuyết.
Thực nghiệm với LLM thật (gpt-4o-mini, B=32, R=3 vòng)
Cả hai đạt 17 hits — nhưng Bio-ToT Lite chỉ cần 73 gen so với 91 gen của baseline. Precision cao hơn +24.7% — mỗi gen được chọn có xác suất là hit cao hơn đáng kể. Nhánh pathway dẫn đầu với hit rate 30.3% (10/33) — hợp lý vì IFN-γ là tín hiệu JAK-STAT/NF-κB rất kinh điển.
Tổng chi phí API cho toàn bộ phiên thực nghiệm: ~$0.023 — rẻ hơn một ly cà phê.
Điều tôi học được — ngoài kỹ thuật
Sự đa dạng cấu trúc quan trọng hơn đa dạng ngẫu nhiên. Self-consistency (Wang et al., 2023) sample nhiều lần với temperature khác nhau — sự đa dạng đến từ noise stochastic. Bio-ToT Lite ép constraint khác nhau ở mức chiến lược suy luận, và điều đó tạo ra sự khác biệt thực sự trong miền khoa học.
Kết quả không đồng nhất là kết quả trung thực. Trên Scharenberg22 (dataset nhỏ 1.061 gen, R=3 vòng), Bio-ToT Lite thua baseline do “branch dilution” khi chia ngân sách quá nhỏ. Tôi không che giấu điều này. Khoa học tốt phải nói rõ khi nào phương pháp không hoạt động.
Dry-run mode là quan trọng cho tái lập khoa học. Chi phí API là rào cản lớn cho replication. Tôi thiết kế deterministic dry-run để bất kỳ ai cũng có thể chạy lại kết quả bằng một lệnh, không cần API key.
Nhìn lại hành trình
Đây là môn học cuối cùng, nhưng không phải điểm kết thúc. Trong quá trình làm đề tài này, tôi đã:
- Đọc hàng chục paper về LLM agents, bandit theory, active learning trong sinh học
- Lần đầu tiên tự mình cài đặt một thuật toán bandit từ đầu và unit-test nó
- Hiểu thực sự tại sao O(log N) regret lại quan trọng — không phải chỉ là con số đẹp
- Cảm nhận được niềm vui khi mô hình chạy đúng như lý thuyết dự đoán
Hành trình học máy của tôi bắt đầu từ những bài toán phân loại đơn giản. Kết thúc ở một AI agent tự học cách phân bổ ngân sách để thiết kế thí nghiệm CRISPR. Chặng đường đó — dù có nhiều đêm debug đến 2 giờ sáng — hoàn toàn xứng đáng.
Cảm ơn thầy hướng dẫn đã đặt câu hỏi mở cho tôi tự khám phá. Cảm ơn nhóm Roohani et al. đã mở nguồn BioDiscoveryAgent — nền tảng mà tôi đứng lên để nhìn xa hơn một chút.
python -m src.experiments.exp4_biotot_comparison
--dataset IFNG --num_genes 64 --steps 5 --dry-run --seed 42