Учебник Глубокое обучение для начинающих
Нейросети кажутся магией только до тех пор, пока вы не реализуете их собственными руками. Этот курс строит понимание глубокого обучения снизу вверх: вы соберёте искусственный нейрон, слои, прямое распространение, функции активации, функции потерь и — главное — алгоритм обратного распространения ошибки на чистом Python без сторонних библиотек. Весь ключевой код запускается прямо в браузере: вы увидите, как сеть с нуля учится решать XOR и как падает ошибка по эпохам. В финале — содержательный обзор реальных архитектур: свёрточные сети, рекуррентные сети и трансформеры, которые лежат в основе современных LLM. От читателя нужны Python и базовая математика: производные и векторы.
Курс «Глубокое обучение: нейросети с нуля» состоит из 6 разделов и 25 уроков: От нейрона к сети, Прямое распространение, Обучение: функции потерь и градиент, Обратное распространение, Практики обучения и Архитектуры (обзор). Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 От нейрона к сети
- Искусственный нейрон: из чего он сделан
Биологическая аналогия и устройство искусственного нейрона: взвешенная сумма входов, смещение и функция активации. Реализуем нейрон на чистом Python.
- Перцептрон: учим нейрон логике AND и OR
Перцептрон Розенблатта и правило обучения. Реализуем на Python нейрон, который сам подбирает веса и обучается логическим функциям AND и OR.
- Предел линейности: почему один нейрон не решает XOR
Линейная разделимость и её границы. Показываем перебором, что ни при каких весах одиночный нейрон не способен решить XOR — отсюда необходимость скрытых слоёв.
- Многослойная сеть: идея скрытых слоёв
Архитектура многослойного перцептрона: входной, скрытые и выходной слои. Как скрытые слои строят иерархию признаков и почему именно глубина даёт мощность.
- Искусственный нейрон: из чего он сделан
2 Прямое распространение
- Слои и матричная форма
Как слой нейронов записывается через умножение матрицы весов на вектор входа плюс смещения. Реализуем плотный (dense) слой на чистом Python.
- Функции активации: sigmoid, tanh, ReLU
Зачем сети нелинейность и чем различаются sigmoid, tanh и ReLU. Реализуем все три на Python, сравниваем значения и обсуждаем их свойства.
- Полный forward pass на маленькой сети
Собираем прямое распространение целиком: вход проходит через скрытый слой и выходной слой. Считаем выход сети 2-3-1 вручную на Python.
- Softmax: вероятности для классификации
Как превратить сырые выходы сети (логиты) в распределение вероятностей по классам. Реализуем устойчивый softmax на Python и разбираем его свойства.
- Слои и матричная форма
3 Обучение: функции потерь и градиент
- Что значит «обучить» сеть
Обучение как поиск весов, минимизирующих функцию потерь. Разбираем, что такое потеря, обучающая выборка и почему обучение — это задача оптимизации.
- Функции потерь: MSE и кросс-энтропия
Две главные функции потерь: MSE для регрессии и кросс-энтропия для классификации. Реализуем обе на Python и считаем ошибку на конкретных примерах.
- Градиентный спуск: скатываемся в минимум
Градиент как направление наискорейшего роста и спуск против него. Реализуем градиентный спуск на Python и наблюдаем, как параметр сходится к минимуму.
- Зачем градиенты по всем весам
Почему для обучения нужна производная потери по каждому весу и смещению. Численная оценка градиента и почему она слишком дорога для реальных сетей.
- Что значит «обучить» сеть
4 Обратное распространение
- Правило цепочки: главная идея backprop
Как правило цепочки позволяет вычислить градиент потери по любому весу глубокой сети. Наглядно разбираем композицию функций и распространение производной назад.
- Вывод градиентов для слоёв наглядно
Пошаговый вывод градиентов для двухслойной сети: как ошибка выходного слоя передаётся в скрытый. Реализуем один шаг backprop вручную на Python.
- Обучаем XOR с нуля: backprop вживую
Полная реализация обучения нейросети с нуля: forward pass, backprop и градиентный спуск обучают сеть 2-2-1 решать XOR. Наблюдаем падение ошибки по эпохам.
- Затухающие и взрывающиеся градиенты
Почему в глубоких сетях градиент затухает или взрывается при проходе назад. Демонстрируем эффект на Python и разбираем способы борьбы.
- Правило цепочки: главная идея backprop
5 Практики обучения
- Инициализация весов
Почему случайные веса нужно масштабировать по числу входов. Сравниваем наивную и Xavier-инициализацию на Python и видим разницу в масштабе сигнала.
- Скорость обучения и оптимизаторы
Как learning rate влияет на сходимость и что добавляют momentum и Adam. Запускаемый эксперимент показывает разницу между малым, большим и расходящимся lr.
- Батчи, эпохи и метрики обучения
Что такое батч, эпоха и итерация и зачем мини-батчи. Реализуем разбиение данных на батчи и разбираем, какие метрики отслеживать при обучении.
- Переобучение и регуляризация
Что такое переобучение в нейросетях и как с ним бороться: L2-регуляризация, dropout, batch normalization, ранняя остановка. Идеи и где что применять.
- Инициализация весов
6 Архитектуры (обзор)
- Полносвязные сети и их пределы
Где полносвязные сети сильны и почему они плохо подходят для изображений и последовательностей. Считаем, как взрывается число параметров на картинках.
- Свёрточные сети (CNN) для изображений
Идея свёртки и пулинга: как CNN находят локальные признаки и переиспользуют детекторы по всему изображению. Реализуем 1D-свёртку и пулинг на Python.
- Рекуррентные сети (RNN и LSTM)
Как RNN обрабатывают последовательности через скрытое состояние-память и почему появились LSTM. Реализуем игрушечную RNN, накапливающую состояние, на Python.
- Трансформеры и внимание: мост к LLM
Идея механизма внимания (attention) и почему трансформеры вытеснили RNN. Считаем простое внимание на Python и связываем это с современными языковыми моделями.
- Как это делают на практике и что дальше
Реальный стек глубокого обучения: фреймворки PyTorch и TensorFlow, автодифференцирование, GPU, предобученные модели. Куда двигаться дальше в обучении нейросетям.
- Полносвязные сети и их пределы