Блог
[каждый виджет исполняет тела функций спеки gHashTag/t27 specs/ml, собранные в wasm; урок 10 это усредняющий пулинг, пока не слита t27#10612; фикстуры взяты из самих спек, на настоящих данных ничего не обучалось] Курс 10 открывает части, которыми думают агенты проекта: ReLU, GELU и softmax, эмбеддинги и dropout, пулинг и пакетную нормализацию, MSE, перекрёстную энтропию и функцию Хьюбера, SGD, RMSProp, Adam и LAMB, обратное распространение, сеть 2-8-1, которая учит XOR в браузере, рекуррентную ячейку, вентили LSTM, внимание, позиционное кодирование, блок энкодера и PPO.

На t27.ai вышел курс 10: Нейросети на t27, от одного нейрона до блока трансформера. Агенты этого проекта думают нейросетями, а части, из которых эти сети собраны, уже лежат в gHashTag/t27 спеками с числовыми тестами: функции активации, слои, функции потерь, оптимизаторы, рекуррентные ячейки, внимание, блок трансформера. Курс открывает их по одной. В нём 27 уроков в 9 модулях, каждый урок начинается с вопроса, который задал бы любопытный человек, и виджет отвечает на него числами, которые вычисляют тела fn самой спеки, скомпилированные в WebAssembly и запущенные в вашем браузере.
| Модуль | Виджеты | Спеки в specs/ml |
|---|---|---|
| Один нейрон | nn-relu, nn-sigmoid, nn-tanh | relu_activation, sigmoid_activation, tanh_activation |
| Новые изгибы | nn-gelu, nn-silu, nn-elu | gelu_activation, silu_swish_activation, elu_activation |
| Слой | nn-softmax, nn-embedding, nn-dropout | softmax, embedding_layer, dropout_layer |
| Картинки | nn-conv, nn-maxpool, nn-batchnorm | avgpool2d_layer, maxpool2d_layer, batchnorm_layer |
| Ошибка | nn-mse, nn-bce, nn-huber | mse_loss, binary_crossentropy_loss, huber_loss |
| Под гору | nn-sgd, nn-rmsprop, nn-adam | sgd, rmsprop, adam |
| Обучение | nn-backprop, nn-xor, nn-lamb | dense_layer, mlp, lamb |
| Память и внимание | nn-rnn, nn-lstm, nn-attention | rnn_cell, lstm_single, attention_mechanism |
| Трансформер и награда | nn-positions, nn-encoder, nn-ppo | positional_encoding, encoder_block, ppo_clip_loss |
Картинки показывают, как выглядят числа: кривые активации, по которым можно вести курсор, вместе с наклоном, столбики softmax, которые заостряются, когда охлаждаешь температуру, окна пулинга как тепловые карты, вес, спускающийся в чашу под SGD, RMSProp и Adam, две головы внимания как сетки и позиции как стрелки четырёх часов.
Урок 20 обучает сеть. mlp.t27 хранит сеть 2-8-1 из ReLU и тест, что она выучивает XOR за 2000 эпох при lr 0.05. Собранная в wasm, та же fn xor(epochs, which) работает в виджете, заново для каждой точки кривой потерь. Потеря падает с 0.8896 в эпохе 1 до 1.8e-13, а четыре ответа выходят в пределах 4e-7 от 0, 1, 1 и 0. Рисунок ниже нарисован этой собранной fn.
Ни один виджет не копирует формулу. scripts/t27-logic.mjs из 999-multibots-telegraf запускает t27c gen на спеке, собирает Zig через Zig 0.16 под wasm32 и пишет небольшой модуль с одной функцией на каждую fn спеки; scripts/widget-logic.mjs сайта кладёт его рядом с виджетом вместе с побайтной копией спеки и останавливает сборку, если они разошлись. Функции specs/ml принимают индекс как usize, и t27-logic.mjs научился его понижать в 999#4017; после этого 27 спек дали 27 виджетам их логику без единой переписанной строки. Читатель спек на сайте в том же изменении научился читать эпсилон, записанный как 1e-8.
Поработаем вместе
Работаю по контракту и part-time с hardware-AI, FPGA/RTL и ML-системами — от спецификации и открытого тулчейна до воспроизводимых измерений.