Зміст
Нейромережа в основі — матриці, активації, помилка, градієнти й оновлення ваг. Писати це «голим» Python можна, але болісно: кожен шар, кожен пристрій, кожен збережений чекпоінт. ML-фреймворк бере на себе тензори, автоматичні градієнти, перенесення на CPU/GPU, цикл навчання й серіалізацію. Нижче — як влаштований такий каркас ізсередину, чим відрізняються PyTorch, TensorFlow/Keras, JAX, tinygrad і micrograd, де закінчується навчання й починається вивід (зокрема ONNX та браузерний WebGPU), і який шлях обрати новачкові.
Ключові висновки
Фреймворк — інфраструктура, не «нейромережа». Модель — математика й ваги; каркас дає тензори, граф, градієнти й пристрої.
micrograd знімає «магію» з autograd. tinygrad показує влаштування стека з мінімумом абстракцій. PyTorch — практичний основний інструмент глибокого навчання.
Навчання ≠ вивід. Для training потрібні зворотний прохід і оптимізатор; для виводу — завантажити ваги й отримати відповідь. Часто навчають у PyTorch, а виводять через ONNX Runtime або в браузері.
Вибір залежить від задачі й заліза. CV і OCR — частіше PyTorch; TPU — JAX/TensorFlow; Apple Silicon — ще й MLX; вивчення внутрішньої будови — tinygrad/micrograd.
Над каркасом живуть екосистеми. Ultralytics, Hugging Face Transformers, timm — не заміна фреймворку, а шари моделей і утиліт.
Навіщо потрібен ML-фреймворк
Без каркаса ви самі пишете множення матриць, збереження активацій для зворотного проходу, оновлення ваг, завантаження батчів і збереження стану. З каркасом це виглядає як бібліотека з зрозумілим API: тензор на пристрої, шар, оптимізатор, даталоадер.
Аналогія: двигун із болтів і металопрокату зібрати можна, але для поїздки потрібен автомобіль із коробкою передач і приладовою панеллю. Фреймворк — автомобіль для циклу «дані → передбачення → помилка → градієнт → нові ваги».
Що всередині: тензор, граф, autograd
Типова архітектура:
ML Framework
│
┌─────────────┼─────────────┐
↓ ↓ ↓
Tensor Autograd Models
│ │ │
↓ ↓ ↓
CPU / GPU Gradients Layers
│ │ │
└─────────────┼─────────────┘
↓
Optimizer → Training
Тензор — багатовимірний масив із типом, формою й пристроєм. Зображення часто [C, H, W], батч — [B, C, H, W]. Нейромережі живуть тензорами, бо майже всі операції — масові лінійно-алгебраїчні перетворення.
Обчислювальний граф (computational graph) — запис того, які операції породили тензор (для зворотного проходу).
Автоматичне диференціювання (autograd) — автоматичний розрахунок градієнтів по цьому графу.
Далі: функція втрат, оптимізатор (SGD, Adam, …), шари (Linear, Conv2d), модель як композиція шарів, Dataset/DataLoader, абстракція пристрою (cpu / cuda / …), серіалізація ваг.
Цикл навчання:
дані → модель → prediction → loss → backpropagation → gradients → optimizer → нові weights
micrograd і tinygrad: зрозуміти, а не лише викликати API
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() ззовні — всередині обхід графа, похідні, пам’ять і запуск ядер на обраному пристрої.
Для OCR, CRNN, YOLO-екосистеми й більшості vision-пілотів PyTorch — розумний старт. Далі ваги часто йдуть у ONNX для сервера або браузера.
TensorFlow, Keras і JAX
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.
Інші назви й важлива відмінність
Коротко по периферії: 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 vs inference і шлях до заліза
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.
Порівняння й шлях новачка
| Критерій | 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)



Коментарі