14 điểm bởi siwoo4985 2026-04-05 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Xin chào, khoảng một tháng trước tôi đã tự triển khai một mô hình diffusion cho văn bản từ đầu và công khai nó. Gần đây khi lướt GeekNews tôi chợt nhớ ra nên giờ mới đăng lên.


Động lực thực hiện

Khi xem MicroGPT của Andrej Karpathy, tôi có ấn tượng rằng “hóa ra có thể giải thích cốt lõi của GPT chỉ bằng đoạn mã ngắn như vậy”. Đúng lúc tôi cũng muốn học về Diffusion, nên đã bắt đầu dự án mang tính giáo dục này với ý tưởng “sẽ rất thú vị nếu làm ra đoạn mã giúp hiểu Diffusion theo cùng cách đó”.


AR và Diffusion: khác nhau ở đâu?

Trong kỷ nguyên LLM, gần như toàn bộ việc sinh văn bản đều dùng phương pháp Autoregressive (AR). Đây là cách dự đoán từng token một từ trái sang phải.

Discrete Diffusion thì ngược lại. Nó đặt toàn bộ chuỗi cùng lúc, rồi dần dần khôi phục từ nhiễu (masking).

Lấy tên "emma" làm ví dụ:  
  
Forward (huấn luyện - thêm nhiễu):  
  t=0 :  e m m a   ← bản gốc  
  t=25:  e _ m a   ← mask một phần  
  t=50:  _ _ m _   ← mask nhiều hơn  
  t=100: _ _ _ _   ← mask hoàn toàn  
  
Reverse (sinh - loại bỏ nhiễu):  
  t=100: _ _ _ _   ← bắt đầu từ trạng thái rỗng  
  t=75:  _ m _ _   ← khôi phục từ những vị trí có độ tin cậy cao trước  
  t=50:  e m _ a  
  t=0 :  e m m a   ← hoàn tất  

Nếu AR giống như “viết từng chữ một”, thì Diffusion gần với “giải ô chữ” hơn.


Cấu trúc triển khai

Có ba phiên bản để bạn chọn xem theo mức độ khó.

  • train_minimal.py — MLP 2 lớp / chỉ dùng NumPy (đơn giản nhất)
  • train_pure.py — MLP 3 lớp + skip connection / chỉ dùng NumPy
  • train.py — Transformer 4 lớp / dùng PyTorch

Cả ba phiên bản đều chia sẻ cùng một vòng lặp diffusion. Chỉ khác kiến trúc denoiser.
Dữ liệu huấn luyện là 32.000 tên tiếng Anh, số tham số ở mức 170K~239K.

Bạn có thể chạy thử ngay:

pip install numpy  # phiên bản tối thiểu  
python train_minimal.py  

Hoan nghênh mọi phản hồi hoặc PR!

Chưa có bình luận nào.

Chưa có bình luận nào.