← На главную

Byte-level transformer gpt от Маркуса Хаймерля предсказывает байты и генерирует сказки

05.06.2026 17:41 · hackernews

Проект Маркуса Хаймерля gpt — это реализация генеративной трансформер-модели, которая работает не со словами или токенами, а с отдельными байтами. Восьмибитные токены, 256 возможных значений. Модель учится предсказывать следующий байт по контексту. Архитектура универсальная: ей всё равно, что моделировать — текст, ДНК, сжатые данные, картинки, аудио, видео или бинарники.

Сначала байты проходят через token embedding layer — каждый превращается в непрерывный вектор. Дальше — стопка transformer-слоёв. В каждом слое два блока: causal self-attention и feed-forward network, оба с residual-связями. Causal self-attention гарантирует, что предсказание для позиции зависит только от предыдущих. Механика — query, key, value проекции, к ним применяется rotational positional encoding для учёта относительных позиций, затем scaled dot-product attention с causal mask и обратная проекция результата. Feed-forward network — два линейных слоя с swish-активацией посередине. Swish — гладкая функция, умножает вход на его сигмоид.

После всех слоёв — linear projection, которая превращает скрытые состояния в logits для всех 256 возможных байтов. Logits преобразуются в вероятности через softmax, модель обучается максимизировать вероятность правильного следующего байта — cross-entropy loss.

Для обучения используется AdamW — улучшенная версия Adam, где weight decay отделён от градиентного обновления. AdamW хранит скользящие средние градиентов и квадратов градиентов, подстраивая learning rate для каждого параметра. Weight decay работает как L2-регуляризация — заставляет веса быть меньше и улучшает обобщение.

Матричные операции — через BLAS, это даёт эффективное обучение на современном железе.

Сборка и запуск: sudo apt update && sudo apt install clang make libopenblas-dev nvidia-cuda-toolkit git curl, клонируешь https://github.com/markusheimerl/gpt, заходишь в папку, make data, make run -j 6, make infer.

Примеры генерации приложены прямо из терминала. Параметры: d_model=512, hidden=1024, layers=16, vocab=256, seq_len=1024. Семплинг при температуре 0.70. Модель генерирует связные сказочные истории про девочку Лили, спасающую птичку, про мальчика Тима, подружившегося с девочкой Сью, и ещё несколько вариаций. Каждая обрывается тегом <|endoftext|> после завершения. В одном из запусков генерация продолжилась про мальчика, который заметил странного кролика.

Читать оригинал →