Maksim Sekretov đã phát hành một mô hình transformer nhỏ gọn, thuần JavaScript, chạy trên Node.js và hiển thị mọi giá trị vô hướng (scalar), trọng số (weight) và gradient trong quá trình huấn luyện. Repo tiny-language-model-neuro-js cho phép bất kỳ ai bắt đầu với một mô hình ngẫu nhiên, đưa vào một câu lệnh (prompt) như “can human read ?”, xem nó thất bại, sau đó chạy một lệnh huấn luyện duy nhất và thấy câu trả lời trở nên chính xác.
Tại sao hầu hết các bản demo LLM đều che giấu toán học
Các hướng dẫn về mô hình ngôn ngữ điển hình thường dựa vào TensorFlow hoặc PyTorch. Các framework này tự động xây dựng đồ thị tính toán và tính toán gradient ở phía sau, vì vậy người học chỉ thấy mã nguồn cấp cao và các đường cong mất mát (loss curves). Các hoạt động cốt lõi—cách mỗi token trở thành một embedding, cách điểm số attention được tính toán, cách gradient lan truyền ngược qua mọi ma trận—vẫn luôn ẩn khuất.
Mô hình JavaScript này có gì khác biệt
Bản triển khai của Sekretov lược bỏ mọi thứ để chỉ còn lại một script Node.js duy nhất không phụ thuộc vào thư viện bên ngoài (dependency-free). Quy trình huấn luyện tuân theo một trình tự đơn giản:
- Tokenization
- Embeddings
- Các khối causal transformer
- Multi-head self-attention
- Mạng feed-forward (FFN)
- Language-model head và softmax
- Cross-entropy loss
- Lan truyền ngược (Backpropagation)
Chạy node src/train.js --generalize --adaptive-teach sẽ khởi động toàn bộ vòng lặp huấn luyện. Vì mã nguồn là JavaScript thuần, mỗi tensor là một mảng đơn giản, mỗi phép nhân ma trận là một vòng lặp tường minh, và mọi gradient đều nằm ngay cạnh trọng số nguồn của nó.
Từ những dự đoán ngẫu nhiên đến những câu trả lời chính xác
Khi mô hình bắt đầu, tất cả các tham số đều là ngẫu nhiên. Đặt câu hỏi “can human read ?” sẽ chỉ nhận được những chuỗi ký tự vô nghĩa. Sau một giai đoạn tiền huấn luyện (pre-training) ngắn và một vòng tinh chỉnh có giám sát (supervised fine-tuning - SFT), cùng một câu lệnh đó sẽ trả về một câu trả lời hợp lý. Tín hiệu từ "người thầy"—các chuỗi token chính xác được đưa qua hàm mất mát (loss function)—lan truyền ngược qua các lớp embedding, attention heads và FFN, lần lượt cập nhật từng giá trị vô hướng (scalar).
Giải quyết vấn đề quên lãng thảm họa (catastrophic forgetting)
Những lần chạy đầu tiên cho thấy một vấn đề kinh điển: việc học một sự thật mới đã xóa sạch những gì đã học trước đó. Sekretov đã khắc phục điều này bằng phương pháp "rehearsal" (ôn tập)—trình bày lại các ví dụ cũ trong khi giới thiệu dữ liệu mới. Quá trình huấn luyện chỉ dừng lại khi mọi token mục tiêu đạt xác suất ít nhất 95% và vượt qua mười lần kiểm tra liên tiếp. Vòng lặp đơn giản này minh họa một thách thức nghiên cứu cốt lõi mà không cần bất kỳ thư viện bên ngoài nào.
Ai sẽ được hưởng lợi và ai có thể bị bỏ lại phía sau
Dự án này không cạnh tranh với các LLM thương mại chạy trên hàng tỷ tham số và các cụm GPU. Khoảng cách về hiệu suất khiến nó không phù hợp cho các khối lượng công việc thực tế (production workloads), nhưng điều đó lại biến mô hình thành một công cụ giảng dạy minh bạch. Sinh viên, những người đam mê và các nhà nghiên cứu vốn gặp khó khăn trong việc nhìn thấu bên trong các framework "hộp đen" giờ đây đã có một môi trường thử nghiệm (sandbox) nơi toán học chính là mã nguồn thực thụ.
Những gì còn thiếu và hướng đi tiếp theo của dự án
Vì bản triển khai được cố ý tối giản, nó giúp mã nguồn dễ đọc nhưng lại hạn chế khả năng mở rộng.
Điều cần theo dõi tiếp theo
Kho lưu trữ này đã được công khai trên GitHub.
Takeaway: Bằng cách lược bỏ mọi thứ để đưa một mô hình transformer về JavaScript thuần túy, Sekretov đã biến một công nghệ vốn nổi tiếng là khó hiểu thành một đoạn mã có thể đọc và chỉnh sửa được. Sự đánh đổi ở đây là tốc độ, nhưng cái nhận lại được là sự thấu hiểu—giờ đây bất kỳ ai cũng có thể quan sát một mô hình ngôn ngữ học, quên và học lại, qua từng giá trị vô hướng một.
