AI и машинное обучение

Учебник Глубокое обучение для начинающих

25 уроков · 6 разделов · бесплатно, без регистрации

Нейросети кажутся магией только до тех пор, пока вы не реализуете их собственными руками. Этот курс строит понимание глубокого обучения снизу вверх: вы соберёте искусственный нейрон, слои, прямое распространение, функции активации, функции потерь и — главное — алгоритм обратного распространения ошибки на чистом Python без сторонних библиотек. Весь ключевой код запускается прямо в браузере: вы увидите, как сеть с нуля учится решать XOR и как падает ошибка по эпохам. В финале — содержательный обзор реальных архитектур: свёрточные сети, рекуррентные сети и трансформеры, которые лежат в основе современных LLM. От читателя нужны Python и базовая математика: производные и векторы.

Курс «Глубокое обучение: нейросети с нуля» состоит из 6 разделов и 25 уроков: От нейрона к сети, Прямое распространение, Обучение: функции потерь и градиент, Обратное распространение, Практики обучения и Архитектуры (обзор). Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 От нейрона к сети

    1. Искусственный нейрон: из чего он сделан

      Биологическая аналогия и устройство искусственного нейрона: взвешенная сумма входов, смещение и функция активации. Реализуем нейрон на чистом Python.

    2. Перцептрон: учим нейрон логике AND и OR

      Перцептрон Розенблатта и правило обучения. Реализуем на Python нейрон, который сам подбирает веса и обучается логическим функциям AND и OR.

    3. Предел линейности: почему один нейрон не решает XOR

      Линейная разделимость и её границы. Показываем перебором, что ни при каких весах одиночный нейрон не способен решить XOR — отсюда необходимость скрытых слоёв.

    4. Многослойная сеть: идея скрытых слоёв

      Архитектура многослойного перцептрона: входной, скрытые и выходной слои. Как скрытые слои строят иерархию признаков и почему именно глубина даёт мощность.

  2. 2 Прямое распространение

    1. Слои и матричная форма

      Как слой нейронов записывается через умножение матрицы весов на вектор входа плюс смещения. Реализуем плотный (dense) слой на чистом Python.

    2. Функции активации: sigmoid, tanh, ReLU

      Зачем сети нелинейность и чем различаются sigmoid, tanh и ReLU. Реализуем все три на Python, сравниваем значения и обсуждаем их свойства.

    3. Полный forward pass на маленькой сети

      Собираем прямое распространение целиком: вход проходит через скрытый слой и выходной слой. Считаем выход сети 2-3-1 вручную на Python.

    4. Softmax: вероятности для классификации

      Как превратить сырые выходы сети (логиты) в распределение вероятностей по классам. Реализуем устойчивый softmax на Python и разбираем его свойства.

  3. 3 Обучение: функции потерь и градиент

    1. Что значит «обучить» сеть

      Обучение как поиск весов, минимизирующих функцию потерь. Разбираем, что такое потеря, обучающая выборка и почему обучение — это задача оптимизации.

    2. Функции потерь: MSE и кросс-энтропия

      Две главные функции потерь: MSE для регрессии и кросс-энтропия для классификации. Реализуем обе на Python и считаем ошибку на конкретных примерах.

    3. Градиентный спуск: скатываемся в минимум

      Градиент как направление наискорейшего роста и спуск против него. Реализуем градиентный спуск на Python и наблюдаем, как параметр сходится к минимуму.

    4. Зачем градиенты по всем весам

      Почему для обучения нужна производная потери по каждому весу и смещению. Численная оценка градиента и почему она слишком дорога для реальных сетей.

  4. 4 Обратное распространение

    1. Правило цепочки: главная идея backprop

      Как правило цепочки позволяет вычислить градиент потери по любому весу глубокой сети. Наглядно разбираем композицию функций и распространение производной назад.

    2. Вывод градиентов для слоёв наглядно

      Пошаговый вывод градиентов для двухслойной сети: как ошибка выходного слоя передаётся в скрытый. Реализуем один шаг backprop вручную на Python.

    3. Обучаем XOR с нуля: backprop вживую

      Полная реализация обучения нейросети с нуля: forward pass, backprop и градиентный спуск обучают сеть 2-2-1 решать XOR. Наблюдаем падение ошибки по эпохам.

    4. Затухающие и взрывающиеся градиенты

      Почему в глубоких сетях градиент затухает или взрывается при проходе назад. Демонстрируем эффект на Python и разбираем способы борьбы.

  5. 5 Практики обучения

    1. Инициализация весов

      Почему случайные веса нужно масштабировать по числу входов. Сравниваем наивную и Xavier-инициализацию на Python и видим разницу в масштабе сигнала.

    2. Скорость обучения и оптимизаторы

      Как learning rate влияет на сходимость и что добавляют momentum и Adam. Запускаемый эксперимент показывает разницу между малым, большим и расходящимся lr.

    3. Батчи, эпохи и метрики обучения

      Что такое батч, эпоха и итерация и зачем мини-батчи. Реализуем разбиение данных на батчи и разбираем, какие метрики отслеживать при обучении.

    4. Переобучение и регуляризация

      Что такое переобучение в нейросетях и как с ним бороться: L2-регуляризация, dropout, batch normalization, ранняя остановка. Идеи и где что применять.

  6. 6 Архитектуры (обзор)

    1. Полносвязные сети и их пределы

      Где полносвязные сети сильны и почему они плохо подходят для изображений и последовательностей. Считаем, как взрывается число параметров на картинках.

    2. Свёрточные сети (CNN) для изображений

      Идея свёртки и пулинга: как CNN находят локальные признаки и переиспользуют детекторы по всему изображению. Реализуем 1D-свёртку и пулинг на Python.

    3. Рекуррентные сети (RNN и LSTM)

      Как RNN обрабатывают последовательности через скрытое состояние-память и почему появились LSTM. Реализуем игрушечную RNN, накапливающую состояние, на Python.

    4. Трансформеры и внимание: мост к LLM

      Идея механизма внимания (attention) и почему трансформеры вытеснили RNN. Считаем простое внимание на Python и связываем это с современными языковыми моделями.

    5. Как это делают на практике и что дальше

      Реальный стек глубокого обучения: фреймворки PyTorch и TensorFlow, автодифференцирование, GPU, предобученные модели. Куда двигаться дальше в обучении нейросетям.