Учебник PyTorch для начинающих
PyTorch — главная библиотека для глубокого обучения: на ней пишут исследователи и обучают модели в продакшене. Этот курс — практический: вы научитесь реально обучать нейросети, а не только читать про них. Мы разберём тензоры и автоматическое дифференцирование (autograd), соберём модели из слоёв nn.Module, напишем настоящий цикл обучения, подключим данные через DataLoader и дойдёте до свёрточных сетей и transfer learning. Предполагается, что вы знаете Python и основы нейросетей (forward, backprop, градиентный спуск). Видеокарта не нужна — всё работает и на CPU.
Курс «PyTorch» состоит из 6 разделов и 27 уроков: Введение и тензоры, Autograd — автоматическое дифференцирование, Построение моделей (nn.Module), Цикл обучения, Данные и реальные модели и Практика и экосистема. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение и тензоры
- Что такое PyTorch и почему он популярен
PyTorch — библиотека для глубокого обучения с динамическим графом и питоничным API. Чем он отличается и почему его выбирают.
- Установка и устройства: CPU и GPU
Как поставить PyTorch через pip, проверить версию и доступность GPU, и как переносить тензоры на устройство через .to(device).
- Тензоры: создание, типы, форма, индексация
Главный объект PyTorch — тензор. Как его создавать, какие бывают dtype, что такое shape, как индексировать и менять форму через reshape и view.
- Операции и броадкастинг
Поэлементные операции, матричное умножение, агрегации по осям и правила броадкастинга — как PyTorch складывает тензоры разной формы.
- Мост с numpy
Как переводить тензоры в массивы numpy и обратно, что такое общая память между ними и когда возникают подводные камни.
- Что такое PyTorch и почему он популярен
2 Autograd — автоматическое дифференцирование
- requires_grad и граф вычислений
Как PyTorch строит граф вычислений: флаг requires_grad, листовые тензоры, grad_fn и почему именно отсюда берётся автоматический backprop.
- backward() и .grad: как считаются градиенты
Вызов .backward() запускает backprop по графу, а градиенты оседают в .grad. Разбираем на простом примере и сверяем с производной, посчитанной руками.
- detach и no_grad: когда градиенты не нужны
Как выключить построение графа: torch.no_grad() для инференса и валидации, .detach() для вывода тензора из графа. Зачем это экономит память и время.
- zero_grad: почему градиенты обнуляют
PyTorch накапливает градиенты в .grad, а не перезаписывает. Поэтому перед каждым backward их обнуляют. Что будет, если забыть — и почему так сделано.
- requires_grad и граф вычислений
3 Построение моделей (nn.Module)
- nn.Module и слой nn.Linear
Базовый класс всех моделей PyTorch — nn.Module. Что такое слой nn.Linear, как он хранит веса и bias и как применяется к батчу.
- Сборка сети: __init__ и forward
Как собрать собственную нейросеть, унаследовав nn.Module: слои объявляют в __init__, а порядок вычислений описывают в forward.
- Активации и функции потерь
Нелинейности (ReLU, Sigmoid) и функции потерь PyTorch: nn.MSELoss для регрессии и nn.CrossEntropyLoss для классификации — что они ждут на входе.
- nn.Sequential и параметры модели
Быстрая сборка сети через nn.Sequential без класса и доступ к обучаемым параметрам: model.parameters(), named_parameters и подсчёт их числа.
- nn.Module и слой nn.Linear
4 Цикл обучения
- Классический training loop
Пять шагов любого обучения в PyTorch: forward, loss, zero_grad, backward, step. Разбираем порядок и смысл каждой строки.
- Оптимизаторы: SGD и Adam
Что делает torch.optim, как устроен learning rate, чем Adam отличается от SGD и как руками воспроизвести шаг градиентного спуска.
- Режимы train/eval и валидация
Зачем переключать модель в model.train() и model.eval(), как это влияет на dropout и batchnorm, и как правильно считать качество на валидации.
- Полный пример обучения построчно
Собираем всё вместе: данные, модель, loss, оптимизатор и цикл обучения на простой задаче регрессии — с разбором каждой строки кода.
- Классический training loop
5 Данные и реальные модели
- Dataset и DataLoader
Как PyTorch подаёт данные батчами: класс Dataset описывает доступ к примерам, а DataLoader нарезает их на батчи и перемешивает.
- Переобучение и регуляризация
Что такое переобучение, как его заметить по разрыву train/val loss и как с ним бороться: dropout и weight decay в PyTorch.
- Сохранение и загрузка модели (state_dict)
Как правильно сохранять и загружать обученную модель через state_dict, почему не стоит пиклить модель целиком и как устроен чекпойнт.
- GPU-обучение
Как перенести обучение на видеокарту: модель и данные на device, частые ошибки с несовпадением устройств и почему перенос внутри цикла.
- Типичные ошибки начинающих
Чек-лист самых частых граблей PyTorch: несовпадение размерностей, забытый zero_grad, перепутанный режим eval, неверный loss и устройства.
- Dataset и DataLoader
6 Практика и экосистема
- CNN для классификации изображений
Структура свёрточной сети: nn.Conv2d, пулинг и полносвязный хвост. Как картинка превращается в предсказание класса и почему свёртки работают.
- Transfer learning: дообучение готовых моделей
Идея переноса обучения: берём предобученную сеть, замораживаем её и переучиваем только последний слой под свою задачу. Почему это работает.
- Экосистема данных: torchvision и torchtext
Обзор официальных библиотек для данных: torchvision (датасеты, трансформы, готовые модели картинок) и подход к работе с текстом.
- Инференс, деплой, отладка и профилирование
Как запускать обученную модель в проде: чистый инференс, экспорт в TorchScript и ONNX, и как находить узкие места через отладку и профилировщик.
- Экосистема и что дальше
Обзор экосистемы вокруг PyTorch: Lightning для удобного цикла обучения, Hugging Face для готовых моделей, и план дальнейшего развития.
- CNN для классификации изображений