Обучение нейросетей: от основ до практики

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

1. Введение в нейросети и постановка задач

Введение в нейросети и постановка задач

Нейросети стали универсальным инструментом для работы с данными: от распознавания изображений и речи до прогнозирования спроса и поиска аномалий. Но успех почти всегда начинается не с выбора “самой модной” архитектуры, а с правильной постановки задачи: что именно мы предсказываем, по каким данным, как измеряем качество и какие ограничения важны.

> “Deep learning allows computational models that are composed of multiple processing layers to learn representations of data with multiple levels of abstraction.” — LeCun, Bengio, Hinton, Deep learning, Nature (2015)

Что такое нейросеть

Нейронная сеть — это модель машинного обучения, которая преобразует входные данные в выход (например, прогноз или класс) с помощью последовательности простых вычислительных блоков. Исторически модель вдохновлена нейронами, но на практике это математическая конструкция для поиска закономерностей в данных.

Полезные ориентиры:

  • Общее определение и контекст: Нейронная сеть (Википедия)
  • Широкий взгляд на deep learning: Deep Learning Book
  • Нейросеть обычно включает:

  • Вход: числовое представление объекта (текст, картинка, таблица — всё переводится в числа).
  • Слои: последовательные преобразования.
  • Параметры: настраиваемые числа (веса), которые модель “учит” на данных.
  • Функции активации: простые нелинейности, которые позволяют моделировать сложные зависимости.
  • Выход: предсказание (число, вероятность класса, последовательность токенов и т.д.).
  • !Базовая схема полносвязной нейросети и поток данных через слои

    Что значит “обучить” нейросеть

    Обучение — это процесс подбора параметров нейросети так, чтобы она хорошо решала выбранную задачу на новых данных, а не только на тех, что видела.

    Чтобы обучение было осмысленным, нужны четыре компонента:

  • Данные: примеры, на которых мы учимся.
  • Модель: нейросеть выбранного типа.
  • Функция потерь: число, показывающее “насколько плохо” текущее предсказание.
  • Алгоритм оптимизации: способ уменьшать потери, меняя параметры.
  • Интуиция функции потерь на примере регрессии

    Если задача — предсказать число (например, цену), часто используют среднеквадратичную ошибку:

    Где:

  • — количество примеров в наборе данных.
  • — индекс примера.
  • — истинное значение (правильный ответ) для примера .
  • — предсказание модели для примера .
  • — квадрат ошибки (квадрат делает большие ошибки “дороже” и убирает знак).
  • — усреднение ошибки по всем примерам.
  • Важно: вы не обязаны “любить формулы”, чтобы обучать нейросети. Достаточно понимать смысл: мы задаём численную меру ошибки и автоматически подбираем параметры так, чтобы эту ошибку уменьшать.

    Постановка задачи: какие бывают типы

    Постановка задачи отвечает на вопрос: что является входом, что является выходом, и как мы оцениваем качество?

    Обучение с учителем

    Есть вход и правильный ответ (разметка).

  • Классификация: предсказать категорию (спам/не спам, болезнь/норма).
  • Регрессия: предсказать число (цена, время доставки, потребление энергии).
  • Обучение без учителя

    Разметки нет, мы ищем структуру в данных.

  • Кластеризация: группировать похожие объекты.
  • Снижение размерности: сжать данные, сохранив важное (для визуализации или ускорения).
  • Самообучение

    Разметка создаётся из самих данных с помощью “предтекста” (например, предсказывать пропущенную часть текста). На практике это ключевой подход для больших языковых моделей.

    Обучение с подкреплением

    Модель (агент) принимает действия в среде и получает награду. Цель — максимизировать суммарную награду, а не угадать заранее известный правильный ответ.

    Как перевести реальную проблему в ML-задачу

    Ниже — типовой путь от бизнес-вопроса к формулировке задачи для нейросети.

  • Сформулировать цель в терминах решения: что должно улучшиться (скорость, точность, потери, качество сервиса).
  • Определить объект прогнозирования: что является одной “строкой” данных (клиент, заказ, изображение, сессия).
  • Определить входы (признаки): какая информация доступна на момент предсказания.
  • Определить выход (таргет): что именно предсказываем.
  • Выбрать метрику качества: как поймём, что модель стала лучше.
  • Проверить реализуемость: есть ли данные, разметка, достаточно ли примеров.
  • Быстрая шпаргалка по соответствию “цель → задача → метрика”

    | Цель | Тип задачи | Пример выхода | Частые метрики | |---|---|---|---| | Определить категорию | Классификация | класс или вероятность | accuracy, precision/recall, F1 | | Предсказать величину | Регрессия | число | MAE, MSE | | Найти подозрительные случаи | Поиск аномалий | “аномалия/норма” или score | precision/recall, PR-AUC | | Сгруппировать похожие объекты | Кластеризация | номер кластера | нет одной универсальной | | Сделать рекомендации | Ранжирование/рекомендации | список объектов | MAP@K, NDCG@K |

    Примечание: рекомендации часто выглядят как “классификация”, но качество обычно измеряют метриками ранжирования, потому что важен порядок элементов.

    !Процесс постановки ML-задачи и связь между целью, данными, метрикой и моделью

    Данные: признаки, разметка и разбиение

    Чтобы нейросеть обучалась, данные нужно превратить в удобный формат.

    Ключевые понятия:

  • Признаки — входные измерения объекта (числа, категории, текст после кодирования).
  • Разметка — правильные ответы (класс, число, последовательность).
  • Обучающая выборка — данные, на которых обновляются параметры модели.
  • Валидационная выборка — данные для выбора настроек (например, размер модели, скорость обучения).
  • Тестовая выборка — данные для финальной честной оценки качества.
  • Важное практическое правило:

  • Утечка данных — ситуация, когда в признаки попадает информация, которая в реальности недоступна на момент предсказания, или когда данные из будущего случайно влияют на обучение. Это создаёт иллюзию высокого качества, которое исчезает в продакшене.
  • Метрики: чем измерять качество

    Метрика зависит от типа задачи и цены ошибок.

    Примеры:

  • Для классификации:
  • - Accuracy — доля верных ответов (может быть обманчива при сильном дисбалансе классов). - Precision/Recall — точность и полнота (важны, когда ошибки разных типов имеют разную цену). - F1 — баланс precision и recall.
  • Для регрессии:
  • - MAE — средняя абсолютная ошибка (понятна в единицах измерения). - MSE — среднеквадратичная ошибка (сильнее штрафует большие промахи).

    Полезная привычка:

  • Сравнивать нейросеть с базовой линией (baseline): очень простой моделью или правилом (например, “всегда предсказывать самый популярный класс” или “предсказывать среднее значение”). Если нейросеть не лучше baseline — проблема обычно в постановке задачи, данных или метрике.
  • Минимальный рабочий процесс обучения нейросети

    Ниже — “скелет” процесса, который мы будем углублять в следующих темах.

  • Собрать и описать данные.
  • Зафиксировать постановку: входы, выход, метрики.
  • Разделить данные на train/validation/test.
  • Выбрать простую модель и baseline.
  • Обучить, измерить метрики.
  • Найти узкие места: данные, разметка, дисбаланс, утечки, переобучение.
  • Улучшать итерациями: данные → постановка → модель → обучение → оценка.
  • Что будет дальше в курсе

    Дальше мы последовательно разберём:

  • как представлять данные в числах (векторы, эмбеддинги) и готовить датасеты;
  • базовую математику обучения (градиентный спуск) на понятном уровне;
  • основные архитектуры (полносвязные сети, CNN для изображений, RNN/Transformer для последовательностей);
  • практику: обучение, отладку, борьбу с переобучением и оценку качества;
  • переход к реальным проектам: экспериментирование, воспроизводимость, внедрение.
  • Если вы запомните из этой статьи одну мысль: нейросеть — это инструмент оптимизации метрики на данных, а постановка задачи определяет, какую именно “правильность” вы оптимизируете и можете ли вы измерить успех.

    2. Данные: сбор, очистка, разметка и подготовка

    Данные: сбор, очистка, разметка и подготовка

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

    !Общая карта процесса: от источников данных до обучения и контроля качества

    Что значит “данные” в ML-проекте

    В ML-проекте данные обычно включают:

  • Объекты: то, для чего делается предсказание (например, заказ, пользователь, изображение).
  • Признаки: информация, доступная на момент предсказания (например, история покупок, параметры товара).
  • Таргет: правильный ответ, который мы хотим предсказывать (класс, число, текст).
  • Метаданные: время события, источник, версия разметки, идентификаторы.
  • Ключевой практический шаг — заранее договориться, что является одной строкой (одним объектом) и в какой момент времени мы “смотрим” на признаки. Это напрямую связано с предотвращением утечки данных.

    Сбор данных

    Источники данных

    Чаще всего данные берутся из:

  • внутренних баз данных и витрин (заказы, транзакции, профили);
  • логов приложений и сайтов (события, клики, просмотры);
  • файлов (изображения, аудио, документы);
  • внешних датасетов (для обучения прототипов и бенчмарков).
  • Если вы берёте внешний датасет, фиксируйте:

  • лицензию и ограничения использования;
  • как собирались данные (смещения, репрезентативность);
  • как устроена разметка и что именно означает таргет.
  • Полезная практика — вести “паспорт” датасета. Концептуально это описано в статье Datasheets for Datasets.

    Дизайн набора данных

    Перед сбором полезно письменно ответить на вопросы:

  • Как выглядит один объект (строка) и что является идентификатором объекта.
  • Какие признаки реально доступны в момент предсказания.
  • Как формируется таргет и нет ли в нём “подглядывания в будущее”.
  • Какая доля данных будет редкой, шумной, пропущенной — и допустимо ли это.
  • Частые ошибки при сборе

  • Смещение выборки: собрали только “удобные” случаи (например, только активные пользователи) и модель плохо работает на остальных.
  • Дубли: один и тот же объект попал много раз (перекос в обучении и завышенные метрики).
  • Неправильное соответствие по времени: признаки собраны “после события”, которое мы якобы предсказываем.
  • Проверка качества данных: что смотреть в первую очередь

    Качество данных удобно оценивать по нескольким измерениям:

  • Полнота: доля пропусков, особенно в ключевых признаках и таргете.
  • Корректность: невозможные значения (возраст < 0, отрицательная цена).
  • Согласованность: одинаковые сущности не противоречат сами себе в разных таблицах.
  • Актуальность: данные не устарели относительно задачи.
  • Уникальность: нет ли повторов, особенно между train и test.
  • Практика: начните с простого отчёта по данным (колонки, типы, статистики, пропуски, топ-значения категорий). Даже без “умной модели” это быстро выявляет проблемы.

    Очистка данных

    Очистка — это не “сделать красиво”, а сделать так, чтобы модель училась на корректных закономерностях.

    Работа с пропусками

    Типовые варианты (выбор зависит от смысла признака):

  • удалить строки, если пропусков мало и это не ломает репрезентативность;
  • заполнить константой (например, 0 или “unknown”), если это имеет смысл;
  • заполнить статистикой (медианой/средним) для чисел;
  • добавить отдельный бинарный признак “значение было пропущено”.
  • Важно: вычислять статистики для заполнения нужно только по train, а затем применять к val/test, иначе появится утечка.

    Поиск выбросов и аномалий

    Выброс — это значение, которое сильно отличается от большинства. Он может быть:

  • ошибкой данных (например, лишний ноль в сумме);
  • редким, но реальным случаем (например, крупный корпоративный заказ).
  • Не удаляйте выбросы автоматически. Сначала выясните происхождение и цену ошибки: иногда “редкие случаи” — как раз самое ценное.

    Дедупликация

    Нужно проверять:

  • полные дубликаты строк;
  • дубликаты по ключу (один объект повторяется);
  • “почти дубликаты” (например, одинаковые тексты с небольшими отличиями).
  • Отдельная задача — исключить попадание одного и того же объекта одновременно в train и test.

    Разметка данных

    Разметка — это процесс получения таргета для примеров . Без качественной разметки модель будет оптимизировать “не то”, даже если архитектура отличная.

    Что такое хорошая разметка

    Хорошая разметка — это когда:

  • классы/значения таргета определены однозначно;
  • разметчики понимают правила одинаково;
  • есть способ измерять согласие и качество;
  • процесс воспроизводим (есть версия инструкций и версия разметки).
  • Инструкции для разметчиков

    Инструкция должна включать:

  • Определение каждого класса простыми словами.
  • Пограничные случаи: что делать, если пример “между классами”.
  • Примеры размеченных объектов.
  • Правила обработки “неразмечаемых” случаев (шум, неполные данные).
  • Контроль качества разметки

    На практике используют:

  • двойную разметку части данных (два разметчика на один объект);
  • разбор расхождений и уточнение инструкции;
  • “золотой набор” (golden set): небольшая порция примеров с эталонной разметкой для регулярной проверки.
  • Если разметка дорогая, полезны подходы активного обучения: модель предлагает самые “неуверенные” примеры для разметки — так вы быстрее улучшаете качество.

    Для организации разметки можно использовать инструменты вроде Label Studio, но даже в простом проекте важнее инструмента — качество инструкции и контроль.

    !Итеративная схема разметки: как прийти к стабильному качеству

    Разбиение на train/validation/test и защита от утечек

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

    Как обычно делят

  • Train: обучение параметров модели.
  • Validation: выбор гиперпараметров и решений по подготовке данных.
  • Test: финальная оценка один раз (или очень редко).
  • Выбор стратегии разбиения

  • Случайное разбиение подходит, когда данные независимы и одинаково распределены.
  • Стратифицированное разбиение полезно в классификации при дисбалансе классов (сохраняет долю классов в каждом сплите).
  • Временное разбиение обязательно, если задача связана со временем (прогноз спроса, отток): обучаемся на прошлом, тестируем на будущем.
  • Групповое разбиение нужно, если у одного объекта есть “семейство” связанных примеров (например, много записей одного пользователя): все записи пользователя должны попасть в один сплит.
  • Что считается утечкой данных

    Типичные источники утечки:

  • признаки включают информацию, появляющуюся только после момента предсказания;
  • нормализация/заполнение пропусков/отбор признаков делались по всему датасету, включая test;
  • дубликаты объектов распределились между train и test;
  • “похожие” объекты (один пользователь, один документ) оказались в разных сплитах.
  • Практическое правило: любая операция, которая “учится” на данных (статистики, отбор, кодировщики), должна быть обучена на train и применена к val/test.

    Подготовка данных (preprocessing)

    Подготовка — это преобразование “сырых” данных в численный вид, удобный для модели.

    Числовые признаки

    Часто используют масштабирование, чтобы значения были сопоставимы по порядку величины.

    Пример min-max нормализации:

    Где:

  • — исходное значение признака;
  • — минимальное значение признака в обучающей выборке;
  • — максимальное значение признака в обучающей выборке;
  • — нормализованное значение, обычно в диапазоне от 0 до 1.
  • Важно: и вычисляются по train, затем применяются к val/test.

    Категориальные признаки

    Популярные подходы:

  • one-hot кодирование для небольших словарей категорий;
  • обучаемые эмбеддинги (особенно если категорий много);
  • выделение “редких категорий” в общий класс “other”.
  • Текст

    Текст нельзя подавать в нейросеть “как есть”: его переводят в числа.

    Частые варианты:

  • токенизация на слова/подслова;
  • словарь токенов и преобразование в последовательность идентификаторов;
  • паддинг (выравнивание длины) и маски для реальной длины.
  • На практике для современных моделей обычно используются подсловные токенизаторы (например, BPE), но в этом курсе важна идея: любой текст становится последовательностью чисел по чётким правилам.

    Изображения и аудио

    Для изображений типичны:

  • приведение к одинаковому размеру;
  • нормализация пикселей;
  • аугментации (случайные повороты, кропы) для устойчивости.
  • Для аудио часто строят спектрограммы или мел-спектрограммы, чтобы получить “картинку частот во времени”.

    Пайплайны и воспроизводимость

    Чтобы результат был повторяемым:

  • фиксируйте версию данных (дата выгрузки, фильтры, SQL-запросы);
  • фиксируйте версию разметки и инструкции;
  • фиксируйте код препроцессинга и параметры (например, статистики нормализации).
  • Для версионирования данных в командах часто используют DVC, а для экспериментов — трекеры (например, MLflow), но даже без инструментов помогает простое правило: каждый датасет должен иметь версию и способ воспроизведения.

    Минимальный практический сценарий (что сделать перед первой моделью)

  • Описать объект прогнозирования, момент времени и таргет.
  • Собрать датасет и построить короткий отчёт качества (пропуски, типы, дубли).
  • Определить правила очистки и применить их.
  • Если нужна разметка, написать инструкцию и провести пилот.
  • Разбить данные на train/val/test правильной стратегией (время/группы/стратификация).
  • Сделать простой, но воспроизводимый препроцессинг, обучаемый только на train.
  • Эта “гигиена данных” обычно даёт больший прирост качества, чем замена одной нейросетевой архитектуры на другую.

    3. Архитектуры: MLP, CNN, RNN и трансформеры

    Архитектуры: MLP, CNN, RNN и трансформеры

    Вы уже знаете, что успех проекта начинается с постановки задачи (входы, выход, метрика) и часто упирается в качество данных (сбор, очистка, разметка, честное разбиение). Следующий ключевой выбор — архитектура модели: как именно нейросеть будет “видеть” ваши данные.

    Архитектура — это не только “сколько слоёв”. Это набор предположений о структуре данных (их называют индуктивные смещения):

  • MLP предполагает, что вход — просто вектор чисел без явной геометрии.
  • CNN предполагает, что важны локальные шаблоны и их повторяемость в разных местах.
  • RNN предполагает, что данные приходят как последовательность и важен порядок.
  • Трансформер предполагает, что элементы последовательности должны “внимательно” сравниваться друг с другом (через механизм внимания), причём это можно делать параллельно.
  • !Схема, показывающая различия в обработке данных MLP, CNN, RNN и трансформером

    Как архитектура связана с данными и постановкой задачи

    Из прошлых тем возьмём три практических правила:

  • Архитектура выбирается под тип данных и формат входа: таблица, изображение, текст, временной ряд.
  • До сложной модели нужна честная оценка: train/val/test без утечек, baseline, понятная метрика.
  • Чем “умнее” архитектура, тем сильнее она проявляет проблемы данных: шумная разметка, дубли, сдвиг распределения, неверное разбиение.
  • Дальше — разбор четырёх семейств архитектур: что они “умеют”, где применяются и какие типовые ошибки бывают.

    MLP

    MLP (multilayer perceptron, многослойный перцептрон) — это последовательность полносвязных слоёв: каждый выходной нейрон получает вклад от всех входных признаков.

    Когда MLP подходит

  • Табличные данные после корректной подготовки (числа, категории, иногда простые агрегаты текста).
  • Регрессия и классификация, где объект — “одна строка” признаков.
  • Быстрый baseline, чтобы проверить постановку задачи и качество данных.
  • Что происходит внутри слоя

    Один полносвязный слой вычисляет:

    Пояснение каждого элемента:

  • — входной вектор признаков (например, 100 чисел).
  • — матрица весов, которая задаёт, как каждый вход влияет на каждый выход.
  • — вектор сдвигов (bias), позволяющий “подвинуть” результат.
  • — функция активации (например, ReLU), добавляющая нелинейность.
  • — выходной вектор слоя.
  • Без нелинейности любая композиция таких слоёв свелась бы к одному линейному преобразованию, и модель была бы слишком слабой.

    Сильные и слабые стороны

    Плюсы:

  • Простота реализации и отладки.
  • Быстро учится как baseline.
  • Хорошо работает, если признаки уже “правильные” и информативные.
  • Минусы:

  • Не использует структуру изображений/текста/времени.
  • Может требовать много данных и аккуратной регуляризации.
  • На сырых данных (пиксели, токены) часто проигрывает специализированным архитектурам.
  • CNN

    CNN (convolutional neural network, свёрточная сеть) использует операцию свёртки: небольшой фильтр “скользит” по входу и ищет локальные паттерны. Классический домен CNN — изображения, но свёртки бывают и 1D (временные ряды, аудио), и 3D (видео).

    Интуиция: локальность и повторяемость

    В изображениях полезные признаки локальны (края, текстуры), а один и тот же признак может встретиться в разных местах. CNN встроенно учитывает это:

  • локальные связи: фильтр смотрит на небольшой участок входа;
  • разделение весов: один и тот же фильтр применяется во всех позициях.
  • Это даёт важное свойство: если объект сдвинулся в кадре, сеть всё равно может распознать его (приближённо это называют эквивариантностью к сдвигу).

    Что такое свёртка на пальцах

    Для 2D-входа (картинки) одно значение выходной карты признаков можно записать так:

    Пояснение каждого элемента:

  • — вход (например, матрица яркостей или тензор с каналами).
  • — фильтр (ядро свёртки) размера .
  • — выход в позиции .
  • — индексы внутри фильтра.
  • Сумма — “сопоставление” локального фрагмента входа с фильтром: если шаблон похож, значение будет большим.
  • На практике почти всегда добавляют смещение (bias), нелинейность (ReLU) и часто нормализации.

    !Визуальная интуиция операции свёртки

    Типовые элементы CNN

  • Свёрточные слои: извлекают признаки.
  • Пулинг или strided-свёртки: уменьшают размерность (делают представление более устойчивым).
  • Глубина: ранние слои учат простые шаблоны, поздние — более сложные.
  • Где CNN особенно хороши

  • Классификация изображений, детекция объектов, сегментация.
  • Аудио и спектрограммы (как “картинки частот во времени”).
  • Некоторые виды временных рядов, где важны локальные паттерны.
  • RNN

    RNN (recurrent neural network, рекуррентная сеть) создана для последовательностей: текст, временные ряды, события, сигнал. В RNN есть скрытое состояние, которое переносит информацию из прошлого в будущее.

    Идея скрытого состояния

    Самая базовая форма шага RNN:

    Пояснение каждого элемента:

  • — вход на шаге (например, эмбеддинг токена или измерения датчика).
  • — скрытое состояние с предыдущего шага.
  • — веса, применяемые к текущему входу.
  • — веса, применяемые к прошлому состоянию.
  • — смещения.
  • — нелинейность (например, tanh).
  • — новое состояние, в котором смешана информация из прошлого и текущего.
  • Почему появились LSTM и GRU

    Простые RNN трудно учить на длинных зависимостях: градиенты могут затухать или взрываться при распространении ошибки назад по времени. Архитектуры LSTM и GRU добавляют ворота (gates), чтобы лучше контролировать, что запоминать и что забывать.

    Когда RNN уместны

  • Небольшие и средние последовательности, когда важен строгий порядок.
  • Онлайн-обработка: данные приходят по одному шагу, и модель обновляет состояние.
  • Ограничения RNN

  • Последовательные вычисления: шаг зависит от шага , поэтому хуже параллелится.
  • На больших текстовых задачах часто уступает трансформерам.
  • Трансформеры

    Трансформер — архитектура, где ключевую роль играет self-attention (самовнимание): каждый элемент последовательности может “посмотреть” на другие элементы и собрать из них полезную информацию.

    Ключевое отличие от RNN: внимание по всем токенам можно считать параллельно, поэтому трансформеры эффективно обучаются на больших данных и стали стандартом для NLP и многих задач с последовательностями.

    Что решает self-attention

    В тексте смысл слова часто зависит от удалённых слов. Self-attention позволяет напрямую учитывать дальние связи, а не пытаться “протащить” их через длинную цепочку состояний.

    Упрощённая запись attention:

    Пояснение каждого элемента:

  • (queries) — “запросы”: что текущему токену нужно найти в других.
  • (keys) — “ключи”: по чему сравниваем токены.
  • (values) — “значения”: какую информацию собираем.
  • — матрица попарных сходств между токенами.
  • — размерность представления; деление на стабилизирует масштабы чисел.
  • — превращает сходства в веса, сумма весов по строке равна 1.
  • Умножение на — даёт взвешенную сумму “значений”, то есть новый контекст для каждого токена.
  • !Как self-attention связывает токены через матрицу весов

    Позиционная информация

    В отличие от RNN, трансформер не “видит” порядок автоматически. Поэтому добавляют позиционные признаки (позиционные кодировки), чтобы модель различала “первое слово” и “последнее слово”.

    Сильные и слабые стороны трансформеров

    Плюсы:

  • Хорошо ловят дальние зависимости.
  • Параллелятся при обучении.
  • Универсальны: текст, изображения (Vision Transformer), аудио, мультимодальные задачи.
  • Минусы:

  • Self-attention по длине последовательности часто дорог: при длине число попарных сравнений порядка .
  • Требуют аккуратной подготовки данных и режима обучения, особенно при больших моделях.
  • Как выбрать архитектуру: практическая карта решений

    Ниже — упрощённая шпаргалка. В реальном проекте выбор подтверждается экспериментами на validation и сравнением с baseline.

    | Тип данных | Типичная форма входа | Частый выбор | Комментарий | |---|---|---|---| | Таблица (числа/категории) | вектор признаков | MLP (или градиентный бустинг как baseline) | решающее значение имеет правильная подготовка и отсутствие утечек | | Изображение | тензор пикселей | CNN или ViT | CNN часто эффективнее по данным, ViT часто выигрывает на больших данных | | Текст | последовательность токенов | трансформер | RNN возможны, но обычно уступают по качеству и скорости обучения | | Временной ряд | последовательность значений | RNN/GRU/LSTM, 1D-CNN, трансформер | выбор зависит от длины, частоты, необходимости онлайн-режима |

    Типовые ошибки при выборе архитектуры

  • Выбирать “самую мощную” архитектуру до проверки данных и разбиения.
  • Пытаться обучать CNN на таблице без смысла в “локальности”, или MLP на пикселях без извлечения структуры.
  • Игнорировать ограничения по ресурсам и задержкам: трансформер может быть слишком дорог для длинных последовательностей.
  • Путать улучшение метрики с утечкой данных: если качество слишком хорошее, вернитесь к проверкам из темы про данные.
  • Минимальный практический план после этой статьи

  • Зафиксируйте тип входа: вектор, изображение, последовательность.
  • Соберите baseline:
  • для таблицы: простой MLP;
  • для изображения: небольшая CNN;
  • для текста: готовая маленькая transformer-модель или простой baseline на эмбеддингах.
  • Проверьте, что препроцессинг “учится” только на train, а val/test остаются честными.
  • Сравните архитектуры на validation и объясните результат через данные: дисбаланс, шум разметки, длина последовательностей, качество признаков.
  • Дополнительные материалы

  • Deep Learning Book — обзор основных идей и архитектур.
  • CS231n: Convolutional Neural Networks for Visual Recognition — понятное введение в CNN.
  • Understanding LSTM Networks — интуитивное объяснение LSTM.
  • Attention Is All You Need — оригинальная статья про трансформер.
  • Hugging Face Course — практическое обучение работе с трансформерами.
  • 4. Функции потерь, оптимизация и backpropagation

    Функции потерь, оптимизация и backpropagation

    В прошлых темах мы сделали два ключевых шага:

  • научились ставить задачу (что предсказываем, как измеряем качество, где риск утечки данных);
  • разобрали данные и архитектуры (MLP, CNN, RNN, трансформеры).
  • Теперь соединим это в единый механизм обучения: функция потерь говорит, что считать ошибкой, оптимизатор говорит, как уменьшать эту ошибку, а backpropagation (обратное распространение ошибки) эффективно считает, как каждый параметр модели влияет на ошибку.

    !Диаграмма полного цикла: прямой проход, вычисление потерь, backprop, шаг оптимизатора

    Функция потерь

    Функция потерь (loss) — это число, показывающее, насколько предсказание модели плохо относительно правильного ответа. Мы обучаем модель так, чтобы в среднем потери становились меньше.

    Важно связывать loss с постановкой задачи из первой статьи:

  • если задача — классификация, loss должен сравнивать вероятности классов и правильный класс;
  • если задача — регрессия, loss измеряет расстояние между числами;
  • если важны разные цены ошибок, это отражают весами классов, порогами или выбором метрики и loss.
  • Популярные функции потерь и когда они нужны

    | Тип задачи | Что выдаёт модель | Частая функция потерь | Интуиция | |---|---|---|---| | Регрессия | число | MSE | большие ошибки наказываются сильнее | | Регрессия | число | MAE | штраф пропорционален модулю ошибки | | Бинарная классификация | вероятность | BCE | поощряет высокую вероятность правильного класса | | Многоклассовая классификация | вероятности по классам | Cross-entropy | наказывает, если правильному классу дали низкую вероятность |

    #### MSE для регрессии

    Что означает каждый элемент:

  • — число примеров, по которым считаем среднюю ошибку.
  • — индекс примера.
  • — истинный ответ для примера .
  • — предсказание модели для примера .
  • — ошибка предсказания.
  • — квадрат ошибки: большие промахи становятся гораздо дороже.
  • — усреднение по примерам.
  • Практическая заметка: если в данных бывают редкие, но огромные выбросы, MSE может чрезмерно подстраиваться под них. Тогда иногда лучше MAE или более устойчивые варианты (например, Huber loss).

    #### Cross-entropy для классификации

    Для многоклассовой классификации обычно используют softmax + cross-entropy.

    Softmax превращает набор чисел (их часто называют логиты) в вероятности:

    Пояснение:

  • — число классов.
  • — логит для класса (сырой выход модели до вероятностей).
  • — экспонента, делает значения положительными.
  • — нормировка, чтобы суммы вероятностей были равны 1.
  • — итоговая вероятность класса .
  • Cross-entropy в простейшем виде можно понимать так: если правильный класс должен иметь вероятность близкую к 1, loss становится большим, когда модель даёт ему маленькую вероятность.

    Практическая заметка: во многих фреймворках есть функция cross_entropy, которая принимает логиты, а softmax внутри делает сама. Это часто численно стабильнее.

    Loss и метрика — не одно и то же

  • Loss оптимизируется напрямую градиентным спуском.
  • Метрика (accuracy, F1, ROC-AUC и т.д.) нужна, чтобы оценивать качество так, как важно вам.
  • Например, в дисбалансной классификации можно обучаться с cross-entropy, но следить за PR-AUC или F1 на validation.

    Оптимизация: как модель уменьшает loss

    У нейросети есть параметры (веса и смещения). Мы хотим подобрать такие , чтобы loss был минимальным.

    Градиентный спуск

    Базовая идея: если мы знаем, в какую сторону нужно поменять параметры, чтобы loss уменьшился, — делаем небольшой шаг в эту сторону.

    Типичная формула обновления:

    Пояснение:

  • — все обучаемые параметры модели.
  • — функция потерь.
  • — градиент: вектор, показывающий, как loss меняется при малых изменениях каждого параметра.
  • скорость обучения (learning rate): размер шага.
  • знак минус означает, что мы идём в сторону уменьшения loss.
  • Мини-батчи, эпохи и почему не считают градиент на всём датасете

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

  • Батч (batch) — сколько примеров мы берём для одного шага оптимизации.
  • Мини-батч SGD — градиентный спуск, где каждый шаг использует случайный мини-батч.
  • Эпоха — один полный проход по обучающей выборке.
  • Это делает обучение быстрее и добавляет полезный “шум”, который иногда помогает выходить из плохих локальных областей.

    Популярные оптимизаторы

  • SGD: простой и часто хорошо обобщает, но требует подбора learning rate.
  • SGD с momentum: добавляет “инерцию”, чтобы устойчивее двигаться по одному направлению.
  • Adam: адаптирует шаги под каждый параметр, обычно быстро сходится и удобен как стартовый выбор.
  • Оригинальная статья про Adam: Adam: A Method for Stochastic Optimization.

    Что обычно настраивают в обучении

  • learning rate ;
  • размер батча;
  • число эпох;
  • scheduler для learning rate (как он меняется по ходу обучения);
  • регуляризацию (например, weight decay).
  • Практический принцип: если loss на train не падает, чаще всего проблема в learning rate, нормализации данных, ошибке в таргете/разметке или в баге в пайплайне.

    Backpropagation: откуда берутся градиенты

    Чтобы сделать шаг оптимизации, нужен градиент . Считать его “в лоб” для каждого параметра было бы слишком дорого.

    Backpropagation — это эффективный способ вычислять градиенты в моделях, которые представимы как композиция операций.

    > “The back-propagation algorithm is a practical way to calculate the gradient of the error function with respect to the weights…” — Rumelhart, Hinton, Williams, Learning representations by back-propagating errors (1986)

    Ключевая идея: правило цепочки

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

    Простой пример:

  • модель выдаёт
  • loss считается как
  • а зависит от параметра
  • Тогда зависимость loss от параметра можно записать так:

    Пояснение:

  • — насколько изменится loss, если немного изменить параметр .
  • — насколько loss чувствителен к изменению предсказания.
  • — насколько предсказание чувствительно к изменению параметра.
  • знак — произведение: “влияние параметра на loss” раскладывается на влияние параметра на предсказание и влияние предсказания на loss.
  • Backprop делает это не для одной цепочки, а для целого вычислительного графа, проходя по нему с конца к началу.

    Прямой и обратный проход

    Обучение нейросети на одном батче почти всегда устроено так:

  • Прямой проход: считаем предсказания по входам .
  • Считаем loss .
  • Обратный проход: считаем градиенты loss по всем параметрам.
  • Оптимизатор обновляет параметры.
  • Автоматическое дифференцирование в практике

    В современных библиотеках вы обычно не реализуете backprop вручную: используется автодифференцирование.

  • PyTorch: Automatic differentiation package — torch.autograd
  • TensorFlow: Automatic differentiation and GradientTape
  • Полезный навык: понимать, что autograd строит вычислительный граф и умеет вычислять градиенты, но он не спасёт от неправильного loss, утечки данных или неверных таргетов.

    Типичные проблемы оптимизации и как их распознать

    Learning rate слишком большой или слишком маленький

    Признаки:

  • слишком большой: loss скачет, обучение нестабильно, иногда появляются NaN.
  • слишком маленький: loss падает очень медленно или почти стоит.
  • Практика: попробуйте изменить learning rate в 3–10 раз и посмотрите на первые сотни шагов.

    Переобучение

    Переобучение проявляется как:

  • train loss падает,
  • а validation loss перестаёт улучшаться или ухудшается.
  • Это связано с темами про данные: иногда “лечится” не архитектурой, а улучшением разбиения, разметки и устранением утечек.

    Типовые инструменты (идею важно знать уже сейчас):

  • early stopping по validation;
  • регуляризация (weight decay);
  • dropout;
  • аугментации (для изображений, текста, аудио).
  • Взрывающиеся и затухающие градиенты

  • Затухающие градиенты: ранние слои почти не обучаются.
  • Взрывающиеся градиенты: градиенты становятся огромными, обучение “ломается”.
  • Это особенно актуально для RNN и очень глубоких сетей (связь с темой архитектур).

    Практические меры:

  • нормализации (например, batch norm / layer norm — подробнее обычно обсуждают в темах про стабильное обучение);
  • правильная инициализация весов;
  • gradient clipping (особенно в RNN);
  • архитектурные решения: residual-связи, LSTM/GRU вместо простой RNN.
  • Как связать всё вместе: минимальный рабочий рецепт

    Ниже — компактный чек-лист, объединяющий постановку, данные, архитектуру и обучение.

  • Выберите корректный формат таргета и loss под задачу.
  • Проверьте разбиение train/val/test и отсутствие утечек.
  • Начните с простого baseline и понятного оптимизатора (часто Adam).
  • Логируйте:
  • - train loss, - validation loss, - ключевую метрику (accuracy/F1/MAE и т.д.).
  • Если метрика не растёт, задайте себе вопросы:
  • - правильно ли определён таргет; - нет ли сдвига распределений между train и val; - адекватен ли learning rate; - соответствует ли архитектура типу данных.

    Что дальше

    Дальше в курсе обычно переходят от “механики обучения” к устойчивой практике:

  • регуляризация и борьба с переобучением;
  • стратегии выбора гиперпараметров;
  • отладка обучения и диагностика ошибок;
  • воспроизводимость экспериментов.
  • Главная мысль этой темы: нейросеть обучается не “магией”, а оптимизацией численной цели. Если вы правильно выбрали loss, честно подготовили данные и понимаете, как работает backprop и шаг оптимизатора, вы можете системно улучшать качество, а не надеяться на случай.

    5. Регуляризация и борьба с переобучением

    Регуляризация и борьба с переобучением

    В предыдущих темах мы разобрали постановку задачи, подготовку данных, выбор архитектуры и механику обучения через функцию потерь, оптимизацию и backpropagation. Теперь разберём одну из главных причин, почему модель показывает отличные результаты на train и слабые на новых данных: переобучение. И главное — как с ним системно бороться с помощью регуляризации.

    > “A central challenge in machine learning is to make an algorithm that will perform well on new, previously unseen inputs.” — Goodfellow, Bengio, Courville, Deep Learning

    Что такое переобучение и почему оно возникает

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

    Практически это выглядит так:

  • train loss падает и метрика на train растёт;
  • validation loss перестаёт улучшаться или растёт;
  • метрика на validation падает или стоит на месте.
  • Противоположность — недообучение: модель слишком простая, плохо выучила даже train (и train, и validation плохие).

    !Типичные кривые обучения для переобучения и недообучения

    Диагностика: сначала исключаем не регуляризацию, а ошибки постановки

    Регуляризация не лечит фундаментальные проблемы данных и оценки. Перед тем как добавлять dropout и weight decay, проверьте базовые причины “ложного качества”.

  • Утечка данных
  • 1. Признаки содержат информацию, которая в реальности недоступна на момент предсказания. 2. Нормализация, заполнение пропусков, отбор признаков делались по всему датасету, включая validation или test. 3. Дубликаты или “почти дубликаты” попали в разные сплиты.
  • Неправильное разбиение
  • 1. Для временных задач сделали случайный split вместо временного. 2. Для пользовательских данных не применили групповое разбиение и один пользователь оказался и в train, и в validation.
  • Шумная разметка
  • 1. Таргет определён неоднозначно. 2. Разметчики по-разному трактуют классы.
  • Сдвиг распределения
  • 1. Validation и train представляют разные подмножества реального мира.

    Если в этих пунктах есть проблема, модель может выглядеть “переобученной”, хотя на самом деле вы сравниваете несопоставимые данные.

    Что такое регуляризация

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

    Удобная мысль: регуляризация почти всегда делает одну из двух вещей:

  • уменьшает эффективную сложность модели (не даёт ей стать “слишком гибкой”);
  • увеличивает разнообразие обучающих примеров (делает задачу “богаче” за счёт аугментаций или шума).
  • Основные методы регуляризации

    Early stopping

    Early stopping — остановка обучения, когда качество на validation перестало улучшаться.

    Это один из самых сильных и простых методов, потому что часто переобучение начинается после некоторого числа эпох: модель продолжает улучшать train, но начинает “дотачиваться” под его особенности.

    Практические правила:

  • выбирайте модель по лучшему значению метрики на validation;
  • используйте patience: например, ждать 5–10 эпох без улучшения, чтобы не остановиться из-за случайного шума;
  • не используйте test для early stopping: test должен остаться для финальной честной оценки.
  • Weight decay и L2-регуляризация

    Один из классических способов регуляризации — штрафовать модель за слишком большие веса. Часто это называют L2-регуляризацией или weight decay.

    Общая идея: оптимизируем не только ошибку на данных, но и “сложность” параметров.

    Расшифровка элементов формулы:

  • — итоговая функция, которую мы минимизируем.
  • — обычный loss по данным (например, cross-entropy или MSE).
  • — все обучаемые параметры модели (веса и смещения, в зависимости от реализации).
  • — сумма квадратов параметров. Она растёт, когда веса становятся большими по модулю.
  • — коэффициент регуляризации: чем он больше, тем сильнее штраф за большие веса.
  • Интуиция:

  • большие веса часто означают, что модель делает очень “резкие” решения и легко подстраивается под шум;
  • штраф за большие веса делает решение более “плавным” и переносимым.
  • Важно про оптимизаторы:

  • в современных настройках часто используют Adam с AdamW, где weight decay отделён от градиента loss, что обычно ведёт себя стабильнее: Loshchilov, Hutter, Decoupled Weight Decay Regularization.
  • Dropout

    Dropout — во время обучения случайно “выключает” часть нейронов (или связей), из-за чего модель не может слишком сильно полагаться на отдельные признаки и вынуждена распределять полезную информацию.

  • на обучении dropout включён;
  • на инференсе dropout выключен.
  • Классический источник: Srivastava et al., Dropout: A Simple Way to Prevent Neural Networks from Overfitting.

    Практические замечания:

  • dropout особенно распространён в MLP и трансформерах;
  • слишком большой dropout может привести к недообучению.
  • Аугментации данных

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

    Примеры:

  • изображения: случайные кропы, повороты, изменение яркости, горизонтальный флип;
  • аудио: добавление шума, сдвиг по времени;
  • текст: аккуратные перефразирования или dropout токенов возможны, но требуют осторожности, чтобы не “сломать” смысл.
  • Ключевое правило:

  • аугментации применяются только к train;
  • validation и test должны оставаться максимально приближенными к реальности, иначе вы перестанете понимать, как модель работает на настоящих данных.
  • Снижение сложности модели

    Если данных мало или задача простая, переобучение лечится не только регуляризацией, но и прямым уменьшением мощности модели.

    Типовые приёмы:

  • уменьшить число слоёв или ширину слоёв;
  • уменьшить размер эмбеддингов;
  • сократить длину последовательности или разрешение входа, если это допустимо;
  • заморозить часть предобученной модели и обучать только “голову” (часто в transfer learning).
  • Label smoothing

    Label smoothing — при классификации мы намеренно делаем таргет немного “мягче”, чтобы модель не становилась чрезмерно уверенной.

    Интуиция:

  • если в разметке есть шум или классы пересекаются, жёсткое требование “правильный класс = 1, остальные = 0” может провоцировать переобучение;
  • мягкие таргеты помогают обобщению и калибровке вероятностей.
  • Источник, где метод получил широкую популярность: Szegedy et al., Rethinking the Inception Architecture for Computer Vision.

    Нормализации как фактор стабильности

    BatchNorm и LayerNorm чаще рассматривают как способы стабилизировать и ускорить обучение, но на практике они часто дают и регуляризационный эффект.

    Практическая привязка к архитектурам из прошлой темы:

  • CNN часто используют batch norm;
  • трансформеры почти всегда используют layer norm.
  • Важно: нормализация не заменяет честное разбиение и не исправляет утечки.

    Шпаргалка: какой метод когда применять

    | Метод | Когда помогает сильнее всего | Риск и побочный эффект | |---|---|---| | Early stopping | почти всегда как базовая защита | можно остановиться слишком рано при шумной validation | | Weight decay | почти всегда для нейросетей, особенно при малых данных | слишком большой ведёт к недообучению | | Dropout | MLP, трансформеры, небольшие датасеты | ухудшает обучение, если и так мало сигнала | | Аугментации | изображения, аудио, иногда текст | можно исказить таргет или сделать train не похожим на прод | | Уменьшение модели | мало данных, простая задача, сильное переобучение | можно потерять потолок качества | | Label smoothing | шумная разметка, перекрывающиеся классы | может снизить максимальную accuracy на чистых данных |

    Практический рабочий процесс борьбы с переобучением

    Ниже — последовательность, которая обычно экономит время.

  • Постройте честный baseline
  • 1. Зафиксируйте train, validation, test. 2. Логируйте train loss, validation loss и целевую метрику.
  • Поймайте момент переобучения
  • 1. Посмотрите кривые обучения. 2. Определите, на какой эпохе validation перестаёт улучшаться.
  • Добавьте early stopping
  • 1. Часто это даёт заметный прирост “качества на новых данных” без изменения архитектуры.
  • Добавьте weight decay
  • 1. Начните с небольшого значения и проверяйте validation.
  • Добавьте аугментации или dropout по необходимости
  • 1. Для изображений аугментации обычно более естественны, чем сильный dropout. 2. Для MLP на табличных данных часто важнее weight decay и контроль признаков.
  • Если не помогло — вернитесь к данным
  • 1. Проверьте разметку. 2. Проверьте сдвиг распределения. 3. Подумайте о сборе дополнительных данных или расширении разметки.

    !Воронка решений: как пошагово бороться с переобучением

    Типичные ошибки при регуляризации

  • Подбирать гиперпараметры по test: test перестаёт быть честной оценкой.
  • Делать препроцессинг на всём датасете: это утечка, а не “хорошая регуляризация”.
  • Аугментировать validation: метрика становится несопоставимой с реальным сценарием.
  • Лечить переобучение только усложнением модели: часто это ухудшает ситуацию.
  • Игнорировать дисбаланс классов: модель может казаться переобученной, хотя она оптимизирует “не ту” цель относительно метрики.
  • Главная мысль

    Переобучение — это не “плохая модель”, а сигнал, что модель слишком свободно подстраивается под детали train. Регуляризация помогает ограничить эту свободу, но самый устойчивый результат получается, когда она опирается на честную постановку, корректные данные и правильную валидацию из предыдущих тем.

    6. Оценка качества, метрики и валидация

    Оценка качества, метрики и валидация

    В прошлых темах мы разобрали постановку задачи, работу с данными, выбор архитектуры, обучение через функцию потерь и способы борьбы с переобучением. Теперь соберём это в один практический блок: как правильно оценивать качество модели.

    Главная идея: модель хороша не тогда, когда у неё низкий loss на train, а тогда, когда она стабильно даёт нужное качество на новых данных в условиях, похожих на реальность. Для этого нужны метрики, правильная валидация и честные процедуры сравнения экспериментов.

    !Конвейер оценки качества и точки риска утечки данных

    Зачем нужны метрики, если уже есть loss

    Loss и метрика решают разные задачи:

  • Loss нужен оптимизатору, чтобы обновлять веса через градиенты.
  • Метрика нужна вам, чтобы понять, насколько модель полезна по смыслу задачи.
  • Примеры типичных расхождений:

  • В классификации вы обучаетесь на cross_entropy, но бизнесу важен F1 или precision при фиксированном recall.
  • В дисбалансных данных accuracy может быть высокой, но модель может игнорировать редкий класс.
  • В ранжировании лосс может быть суррогатным, а качество оценивают NDCG@K.
  • Практическое правило: loss выбирают так, чтобы он хорошо обучался, а метрику так, чтобы она отражала ценность результата.

    Базовая рамка оценки

    Чтобы оценка была честной и воспроизводимой, обычно фиксируют:

  • что именно измеряем: метрика и её версия (например, macro-F1 или weighted-F1);
  • на каких данных: какой сплит, какая стратегия разбиения;
  • как принимаем решение: порог, top-K, калибровка;
  • как сравниваем модели: один и тот же test, одинаковые условия препроцессинга.
  • Матрица ошибок и метрики классификации

    Для бинарной классификации удобно думать через матрицу ошибок.

    !Матрица ошибок (confusion matrix) как основа метрик классификации

    Обозначения:

  • TP (true positives): модель сказала положительный, и это правда.
  • FP (false positives): модель сказала положительный, но это ложная тревога.
  • FN (false negatives): модель сказала отрицательный, но пропустила положительный.
  • TN (true negatives): модель сказала отрицательный, и это правда.
  • Accuracy

    Accuracy показывает долю верных ответов:

    Что означает каждый элемент:

  • — сколько ответов верны.
  • — сколько всего примеров.
  • Когда полезна:

  • классы сбалансированы;
  • цена ошибок примерно одинаковая.
  • Когда опасна:

  • сильный дисбаланс. Например, если положительный класс 1%, то модель, которая всегда отвечает отрицательный, даст accuracy 99%, но будет бесполезной.
  • Precision и Recall

    Precision отвечает на вопрос: когда модель сказала “да”, как часто она права.

  • — верные срабатывания.
  • — все срабатывания модели.
  • Recall отвечает на вопрос: сколько реальных “да” модель нашла.

  • — найденные положительные.
  • — все реальные положительные.
  • Как выбирать, что важнее:

  • Спам-фильтр часто ценит высокий precision, чтобы не блокировать нормальные письма.
  • Медицинский скрининг часто ценит высокий recall, чтобы не пропустить болезнь.
  • F1

    F1 — компромисс между precision и recall, гармоническое среднее:

  • числитель растёт, когда растут оба показателя;
  • знаменатель не даёт одному из них “замаскировать” провал второго.
  • Метрики для многоклассовой классификации

    В многоклассовой задаче важно, как усреднять метрику по классам:

  • micro: считает метрику по сумме TP/FP/FN, сильнее отражает большие классы.
  • macro: усредняет метрику по классам поровну, лучше показывает качество на редких классах.
  • weighted: усредняет по классам с весами по частоте.
  • Если есть дисбаланс и вы не хотите потерять редкие классы, чаще смотрят macro-F1.

    Полезная справка по определениям и реализациям: Документация scikit-learn по метрикам классификации.

    ROC-AUC и PR-AUC

    Многие модели выдают скор или вероятность, а не готовое решение. Тогда качество зависит от порога.

    ROC-кривая и ROC-AUC

    ROC-кривая строится при переборе порога и показывает компромисс между:

  • TPR (true positive rate), это recall;
  • FPR (false positive rate), доля ложных тревог среди отрицательных.
  • ROC-AUC — площадь под ROC-кривой. Интуиция: насколько хорошо модель ранжирует положительные выше отрицательных.

    Когда ROC-AUC особенно удобна:

  • для сравнения ранжирования моделей;
  • при относительно умеренном дисбалансе.
  • PR-кривая и PR-AUC

    PR-кривая показывает зависимость precision от recall при переборе порога.

    PR-AUC часто информативнее при сильном дисбалансе, потому что фокусируется на поведении модели относительно положительного класса.

    Практическое правило:

  • если положительный класс редкий, обычно смотрят PR-AUC и метрики при фиксированном recall или precision.
  • Порог, стоимость ошибок и выбор рабочей точки

    Если модель выдаёт вероятность , нужно выбрать порог и принимать решение по правилу: положительный класс, если .

    Как выбирать порог:

  • по требованиям бизнеса: например, precision не ниже 0.9;
  • по ограничению ресурсов: например, на ручную проверку можно отправить не более 500 случаев в день;
  • по максимизации метрики на validation: например, лучший F1 на val.
  • Важно:

  • порог подбирают по validation, а итоговое качество фиксируют на test;
  • порог почти всегда “плывёт” при сдвиге данных, поэтому полезно мониторить метрики после внедрения.
  • Метрики регрессии

    В регрессии важен смысл ошибки: в каких единицах и насколько больно ошибаться на больших промахах.

    MAE

    MAE — средняя абсолютная ошибка:

    Пояснение:

  • — число примеров.
  • — истинное значение.
  • — предсказание.
  • — модуль ошибки для примера .
  • Плюс MAE: легко интерпретировать в единицах таргета.

    MSE и RMSE

    MSE сильнее штрафует большие ошибки:

    RMSE — корень из MSE, возвращает масштаб в единицы таргета:

    Когда RMSE полезен:

  • когда большие ошибки особенно нежелательны;
  • когда важно “видеть” ошибку в тех же единицах, что и таргет.
  • Валидация: как честно оценить обобщающую способность

    Валидация отвечает на вопрос: как модель будет работать на данных, которых она не видела.

    Базовая схема train/validation/test

  • Train: обучение весов.
  • Validation: выбор гиперпараметров, порога, решений по регуляризации, ранняя остановка.
  • Test: финальная оценка, к которой нельзя “подгоняться”.
  • Связь с предыдущими темами:

  • из темы про данные вы уже знаете про утечки и про то, что любые статистики препроцессинга считаются только на train;
  • из темы про регуляризацию вы уже знаете, что early stopping работает по validation.
  • Почему нельзя постоянно смотреть на test

    Если вы много раз подбираете решения по test, test перестаёт быть независимым. В итоге вы оптимизируете не качество в реальности, а качество “на этом конкретном test”.

    Практический подход:

  • используйте test один раз в конце или очень редко;
  • если нужно много итераций сравнения, выделите дополнительный сплит, иногда его называют holdout.
  • Стратегии разбиения данных

    Стратегия разбиения должна соответствовать тому, как модель будет использоваться.

    Случайное разбиение

    Подходит, когда:

  • примеры независимы;
  • нет ярко выраженной зависимости от времени;
  • нет групп, которые могут породить дубликаты между сплитами.
  • Стратифицированное разбиение

    Подходит для классификации при дисбалансе:

  • сохраняет долю классов в каждом сплите.
  • Временное разбиение

    Обязательно, если предсказания делаются в будущем по прошлым данным:

  • прогноз спроса;
  • отток;
  • предсказание событий по временным рядам.
  • Правило: учимся на прошлом, валидируемся и тестируемся на будущем.

    Групповое разбиение

    Нужно, когда есть “семейства” связанных примеров:

  • много строк на одного пользователя;
  • много изображений одного объекта;
  • много событий одной сессии.
  • Правило: одна группа должна попасть только в один сплит, иначе вы получите утечку через похожие объекты.

    Кросс-валидация

    Кросс-валидация полезна, когда данных мало и качество сильно зависит от того, как именно вы разделили train и validation.

    Идея:

  • данные делят на частей;
  • модель обучают раз, каждый раз выбирая новую часть как validation;
  • качество усредняют.
  • Что даёт:

  • более стабильную оценку;
  • понимание разброса качества.
  • Что стоит помнить:

  • кросс-валидация дороже по вычислениям;
  • для временных данных нужна специальная временная схема, а не обычный случайный KFold.
  • Справка по практическим схемам разбиения: Документация scikit-learn по кросс-валидации.

    Интерпретация результатов и сравнение моделей

    Сравнивайте с baseline

    Из первой темы: baseline нужен всегда.

    Примеры baseline:

  • классификация: всегда предсказывать самый частый класс;
  • регрессия: предсказывать среднее или медиану;
  • текст: простая модель на мешке слов.
  • Если нейросеть не обгоняет baseline, обычно проблема не в “недостаточно глубокой архитектуре”, а в:

  • таргете и постановке;
  • качестве данных и разбиении;
  • утечке или смещении распределений.
  • Смотрите не только на одно число

    Хорошая практика отчёта по эксперименту:

  • метрика на validation и test;
  • confusion matrix или ошибки по сегментам;
  • метрика по группам: новые пользователи, регионы, устройства;
  • устойчивость: качество при разных seed или на нескольких сплитах.
  • !Кривые обучения и место, где полезен early stopping

    Частые ошибки в оценке качества

  • Нечестное разбиение: время или группы перемешаны.
  • Утечка через препроцессинг: нормализация или кодирование категорий сделаны по всему датасету.
  • Подбор порога на test: “случайно” улучшает результат.
  • Один сплит как истина: качество может быть случайно завышено или занижено.
  • Неправильная метрика: оптимизируют accuracy, хотя важнее recall на редком классе.
  • Минимальный практический чек-лист

  • Зафиксируйте метрику, которая отражает смысл задачи.
  • Выберите стратегию разбиения, соответствующую реальному сценарию.
  • Подберите гиперпараметры и порог по validation.
  • Используйте раннюю остановку по validation, если есть переобучение.
  • Оцените один раз на test и сохраните результат как “контрольную точку”.
  • Эта тема завершает базовую “гигиену обучения”: постановка, данные, архитектура, обучение, регуляризация и, наконец, честная оценка качества. Именно она отличает эксперимент “у меня получилось” от решения, которому можно доверять.

    7. Практический пайплайн: обучение, тюнинг и деплой

    Практический пайплайн: обучение, тюнинг и деплой

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

    > “Machine learning is like a high interest credit card: it’s easy to charge up a lot of technical debt.” — Sculley et al., Hidden Technical Debt in Machine Learning Systems

    !Общая карта жизненного цикла модели от данных до продакшена

    Карта процесса

    Практический пайплайн удобно мыслить как последовательность артефактов и решений:

  • Данные: версия датасета, правила препроцессинга, схема разбиения.
  • Эксперимент обучения: код, конфиг, метрики, чекпойнты.
  • Выбор модели: критерий по validation, один финальный замер на test.
  • Артефакт для деплоя: сериализованная модель + версия препроцессинга + интерфейс входов/выходов.
  • Продакшен: способ инференса, мониторинг, план отката, триггеры переобучения.
  • Главный принцип, связывающий всё с прошлыми темами: тюнинг и деплой имеют смысл только при честном разбиении и корректных метриках.

    Минимальный воспроизводимый эксперимент

    Если вы не можете воспроизвести свой лучший результат, вы не можете ему доверять.

    Что обязательно фиксировать

  • Версию данных: дата выгрузки, фильтры, запросы, версия разметки.
  • Разбиение train/validation/test: список идентификаторов или seed и стратегия разбиения.
  • Конфиг обучения: архитектура, loss, оптимизатор, learning rate, batch size, регуляризация.
  • Окружение: версия Python, библиотек, CUDA, тип GPU.
  • Случайности: фиксированный seed (при этом часть операций на GPU всё равно может быть недетерминированной).
  • Практичные инструменты:

  • трекинг экспериментов: MLflow, Weights & Biases
  • версионирование данных: DVC
  • управление конфигами: Hydra
  • Как выглядит хороший “лог эксперимента”

  • метрики по эпохам: train loss, validation loss и целевая метрика (например, F1 или MAE)
  • параметры запуска (конфиг)
  • ссылка на данные и сплит
  • сохранённый лучший чекпойнт по validation
  • итоговый отчёт на test после выбора модели
  • Пайплайн данных: одинаковый смысл на обучении и инференсе

    Частая причина провалов в продакшене: модель обучалась на одних преобразованиях данных, а в сервисе получает другие.

    Типовые ловушки

  • Train-serving skew: на обучении вы нормализовали признаки по правилам, которые в проде не повторяются.
  • Утечки через препроцессинг: статистики нормализации, кодировщики категорий, отбор признаков считались на всём датасете, а не только на train.
  • Смена схемы данных: в проде поменялись значения категорий или смысл поля.
  • Практическое правило

  • всё, что “обучается на данных” (статистики, словари, кодировщики), fit только на train и сериализуется как часть артефакта модели
  • Обучение: как организовать цикл и контроль

    Обучение полезно рассматривать как набор компонентов, которые можно стандартно переиспользовать между проектами.

    Стандартные элементы обучающего цикла

  • dataloader и батчи
  • прямой проход модели
  • расчёт loss
  • обратный проход и шаг оптимизатора
  • расчёт метрик
  • логирование
  • сохранение чекпойнтов
  • Практики, которые экономят много времени

  • Чекпойнты: сохранять “лучший по validation” и “последний”.
  • Early stopping: останавливать обучение, когда validation не улучшается (это связывает тему регуляризации с темой валидации).
  • План обучения: заранее определить бюджет по времени или числу экспериментов.
  • Контроль NaN: проверять, не появились ли NaN в loss или градиентах.
  • Ускорение без изменения качества (когда уместно)

  • mixed precision (FP16/BF16), если поддерживается железом
  • gradient accumulation, если не хватает памяти на большой batch
  • профилирование dataloader, если GPU простаивает
  • Отладка обучения: быстрые проверки до тюнинга

    Перед тем как “крутить гиперпараметры”, проверьте, что система вообще учится так, как вы думаете.

    Санити-чеки

  • Попробовать “переобучить один батч”: если модель не может добиться почти нулевого loss на маленьком наборе, почти всегда есть баг в таргете, loss, данных или коде.
  • Проверить baseline: если сложная модель не обгоняет простой baseline, проблема часто в постановке/данных.
  • Проверить утечки: особенно при неожиданно высоких метриках.
  • Проверить даталоадер: соответствие входов и таргетов, корректность аугментаций.
  • Тюнинг: как улучшать качество честно

    Тюнинг — это поиск гиперпараметров (и иногда решений по данным), который улучшает качество на validation.

    Что обычно тюнят

  • learning rate и scheduler
  • batch size
  • weight decay
  • dropout
  • размер модели (ширина/глубина, размер эмбеддингов)
  • параметры аугментаций
  • Стратегии поиска

    | Стратегия | Когда подходит | Минусы | |---|---|---| | Ручной поиск | когда вы только начали и нужна диагностика | легко попасть в субъективность | | Grid search | маленькое число параметров и вариантов | быстро становится слишком дорогим | | Random search | хороший “дефолт” для многих задач | требует бюджета на много запусков | | Байесовская оптимизация | когда каждый запуск дорогой | сложнее в настройке |

    Практический инструмент для тюнинга: Optuna.

    Как не “сломать” честность оценки

  • гиперпараметры выбираются по validation
  • test используется один раз для финального отчёта
  • если вы много раз итеративно улучшаете модель, полезно иметь дополнительный holdout или делать кросс-валидацию (особенно при малых данных)
  • Что тюнить сначала

  • learning rate (и, при необходимости, scheduler)
  • регуляризация (weight decay, dropout, early stopping)
  • размер модели
  • данные и аугментации
  • Подготовка к деплою: артефакт модели и контракт

    Деплой — это не “загрузить веса”, а зафиксировать контракт: что на входе, что на выходе и какие преобразования обязательны.

    Что должно входить в артефакт

  • веса модели
  • версия и параметры препроцессинга
  • список фичей (и их порядок)
  • версия кода (commit)
  • порог решения (если есть) и логика постпроцессинга
  • Экспорт и форматы

  • для PyTorch: TorchScript или state_dict в зависимости от требований
  • для переносимости: ONNX
  • Экспорт важен, если вы хотите инференс вне Python, оптимизацию или единый формат между командами.

    Деплой: способы инференса

    !Два основных сценария: online API и batch-инференс, плюс наблюдаемость

    Основные сценарии

    | Сценарий | Когда выбирают | Ключевые риски | |---|---|---| | Batch-инференс | прогнозы можно считать заранее (ночью/раз в час) | устаревание прогнозов, зависимость от расписания | | Online API | нужен ответ “здесь и сейчас” | задержка, стабильность, масштабирование | | Edge/On-device | данные нельзя отправлять на сервер или нужен офлайн | ограничения по размеру и скорости |

    Практичный стек для старта

  • сервис API: FastAPI
  • упаковка и окружение: Docker
  • оркестрация (если нужно масштабирование): Kubernetes
  • Мониторинг после релиза: качество, дрейф и деградации

    Без мониторинга деплой превращается в “поставили и забыли”, что почти всегда заканчивается незаметной деградацией.

    Что мониторят

  • технические метрики: задержка, ошибки, нагрузка, использование памяти
  • метрики данных: доли пропусков, диапазоны чисел, частоты категорий, длины текстов
  • дрейф данных: признаки в проде стали другими относительно train
  • качество: метрика по размеченным позже данным или прокси-метрики
  • Полезные инструменты наблюдаемости:

  • метрики и алерты: Prometheus
  • дашборды: Grafana
  • Безопасные схемы выката

  • Shadow mode: модель считает прогнозы параллельно текущей, но не влияет на продукт
  • Canary release: новая модель получает маленькую долю трафика
  • A/B тест: сравнение по заранее определённой метрике
  • План отката: возможность быстро вернуть предыдущую версию
  • Мини-чек-лист перед релизом

  • Зафиксированы train/validation/test и доказано отсутствие утечек.
  • Лучшая модель выбрана по validation, тест использован только для финальной оценки.
  • Сохранён артефакт: веса + препроцессинг + список фичей + пороги.
  • Определён сценарий инференса (batch или online) и требования по задержке.
  • Подготовлены мониторинги технических метрик и метрик данных.
  • Есть стратегия выката (shadow/canary/A-B) и план отката.
  • Описаны условия переобучения: по времени или по сигналам дрейфа/деградации.
  • Итоговая связка с темами курса

  • постановка задачи и метрика определяют, что вы оптимизируете
  • данные и разбиение определяют, насколько честно вы это измеряете
  • архитектура, loss и оптимизация определяют, может ли модель выучить закономерность
  • регуляризация и валидация определяют, обобщает ли модель
  • практический пайплайн (эта тема) определяет, станет ли результат воспроизводимым и пригодным для продакшена