ماکسیم سکرتوف (Maksim Sekretov) یک ترنسفورمر بسیار کوچک و مبتنی بر جاوااسکریپت خالص منتشر کرده است که روی Node.js اجرا می‌شود و تمام اسکالرها، وزن‌ها و گرادیان‌ها را در حین آموزش نمایش می‌دهد. مخزن tiny-language-model-neuro-js به هر کسی اجازه می‌دهد با یک مدل تصادفی شروع کند، پرامپتی مانند «can human read ?» به آن بدهد، شکست خوردن آن را تماشا کند و سپس با اجرای یک دستور ساده، فرآیند آموزش را آغاز کرده و شاهد صحیح شدن پاسخ باشد.

چرا بیشتر دموهای LLM ریاضیات را پنهان می‌کنند

آموزش‌های معمول مدل‌های زبانی بر TensorFlow یا PyTorch تکیه دارند. این فریم‌ورک‌ها به‌طور خودکار گراف‌های محاسباتی را می‌سازند و گرادیان‌ها را در پشت صحنه محاسبه می‌کنند، بنابراین یادگیرندگان تنها کدهای سطح بالا و منحنی‌های خطا (loss curves) را می‌بینند. عملیات‌های زیربنایی — اینکه چگونه هر توکن به یک امبدینگ (embedding) تبدیل می‌شود، چگونه امتیازهای توجه (attention scores) محاسبه می‌شوند و چگونه گرادیان‌ها در هر ماتریس به عقب جریان می‌یابند — پنهان باقی می‌مانند.

تفاوت مدل جاوااسکریپتی در چیست

پیاده‌سازی سکرتوف همه چیز را تا حد یک اسکریپت واحد و بدون وابستگی (dependency-free) در Node.js ساده کرده است. خط لوله (pipeline) آموزش از یک توالی مستقیم پیروی می‌کند:

  • توکن‌سازی (Tokenization)
  • امبدینگ‌ها (Embeddings)
  • بلوک‌های ترنسفورمر علی (Causal transformer blocks)
  • خود-توجهی چند-سره (Multi-head self-attention)
  • شبکه‌های پیش‌خور (FFN)
  • بخش مدل زبانی و سافت‌مکس (softmax)
  • خطای آنتروپی متقاطع (Cross-entropy loss)
  • پس‌انتشار (Backpropagation)

اجرای دستور node src/train.js --generalize --adaptive-teach حلقه کامل آموزش را راه‌اندازی می‌کند. از آنجایی که کد صرفاً جاوااسکریپت است، هر تنسور یک آرایه ساده است، هر ضرب ماتریسی یک حلقه صریح است و هر گرادیان دقیقاً در کنار وزن منبع خود قرار دارد.

از حدس‌های تصادفی تا پاسخ‌های صحیح

وقتی مدل شروع به کار می‌کند، تمام پارامترها تصادفی هستند. پرسیدن «can human read ?» از آن، خروجی نامفهومی تولید می‌کند. پس از یک مرحله پیش‌آموزش (pre-training) کوتاه و یک دور تنظیم دقیق نظارت‌شده (SFT)، همان پرامپت پاسخی منطقی برمی‌گرداند. سیگنال معلم — یعنی توکن‌های صحیح که از طریق تابع خطا عبور داده می‌شوند — به عقب از طریق امبدینگ‌ها، سرهای توجه (attention heads) و لایه‌های FFN منتشر شده و هر اسکالر را به نوبت به‌روزرسانی می‌کند.

مقابله با فراموشی فاجعه‌بار

اجراهای اولیه یک مشکل کلاسیک را نشان دادند: یادگیری یک واقعیت جدید، حقایق قبلاً آموخته‌شده را پاک می‌کرد. سکرتوف این مشکل را با روش تمرین مجدد (rehearsal) حل کرد — یعنی ارائه مجدد مثال‌های قدیمی همزمان با معرفی داده‌های جدید. آموزش تنها زمانی متوقف می‌شود که هر توکن هدف به حداقل ۹۵٪ احتمال برسد و از ده بررسی متوالی جان سالم به در ببرد. این حلقه ساده، یک چالش اصلی در تحقیقات را بدون نیاز به هیچ کتابخانه خارجی نمایش می‌دهد.

چه کسانی بهره می‌برند و چه کسانی ممکن است نادیده گرفته شوند

این پروژه با LLMهای تجاری که روی میلیاردها پارامتر و خوشه‌های GPU اجرا می‌شوند، رقابت نمی‌کند. آن شکاف عملکردی باعث می‌شود این مدل برای بارهای کاری عملیاتی (production workloads) نامناسب باشد، اما همین ویژگی آن را به یک ابزار آموزشی شفاف تبدیل می‌کند. دانشجویان، علاقه‌مندان و پژوهشگرانی که در درک آنچه درون یک فریم‌ورک جعبه‌سیاه (black-box) می‌گذرد مشکل دارند، اکنون یک سندباکس (sandbox) در اختیار دارند که در آن ریاضیات، عینِ کدِ قابل خواندن است.

چه چیزی کم است و پروژه به کجا می‌تواند برود

از آنجایی که پیاده‌سازی عامدانه حداقلی است، کد خوانا باقی می‌ماند اما مقیاس‌پذیری آن محدود می‌شود.

آنچه باید در ادامه دنبال کرد

این مخزن هم‌اکنون در GitHub عمومی است.

نکته کلیدی: سکرتوف با ساده‌سازی یک ترنسفورمر به جاوااسکریپت خالص، یک فناوری که به ابهامِ بدنام معروف است را به یک اسکریپت خوانا و قابل ویرایش تبدیل کرده است. موازنه این کار در سرعت است، اما دستاورد آن بینش عمیق است — اکنون هر کسی می‌تواند مشاهده کند که یک مدل زبانی چگونه، اسکالر به اسکالر، یاد می‌گیرد، فراموش می‌کند و دوباره یاد می‌گیرد.