Максим Секретов випустив крихітний трансформер на чистому JavaScript, який працює на Node.js і відображає кожен скаляр, вагу та градієнт під час навчання. Репозиторій tiny-language-model-neuro-js дозволяє будь-кому почати з випадкової моделі, подати їй запит на кшталт “can human read ?”, побачити її помилку, а потім запустити навчання однією командою і спостерігати, як відповідь стає правильною.
Чому більшість демо-версій LLM приховують математику
Типові навчальні посібники з мовних моделей покладаються на TensorFlow або PyTorch. Ці фреймворки автоматично будують обчислювальні графіки та обчислюють градієнти «під капотом», тому учні бачать лише високорівневий код і криві втрат (loss curves). Фундаментальні операції — як кожен токен стає ембедінгом, як розраховуються показники уваги (attention scores), як градієнти проходять назад через кожну матрицю — залишаються невидимими.
Чим відрізняється JavaScript-модель
Реалізація Секретова зводить усе до одного скрипта Node.js без жодних сторонніх залежностей. Конвеєр навчання (training pipeline) складається з простої послідовності:
- Токенізація
- Ембедінги
- Каузальні блоки трансформера
- Багатоголова самоувага (multi-head self-attention)
- Нейронні мережі прямого поширення (FFN)
- Голова мовної моделі та softmax
- Перехресна ентропія (cross-entropy loss)
- Зворотне поширення помилки (backpropagation)
Запуск node src/train.js --generalize --adaptive-teach запускає повний цикл навчання. Оскільки код написаний на звичайному JavaScript, кожен тензор є простим масивом, кожне множення матриць — це явний цикл, а кожен градієнт знаходиться поруч зі своєю вихідною вагою.
Від випадкових здогадок до правильних відповідей
Коли модель запускається, усі параметри є випадковими. Запит “can human read ?” видає нісенітницю. Після короткої фази попереднього навчання (pre-training) та раунду навчання з учителем (SFT), той самий запит повертає розумну відповідь. Сигнал вчителя — правильні послідовності токенів, що проходять через функцію втрат — поширюється назад через ембедінги, голови уваги та шари FFN, по черзі оновлюючи кожен скаляр.
Боротьба з катастрофічним забуванням
Перші запуски виявили класичну проблему: вивчення нового факту стирало раніше засвоєні знання. Секретов вирішив це за допомогою методу повторення (rehearsal) — повторного представлення старих прикладів під час введення нових даних. Навчання зупиняється лише тоді, коли кожен цільовий токен досягає щонайменше 95% ймовірності та проходить десять послідовних перевірок. Цей простий цикл демонструє ключовий дослідницький виклик без використання будь-яких зовнішніх бібліотек.
Кому це корисно, а кого може оминути
Проєкт не конкурує з комерційними LLM, які працюють на мільярдах параметрів і GPU-кластерах. Така різниця у продуктивності робить його непридатним для робочих навантажень у реальних умовах (production), але перетворює модель на прозорий навчальний посібник. Студенти, ентузіасти та дослідники, яким важко зазирнути всередину фреймворків типу «чорна скринька», тепер мають пісочницю, де математика — це буквально код.
Чого не вистачає і куди проєкт може розвиватися
Оскільки реалізація є навмисно мінімалістичною, це робить код зрозумілим, але обмежує масштабованість.
За чим стежити далі
Репозиторій уже є публічним на GitHub.
Висновок: Спростивши трансформер до чистого JavaScript, Секретов перетворив технологію, відому своєю непрозорістю, на зрозумілий і редагований скрипт. Компромісом є швидкість, але виграшем є розуміння — тепер кожен може спостерігати, як мовна модель вчиться, забуває та перевчається, скаляр за скаляром.
