Максим Секретов випустив крихітний трансформер на чистому 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, Секретов перетворив технологію, відому своєю непрозорістю, на зрозумілий і редагований скрипт. Компромісом є швидкість, але виграшем є розуміння — тепер кожен може спостерігати, як мовна модель вчиться, забуває та перевчається, скаляр за скаляром.