Содержание
Собрать двигатель из болтов и металлопроката можно. Для поездки нужен автомобиль: коробка, приборная панель, место под багаж. Нейросеть в основе — матрицы, активации, ошибка, градиенты и обновление весов. Писать это на «голом» Python — как собирать мотор на верстаке вручную: каждый слой, каждое устройство, каждый сохраняемый чекпоинт. ML-фреймворк — автомобиль для цикла «данные → предсказание → ошибка → градиент → новые веса»: тензоры, автоматические градиенты, перенос на CPU/GPU, цикл обучения и сериализация.
Ниже — что под капотом, чем отличаются PyTorch, TensorFlow/Keras, JAX, tinygrad и micrograd, где заканчивается сборка автомобиля и начинается поездка (включая ONNX и браузерный WebGPU), и какой путь выбрать новичку.
Ключевые выводы
Фреймворк — автомобиль, не «нейросеть». Модель — математика и веса; каркас даёт тензоры, граф, градиенты и устройства.
micrograd снимает двигатель на верстаке. tinygrad показывает голый шасси с минимумом панелей. PyTorch — практический дорожный автомобиль для глубокого обучения.
Сборка ≠ поездка. Training нужен в backward и оптимизаторе; inference — загрузить веса и получить ответ. Часто обучение в PyTorch, вывод в ONNX Runtime или в браузере.
Выбор зависит от задачи и железа. CV и OCR — чаще PyTorch; TPU — JAX/TensorFlow; Apple Silicon — ещё и MLX; изучение внутренностей — tinygrad/micrograd.
Поверх каркаса живут экосистемы. Ultralytics, Hugging Face Transformers, timm — не замена автомобилю, а кузова и навесное оборудование.
Двигатель из болтов собрать можно — для поездки нужен автомобиль
Без каркаса вы сами пишете умножения матриц, хранение активаций для обратного прохода, обновление весов, загрузку батчей и сохранение состояния. Это и есть верстак с болтами: всё работает, но каждый шаг — ручной. С каркасом картина другая: тензор на устройстве, слой, оптимизатор, даталоадер — как педали и приборы, которыми вы уже умеете пользоваться.
Фреймворк не «является» нейросетью. Он снимает рутину, чтобы вы думали о модели и данных, а не о том, как в очередной раз переложить активации в память перед обратным проходом.
Под капотом: тензор, граф и autograd
В дорожном автомобиле вы смотрите на панель, а под капотом крутятся узлы, без которых поездки не будет. У ML-фреймворка та же раскладка: сверху понятный API, внутри — массив с устройством, запись операций и автоматический расчёт производных.
Типичная архитектура:
ML Framework
│
┌─────────────┼─────────────┐
↓ ↓ ↓
Tensor Autograd Models
│ │ │
↓ ↓ ↓
CPU / GPU Gradients Layers
│ │ │
└─────────────┼─────────────┘
↓
Optimizer → Training
Тензор — многомерный массив с типом, формой и устройством. Изображение часто [C, H, W], батч — [B, C, H, W]. Нейросети живут тензорами, потому что почти все операции — массовые линейные алгебраические преобразования. Граф вычислений — запись того, какие операции породили тензор (для обратного прохода). Автоматическое дифференцирование (autograd) — автоматический расчёт градиентов по этому графу.
Дальше навешиваются привычные детали кузова: функция потерь, оптимизатор (SGD, Adam, …), слои (Linear, Conv2d), модель как композиция слоёв, Dataset/DataLoader, абстракция устройства (cpu / cuda / …), сериализация весов. Цикл обучения — маршрут, по которому автомобиль ездит снова и снова:
данные → модель → prediction → loss → backpropagation → gradients → optimizer → новые weights
На верстаке и на голом шасси: micrograd и tinygrad
Прежде чем сесть в дорожный автомобиль, полезно один раз разобрать двигатель на верстаке и один раз проехать на голом шасси без лишних панелей. Так видно, что крутится под капотом, а не только какие кнопки нажать.
micrograd (идея Andrej Karpathy) — крошечная реализация скалярного autograd. Цель не скорость, а ясность: узел хранит значение и локальный градиент, backward идёт по рёбрам назад. После раздела читатель видит: autograd — не магия, а аккуратный обход графа. tinygrad — маленький фреймворк с собственной философией минимализма и прозрачности стека (не «урезанный PyTorch»). Полезен, когда хочется увидеть, как операция доходит до ускорителя, без километров индустриальных абстракций. Для прод-CV его обычно не выбирают первым; для учёбы устройства ML-стека — да.
Как выглядит идея на пальцах. Узел хранит значение и локальный вклад в производную. Если c = a * b, то при обратном проходе вклад в a пропорционален b, вклад в b — пропорционален a. Цепочка a → b → c раскрывается как последовательное применение правила цепочки. Именно это и делает loss.backward() в большом каркасе — только на тензорах и с оптимизациями памяти.
PyTorch — дорожный автомобиль для большинства маршрутов
PyTorch стал де-факто стандартом deep learning в исследованиях и большей части прикладного CV/LLM-стека. Это не учебный макет: за рулём вы получаете torch.Tensor, torch.nn, torch.optim, Dataset/DataLoader, autograd, CUDA, сохранение (state_dict, .pt) — полный набор для повседневных поездок.
Минимальный цикл:
for x, y in dataloader:
optimizer.zero_grad()
prediction = model(x)
loss = criterion(prediction, y)
loss.backward()
optimizer.step()
zero_grad очищает прошлые градиенты; forward считает предсказание; criterion — ошибку; backward наполняет .grad; step обновляет веса. Одна строка loss.backward() снаружи — внутри обход графа, производные, память и запуск ядер на выбранном устройстве. Ту же цепочку вы уже видели на верстаке micrograd; здесь она спрятана за панелью.
Для OCR, CRNN, YOLO-экосистемы и большинства vision-пилотов PyTorch — разумный старт. Дальше веса часто уходят в ONNX для сервера или браузера. Сохранение модели — отдельный навык. Обычно сохраняют state_dict (веса), а не весь Python-объект целиком: так проще версионировать код модели и подгружать чекпоинт на другой машине. Формат .pt / .pth — соглашение экосистемы torch, а не универсальный «формат любой нейросети».
TensorFlow, Keras и JAX — другие дороги, другие машины
Не все маршруты ведут по одной и той же трассе. Где-то уже проложена инфраструктура обслуживания, где-то нужен другой стиль вождения, где-то дорога идёт через облачные ускорители Google.
TensorFlow долго был главным индустриальным каркасом. Сегодня важен связкой с Keras, tf.data, обслуживанием моделей и сценариями, где уже сложилась TF-инфраструктура. TensorFlow 2.x сделал упор на немедленное исполнение (eager) — ближе к привычному императивному стилю. Keras — высокоуровневый API моделей. Исторически сросся с TF как tf.keras; отдельно существует развитие Keras как удобного слоя над разными бэкендами. Упрощённо:
Keras → высокоуровневый API модели
TensorFlow → вычисления и экосистема (часто как backend)
JAX — другой взгляд: «NumPy + дифференцирование + JIT + ускорители» в функциональном стиле. jax.numpy, grad, jit, vmap — трансформации функций, а не «объект nn.Module с состоянием» как в классическом API PyTorch. Силён в исследованиях и на TPU; кривая входа выше, если вы пришли из объектного nn.Module. Простой каркас мысли для JAX: пишете функцию потерь как чистую функцию от параметров и батча, затем grad(loss_fn) даёт градиент, jit ускоряет компиляцией, vmap — векторизацией по оси батча. Состояние модели обычно явные массивы/деревья, а не скрытые буферы внутри объекта слоя. Это удобно для исследований и сложных трансформаций, но требует дисциплины, если вы привыкли к «слою с .parameters() внутри».
Рядом с автомобилем — кузова, запчасти и отдельный мотор для поездки
На одной полке с каркасами лежат и готовые кузова, и отдельные моторы только для езды. Их легко спутать с самим автомобилем обучения.
Кратко по периферии: MXNet — исторически важен, сейчас реже на слуху; PaddlePaddle — своя экосистема; OneFlow — нишевые сценарии; MLX — интересен на Apple Silicon (единая память, GPU Apple). ONNX Runtime — в первую очередь движок вывода, не полноценный фреймворк обучения в стиле PyTorch:
Training (PyTorch / TF / …) → ONNX → ONNX Runtime → Inference
Отдельно: фреймворк обучения ≠ библиотека готовых моделей.
PyTorch → инструмент создать и обучить
Ultralytics YOLO → готовый контур детекции поверх экосистемы
HF Transformers → модели и пайплайны поверх каркасов
timm / Diffusers → зоопарки моделей и утилит
Путать «поставим YOLO» с «выбрали фреймворк» — как путать готовый кузов с самим автомобилем. Частая ошибка новичка.
Какая дорога — какая машина
Таблица ниже — не рейтинг «кто лучше», а соответствие маршруту. Сначала задача и железо, потом логотип.
| Задача | Что рассматривать |
|---|---|
| Понять обратное распространение | micrograd |
| Увидеть устройство фреймворка | tinygrad |
| Компьютерное зрение, CRNN, OCR | PyTorch |
| YOLO | экосистема вокруг PyTorch |
| LLM | PyTorch + Transformers |
| Исследования / нестандартные трансформации | PyTorch / JAX |
TPU |
JAX / TensorFlow |
Apple Silicon |
PyTorch / MLX |
| Быстрый прототип UI-моделей | PyTorch / Keras |
| Прод-вывод | ONNX Runtime и др. inference-рантаймы |
| Вывод в браузере | ONNX → Web (Transformers.js / ORT Web + WebGPU) |
Какой моторный отсек: CPU, GPU и TPU
Автомобиль едет только если моторный отсек согласован с дорогой. Устройство в фреймворке — такой же контракт: не название на шильдике, а драйверы, сборка и бэкенд.
Framework → CPU | GPU (CUDA / Apple / …) | TPU
- CPU — всегда доступен; для учебных моделей и отладки часто достаточно.
NVIDIACUDA — основной ускоритель дляPyTorch/TensorFlowв проде и исследованиях.- Apple GPU —
Metal/MPSвPyTorch, плюс отдельный интерес кMLXна единой памяти. AMD— зависит от стека (ROCmи сборки); проверяйте поддержку конкретной версии каркаса.- TPU — сильная сторона
JAX/TensorFlowв облачных сценариях Google.
device = "cuda" — контракт с окружением, не заклинание. Перенос тензора и модели на устройство (to(device)) должен быть согласован: иначе получите ошибку или тихий проигрыш скорости.
Собрать автомобиль и сесть за руль — не одно и то же
Сборка на заводе и поездка по городу — разные работы. Training: прямой проход, функция потерь, обратный проход, градиенты, оптимизатор. Inference: загрузить веса, подать данные, получить результат — без обучения.
TRAINING: данные → модель → loss → backprop → weights
INFERENCE: данные → модель → результат
От Python до GPU путь длиннее, чем кажется с панели:
Python → Framework API → тензорные операции → backend → CUDA/Metal/TPU runtime → hardware
Строка x @ weights может развернуться в огромный объём работы на видеокарте — поэтому «простой API» не значит «простая реализация». Связка с браузером — когда собранный автомобиль отдают в другой гараж только для поездки:
PyTorch (обучение) → ONNX → Transformers.js / ORT Web + WebGPU (вывод во вкладке)
Подробности клиентского пути — в WebGPU + Transformers.js, экспорта — в ONNX: от PyTorch до Runtime.
Карта маршрутов: сравнение и путь новичка
Сравнить дорожные автомобили полезно рядом, а не по рекламным слоганам. Ниже — где дружелюбный старт, где сильнее экосистема зрения, где фокус на TPU и где уместен учебный шасси.
| Критерий | PyTorch | TF / Keras | JAX | tinygrad |
|---|---|---|---|---|
| Старт | Очень дружелюбный | Keras проще «с нуля» | Круче кривая | Для любопытных |
| Deep learning / CV | Отличная экосистема | Сильна там, где уже TF | Research / TPU |
Не главный выбор |
| Research | Стандарт | Есть | Сильный | Учебный |
| GPU | Зрелый CUDA-путь | Зрелый | Зрелый | Есть, смотрите статус |
TPU |
Слабее фокус | Да | Да | Не фокус |
| Изучение внутренностей | Сложный код | Сложный код | Свой стиль | Сильная сторона |
| Прод-вывод | Часто через экспорт | Своя экосистема сервиса | Свои пайплайны | Редко как единственный стек |
Маршрут изучения — сначала верстак и основы, потом дорожный автомобиль:
Python → NumPy → основы сетей → micrograd → PyTorch → CNN → CRNN → Transformers → LLM
Ветка зрения: PyTorch → YOLO / детекция → OCR.
Первый выезд: мини-проект на рукописных цифрах
Теория без руля быстро забывается. Возьмите рукописные цифры (MNIST или свой набор) и один раз пройдите контур «руками» — от загрузки данных до отдельного скрипта вывода.
- Загрузить данные и собрать
DataLoaderс батчами. - Описать маленький CNN (
Conv→ активация → пулинг → линейный слой). - Написать цикл обучения:
zero_grad→ forward → loss →backward→step. - Оценить точность на отложенной выборке.
- Сохранить
state_dictв.pt. - В отдельном скрипте загрузить веса и сделать inference без обучения.
- Мысленно сопоставить те же шаги с идеями
micrograd/tinygrad: где граф, где градиент, где «магия» API.
Практика рукописных цифр на сайте: CNN → TrOCR.
Типичные ошибки на старте
Большинство ранних сюрпризов — не «сломанный автомобиль», а путаница, что в нём двигатель, что кузов, а что только поездка.
- Считать
PyTorch«нейросетью», а не каркасом. - Путать фреймворк и готовый зоопарк моделей (YOLO/Transformers).
- Не понимать форму тензора и размерность батча.
- Копировать
backward()без картины графа. - Думать, что GPU обязателен для любой учебной задачи.
- Путать training и inference; ждать, что
.ptуниверсален для любого рантайма. - Выбирать
deviceнаугад без проверки драйверов.
Частые вопросы
С чего начать, если цель — OCR документов?
Python + PyTorch, компактная модель под кропы, затем при необходимости экспорт в ONNX. См. также CRNN на замерах.
Нужен ли TensorFlow, если уже есть PyTorch?
Не «для галочки». Нужен, если команда/инфраструктура уже на TF или есть готовые TF-сервисы. Иначе один основной каркас обучения проще сопровождать.
Чем JAX лучше PyTorch?
Не «лучше», а другой стиль: чистые функции, jit/vmap/grad, удобство на TPU. Для классического CV-пайплайна чаще выигрывает экосистема PyTorch.
Можно ли обучать в браузере на WebGPU?
Для серьёзного обучения обычно нет; браузерный стек заточен под вывод. Обучение — на машине разработчика/сервере.
Куда девать обученную модель?
Сохранить веса каркаса (.pt и т.п.), для портативного вывода — ONNX, для вкладки — ORT Web / Transformers.js.
Дальше по теме
Заключение
Нейросеть — математическая модель. Фреймворк — автомобиль вокруг тензоров, градиентов и устройств: двигатель из болтов собрать можно, для поездки нужна панель и кузов. micrograd и tinygrad учат разбирать мотор и смотреть на шасси; PyTorch закрывает большую часть прикладных маршрутов; TensorFlow/Keras и JAX остаются важными ветками под экосистему и ускорители; вывод часто живёт отдельно — в ONNX Runtime или даже в браузере. Выбор инструмента — ответ на вопрос «какая дорога, какое железо, кто будет сопровождать», а не охота за модным логотипом на капоте.
Concepts (tensor, grad) → Frameworks → Models (YOLO, CRNN, LLM)
↓
Training → GPU/TPU/CPU
↓
Inference → Server | Browser (WebGPU)


