Практическая работа с нейросетями: от основ до проектов

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

1. Что такое нейросети и где они применяются

Что такое нейросети и где они применяются

Зачем разбираться в нейросетях

Нейросети стали практическим инструментом: они помогают писать и искать текст, распознавать объекты на фото, переводить речь в текст, находить аномалии в данных и создавать изображения. В этом курсе мы будем двигаться от понимания базовых принципов к реальной работе с готовыми моделями и сборке собственных мини-проектов.

Нейросеть простыми словами

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

Чтобы не путаться в терминах:

  • Искусственный интеллект (ИИ) — широкое название для систем, которые выполняют задачи, требующие «интеллекта» (например, распознавание речи).
  • Машинное обучение — подход, когда система не кодируется правилами вручную, а обучается на данных.
  • Нейросети — один из самых популярных классов моделей машинного обучения.
  • Глубокое обучение — нейросети с большим числом слоёв, которые особенно хорошо работают с изображениями, текстом и звуком.
  • Если совсем коротко: нейросеть получает вход (например, текст), преобразует его внутри себя и выдаёт выход (например, ответ).

    Из чего состоит нейросеть

    У нейросети есть несколько ключевых элементов.

  • Слои — этапы обработки данных внутри модели.
  • Нейроны — простые вычислительные «узлы» внутри слоёв.
  • Параметры — настраиваемые числа внутри сети, которые меняются в процессе обучения. Чем больше параметров, тем потенциально сложнее поведение модели, но тем больше требований к данным и вычислениям.
  • Входные данные — то, что мы подаём в модель (текст, картинка, аудио, таблица).
  • Выход — результат (класс, число, текст, изображение).
  • Важно: нейросеть не «думает как человек». Она статистически сопоставляет вход и выход на основе того, чему её научили данные.

    Как нейросети учатся и работают

    Есть два разных режима: обучение и применение.

  • Обучение — модель смотрит на множество примеров и подстраивает параметры так, чтобы делать меньше ошибок.
  • Применение (часто говорят инференс) — обученная модель получает новый вход и выдаёт ответ.
  • !Наглядная схема двух режимов работы нейросети: обучение и применение

    На практике это означает:

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

    Ниже — не полный список, но он помогает ориентироваться.

  • Полносвязные сети — часто используются для табличных данных и простых задач.
  • Сверточные сети — особенно сильны в обработке изображений.
  • Рекуррентные сети — исторически применялись для последовательностей (текст, временные ряды), сейчас чаще уступают более современным подходам.
  • Трансформеры — основа большинства современных моделей для текста и не только (включая мультимодальные модели). Классическая работа: Attention Is All You Need.
  • Диффузионные модели — популярный подход для генерации изображений.
  • В этом курсе мы будем чаще встречать трансформеры и модели, которые уже обучены и доступны через библиотеки или API.

    Где применяются нейросети

    Текст и документы

    Типовые задачи:

  • ответы на вопросы и чат-боты;
  • суммаризация (краткие выжимки);
  • классификация писем и обращений;
  • извлечение фактов из документов.
  • Важно помнить: генеративные модели могут галлюцинировать — уверенно писать то, чего нет в источнике. Это не «ложь», а побочный эффект способа генерации текста.

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

    Типовые задачи:

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

    Типовые задачи:

  • распознавание речи (speech-to-text);
  • синтез речи (text-to-speech);
  • улучшение качества аудиозаписей;
  • детекция ключевых событий в звуке.
  • Табличные данные и бизнес-аналитика

    Типовые задачи:

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

    Примеры:

  • ускорение анализа научных данных;
  • помощь в программировании (подсказки, генерация черновиков кода);
  • генерация дизайна, текстов, концепт-арта.
  • Практическая карта «задача → тип модели → результат»

    | Задача | Что подаём на вход | Что получаем на выход | Частые семейства моделей | |---|---|---|---| | Классификация писем | Текст письма | Метка категории | Трансформеры | | Поиск дефектов | Фото изделия | Дефект/нет + область | Сверточные сети, трансформеры для зрения | | Распознавание речи | Аудио | Текст | Модели для речи, трансформеры | | Рекомендации | История действий | Список рекомендаций | Разные модели, включая нейросети | | Генерация изображений | Текстовое описание | Новое изображение | Диффузионные модели |

    Ограничения и риски, о которых важно знать

    Нейросети дают мощные возможности, но у них есть ограничения.

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

    Инструменты, которые вы будете встречать

    Для практики важно знать основные экосистемы:

  • Библиотека PyTorch: PyTorch
  • Библиотека TensorFlow: TensorFlow
  • Набор моделей и инструментов: Hugging Face
  • Эти ссылки даны как ориентиры: для старта вам не нужно уметь обучать огромные модели — гораздо важнее понимать, как они применяются и как оценивать результат.

    Что дальше в курсе

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

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

  • Определение и обзор: Artificial neural network
  • Обзор направления: Deep learning
  • 2. Базовая математика и ключевые понятия машинного обучения

    Базовая математика и ключевые понятия машинного обучения

    Как эта тема связана с нейросетями

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

    Эта статья даёт минимальный математический фундамент, который нужен, чтобы:

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

    В машинном обучении почти всегда есть три сущности.

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

  • матрицу признаков размера ;
  • вектор меток длины .
  • Здесь:

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

    Векторы, матрицы и зачем они нужны

    Вектор как список чисел

    Вектор — это упорядоченный набор чисел, например признаки одного объекта:

    Здесь:

  • — вектор признаков объекта;
  • — значение -го признака;
  • — количество признаков.
  • Матрица как таблица чисел

    Матрица — это таблица, например все объекты сразу:

    Здесь — вектор признаков -го объекта.

    Скалярное произведение и линейная модель

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

    Где:

  • — предсказание модели;
  • — признаки объекта;
  • — веса (параметры модели), по одному на каждый признак;
  • — вес -го признака;
  • — смещение (bias, свободный член);
  • — суммирование по всем признакам.
  • Нейросети устроены сложнее линейной модели, но на уровне вычислений они постоянно используют те же идеи: векторы, матрицы, умножение и сложение.

    !Наглядная схема вычисления предсказания в простой модели

    Вероятности: что важно для ML

    Вероятность как мера уверенности

    Во многих задачах модель не просто говорит «класс A», а выдаёт вероятности классов: например, 0.7 что это спам и 0.3 что не спам. Это удобно для:

  • выбора порога решения;
  • ранжирования;
  • оценки уверенности.
  • Ошибки, шум и «лучше невозможно»

    Даже идеальная модель не всегда может давать 100% точность:

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

    Целевая функция (loss): как измеряется ошибка

    Чтобы обучать модель, нужно формально определить, что такое «ошибка». Для этого вводят функцию потерь (loss).

    Пример для регрессии: среднеквадратичная ошибка

    Если мы предсказываем число (например, цену), популярная функция потерь:

    Где:

  • — средняя ошибка по всем объектам;
  • — число объектов;
  • — индекс объекта;
  • — истинное значение;
  • — предсказание модели;
  • — квадрат, чтобы сильнее штрафовать большие ошибки.
  • Пример для классификации: кросс-энтропия

    Если мы выбираем один класс из нескольких, часто используют кросс-энтропию. В бинарном случае (класс 0 или 1):

    Где:

  • — предсказанная вероятность класса 1 для объекта ;
  • — логарифм (нужен, чтобы сильно штрафовать «уверенные ошибки»);
  • — истинная метка.
  • Если формула кажется тяжёлой, достаточно запомнить смысл: кросс-энтропия делает обучение устойчивым и поощряет модель повышать вероятность правильного класса.

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

    Обучение — это подбор параметров (весов) так, чтобы loss стал меньше.

    Градиент как «направление, куда уменьшать ошибку»

    Интуитивно:

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

    Один шаг градиентного спуска

    Где:

  • — текущие параметры;
  • — «присваивание» (обновляем значение);
  • — скорость обучения (learning rate), маленькое положительное число;
  • — градиент, то есть вектор, показывающий, как изменить параметры, чтобы увеличить loss; со знаком минус мы идём в сторону уменьшения loss.
  • На практике вы чаще будете видеть это в настройках обучения как learning_rate.

    !Типичная динамика loss во время обучения

    Обучающая, валидационная и тестовая выборки

    Чтобы честно оценивать качество, данные делят на части.

  • Train — на этом обучаем модель.
  • Validation — на этом подбираем настройки (гиперпараметры), выбираем лучшую версию.
  • Test — финальная проверка качества, которую нельзя использовать для подбора.
  • Ключевой принцип: то, что использовалось для выбора настроек, уже не является «честной» проверкой.

    Подробнее о терминах и хороших практиках есть в глоссарии scikit-learn: Глоссарий scikit-learn.

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

    Недообучение

    Модель слишком простая или обучена недостаточно.

  • ошибка на train высокая;
  • ошибка на validation тоже высокая.
  • Переобучение

    Модель «запомнила» обучающие примеры, но плохо обобщает.

  • ошибка на train низкая;
  • ошибка на validation заметно выше.
  • Как с этим борются

    Базовые подходы:

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

    Численные признаки часто имеют разные масштабы: возраст (0–100), доход (0–миллионы), количество кликов (0–тысячи). Многие методы (и оптимизация нейросетей тоже) работают стабильнее, если признаки приведены к сопоставимым масштабам.

    Один из стандартных вариантов — стандартизация:

    Где:

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

    Метрики: как измерять качество «по-человечески»

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

    Классификация

  • Accuracy — доля правильных ответов.
  • Precision — насколько «чисты» положительные срабатывания.
  • Recall — насколько хорошо мы находим все положительные случаи.
  • F1-score — баланс между precision и recall.
  • Эти метрики удобно объяснять через матрицу ошибок (confusion matrix).

    !Матрица ошибок для бинарной классификации

    Регрессия

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

    Гиперпараметры и параметры

    Важно различать:

  • Параметры — то, что модель учит (веса нейросети).
  • Гиперпараметры — то, что выбираем мы (скорость обучения, число эпох, размер батча, архитектура, коэффициенты регуляризации).
  • Подбор гиперпараметров делается по validation, а не по test.

    Чек-лист практического понимания перед следующими темами

    Если вы уверенно понимаете пункты ниже, вам будет легче в следующих статьях курса (про практическую работу с моделями и сборку проектов):

  • что такое (признаки) и (метки);
  • зачем нужна функция потерь и почему метрика не всегда равна loss;
  • что делает градиентный спуск и что такое learning_rate;
  • чем опасна утечка данных;
  • как выглядит переобучение по train/validation.
  • Дополнительные источники

  • Базовые определения и контекст: Машинное обучение
  • Введение в ключевые идеи (книга): Deep Learning Book
  • Практические термины и определения: Глоссарий scikit-learn
  • 3. Данные: сбор, очистка, разметка и подготовка

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

    Почему данные — это половина успеха

    В предыдущих статьях мы разобрали, что нейросети учатся на примерах и что качество обучения зависит от данных, функции потерь и корректной оценки (train/validation/test). На практике большинство проблем в проектах с нейросетями связано не с выбором «самой крутой модели», а с тем, что данные:

  • собраны с перекосами;
  • плохо очищены;
  • размечены непоследовательно;
  • подготовлены так, что возникает утечка данных;
  • не соответствуют реальной задаче.
  • Цель этой темы — научиться выстраивать понятный и воспроизводимый конвейер: сбор → проверка → очистка → разметка → подготовка → разбиение → контроль качества.

    !Схема типового процесса подготовки данных для обучения и оценки моделей

    Постановка задачи перед сбором данных

    Прежде чем собирать данные, нужно зафиксировать, что именно модель должна делать. Это уменьшает риск собрать «много всего», но не того.

    Короткий чек-лист постановки:

  • Какой вход у модели (текст, изображение, аудио, таблица).
  • Какой выход нужен (класс, число, извлечённые поля, ответ в тексте).
  • Что будет считаться успехом (метрика и целевой порог, например F1 или recall).
  • В каких условиях модель будет применяться (канал, язык, качество фото, шум в речи).
  • Пример: если вы делаете классификацию обращений в поддержку, заранее решите, будет ли модель работать по «теме обращения» или по «отделу, куда направить», потому что это разные схемы разметки.

    Источники данных: откуда брать

    Источники зависят от домена, но почти всегда укладываются в несколько типов.

    Внутренние данные

    Подходят для бизнес-задач, но требуют аккуратности с доступами и персональными данными.

  • CRM/Helpdesk (тикеты, обращения).
  • Логи (клики, события, ошибки).
  • Документы (PDF, договоры, письма).
  • Открытые датасеты

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

  • Kaggle Datasets
  • Hugging Face Datasets
  • UCI Machine Learning Repository
  • Google Dataset Search
  • Сбор из внешних источников

    Часто применяется для текстов и изображений, но требует юридической и этической проверки.

  • API (официальные интерфейсы сервисов).
  • Веб-скрейпинг (только если это разрешено правилами сайта и законом).
  • Лицензии, персональные данные и безопасность

    Даже учебный проект лучше строить правильно.

  • Проверяйте, разрешено ли использование датасета в вашем контексте (коммерческий/некоммерческий).
  • Учитывайте персональные данные: минимизируйте сбор, обезличивайте, ограничивайте доступ.
  • Не отправляйте чувствительные данные в сторонние сервисы без правовых оснований и политики.
  • Полезные ориентиры:

  • Общий регламент по защите данных (GDPR)
  • Creative Commons
  • Сырые данные: типичные проблемы качества

    Сырые данные почти никогда не готовы к обучению.

    Пропуски и неправильные значения

    Примеры:

  • пустые поля в таблицах;
  • «возраст = 999» как заглушка;
  • нераспарсенные даты.
  • Дубликаты

    Дубликаты опасны тем, что могут привести к утечке: один и тот же объект окажется и в train, и в test.

    Несоответствие форматов

    Примеры:

  • разные кодировки текста;
  • разные единицы измерения;
  • изображения с разным цветовым пространством.
  • Смещения (bias)

    Смещение возникает, когда данные не представляют реальный мир.

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

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

    Принцип воспроизводимости

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

  • фиксируйте правила очистки (в коде или в документе);
  • храните версии датасетов;
  • записывайте статистики “до/после” (сколько строк удалили, сколько пропусков исправили).
  • Что обычно делают при очистке

    Для табличных данных:

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

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

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

    Разметка — это способ получить (метки), о которых говорили в теме про основы ML. Если метки плохие, обучение будет оптимизировать «неправильную правду».

    Виды разметки

  • Классификация: одна метка на объект (например, “спам/не спам”).
  • Мульти-лейбл: несколько меток на объект (например, письмо и про оплату, и про доставку).
  • Извлечение сущностей: выделить фрагменты текста и типы (имя, дата, сумма).
  • Детекция на изображениях: прямоугольники и классы объектов.
  • Сегментация: маска по пикселям.
  • Кто размечает

  • Эксперты: дорого, но точнее.
  • Краудсорсинг: быстрее, но нужен контроль качества.
  • Слабая разметка: эвристики и правила как черновые метки.
  • Псевдоразметка: модель размечает данные, человек проверяет.
  • Инструкции для разметчиков

    Хорошая инструкция — это половина качества.

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

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

    Практики контроля:

  • разметка части данных двумя разметчиками;
  • разбор конфликтов и обновление инструкции;
  • регулярная выборочная проверка.
  • Инструменты разметки, которые часто используют:

  • Label Studio
  • CVAT
  • Подготовка данных для модели

    Подготовка — это приведение данных к виду, который ожидает обучение или инференс.

    Разбиение на train/validation/test

    Из темы про оценку качества: test нужен для честной финальной проверки, а validation — для подбора настроек.

    Базовое правило:

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

  • вы стандартизовали признаки, посчитав среднее и стандартное отклонение по всем данным;
  • test «подсказал» параметры стандартизации;
  • метрики стали выглядеть лучше, чем будут в реальности.
  • Особые случаи разбиения

  • Временные ряды: test должен быть “после” train по времени.
  • Персональные данные: если у одного пользователя много записей, важно, чтобы один пользователь не оказался и в train, и в test.
  • Дубликаты и почти-дубликаты: их нужно убирать или группировать до разбиения.
  • Баланс классов

    Если один класс встречается редко, модель может игнорировать его и всё равно показывать высокую accuracy.

    Что делают на практике:

  • собирают больше редкого класса;
  • делают взвешивание классов в обучении;
  • применяют over/under-sampling;
  • используют подходящие метрики (например, F1 или PR-AUC).
  • Подготовка текста

    Для современных языковых моделей текст обычно превращается в токены (числа). Важно обеспечить одинаковые правила обработки на обучении и в продакшене.

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

    Типовые шаги:

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

    Документация датасета: что записать, чтобы не забыть

    Даже небольшой датасет выигрывает от краткого паспорта.

    Минимум, который стоит зафиксировать:

  • источник данных и лицензия;
  • период и условия сбора;
  • описание полей и форматов;
  • правила очистки и доля удалённых данных;
  • инструкция по разметке и количество разметчиков;
  • схема train/validation/test;
  • известные ограничения и смещения.
  • Как ориентир, можно посмотреть подход “datasheets for datasets”:

  • Datasheets for Datasets (arXiv)
  • Типичные ошибки новичков

  • Собирать данные без чёткой постановки задачи.
  • Оценивать качество на данных, которые использовались для выбора настроек.
  • Делать преобразования по всему датасету до разбиения.
  • Игнорировать дубликаты и “почти одинаковые” примеры.
  • Пытаться компенсировать плохие данные “более сложной моделью”.
  • Что дальше в курсе

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

    4. Инструменты и среда: Python, Jupyter, PyTorch или TensorFlow

    Инструменты и среда: Python, Jupyter, PyTorch или TensorFlow

    Зачем вообще говорить про среду

    В прошлых темах мы разобрали:

  • что нейросети учатся на данных и затем применяются (инференс)
  • что качество зависит от данных, метрик и честного разбиения train/validation/test
  • что данные нужно собирать, очищать, размечать и готовить воспроизводимо
  • Теперь нужен практический мост от теории к работе руками: настроенная среда, в которой вы сможете повторять эксперименты, фиксировать результаты и собирать мини-проекты.

    !Наглядно показывает, как данные, среда и фреймворк соединяются в единый процесс

    Минимальный набор инструментов для старта

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

  • Python как основной язык
  • Менеджер пакетов pip для установки библиотек
  • Изоляция окружений (чтобы проекты не мешали друг другу)
  • Jupyter для экспериментов и визуализаций
  • Фреймворк: PyTorch или TensorFlow
  • Библиотеки для данных: numpy, pandas, scikit-learn
  • Ссылки на официальные источники:

  • Python
  • pip
  • Project Jupyter
  • PyTorch
  • TensorFlow
  • Python: какая версия нужна и почему

    Практическое правило: ставьте актуальную стабильную версию Python, которую поддерживают нужные библиотеки.

  • чаще всего комфортно начинать с Python 3.10–3.12
  • если вы повторяете чужой проект, сверяйте версии в файле зависимостей (часто это requirements.txt или pyproject.toml)
  • Важно понимать идею совместимости:

  • библиотека может не поддерживать очень новую версию Python
  • разные версии библиотек могут конфликтовать друг с другом
  • Именно поэтому дальше нам нужно изолированное окружение.

    Изоляция окружений: чтобы проекты не ломали друг друга

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

    Есть несколько популярных способов.

    Вариант A: встроенный venv + pip

    Плюсы:

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

    Активация:

    Установка пакетов:

    Вариант B: Conda (удобно, если вы часто работаете с наукой и GPU)

    Плюсы:

  • удобно управлять бинарными зависимостями
  • часто проще ставить сложные пакеты
  • Официальный источник:

  • Anaconda
  • Вариант C: uv как быстрый установщик и менеджер окружений

    Если хочется быстрее ставить зависимости, можно посмотреть:

  • uv
  • На старте курса достаточно venv.

    Как фиксировать зависимости, чтобы всё воспроизводилось

    В проектах с нейросетями воспроизводимость критична: вы должны иметь возможность повторить эксперимент через неделю и получить сопоставимый результат.

    Базовые правила:

  • фиксируйте зависимости в файле requirements.txt
  • храните код подготовки данных (очистка, разбиение) как часть проекта
  • фиксируйте сиды (seed) там, где это применимо
  • Самый простой способ зафиксировать зависимости:

    Jupyter: зачем он нужен и как им пользоваться правильно

    Jupyter Notebook удобен для обучения и исследований:

  • быстро проверять гипотезы
  • строить графики
  • по шагам объяснять ход эксперимента
  • Официальный старт:

  • Jupyter
  • Запуск в папке проекта:

    Практические правила, чтобы ноутбуки не превращались в хаос:

  • Один ноутбук = одна цель (например, “подготовка данных” или “обучение baseline”).
  • Держите критичный код в *.py файлах, а в ноутбуке только вызывайте функции.
  • Всегда перезапускайте ядро и прогоняйте ноутбук сверху вниз перед тем, как считать результат “честным”.
  • CPU и GPU: что выбрать для практики

    Нейросети можно запускать на CPU, но многие задачи (особенно обучение и большие модели) сильно выигрывают от GPU.

    Что важно на старте:

  • для маленьких учебных задач CPU достаточно
  • для ускорения экспериментов удобно использовать облачные ноутбуки
  • Популярный вариант для обучения:

  • Google Colab
  • Если вы ставите GPU локально, вам придётся учитывать:

  • модель видеокарты
  • совместимость CUDA и версий фреймворка
  • драйверы
  • Практическое правило: ставьте PyTorch или TensorFlow строго по их официальным инструкциям для вашей ОС и типа GPU.

    PyTorch или TensorFlow: что выбрать

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

    PyTorch

    Часто выбирают, когда:

  • вы учитесь и хотите более “прямой” и читаемый код
  • планируете работать с исследовательскими примерами и современными туториалами
  • используете экосистему Hugging Face, где PyTorch очень распространён
  • Официальный сайт:

  • PyTorch
  • TensorFlow

    Часто выбирают, когда:

  • вы работаете в окружениях, где исторически принят TensorFlow
  • вам важны определённые инструменты продакшена из экосистемы TensorFlow
  • Официальный сайт:

  • TensorFlow
  • Как принять решение без боли

    Практичный выбор для этого курса:

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

  • данные всё равно превращаются в числа
  • вам всё равно нужно честное разбиение train/validation/test
  • метрики и контроль утечек данных остаются обязательными
  • Мини-пример: проверка, что фреймворк работает

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

    PyTorch: версия и доступность GPU

    TensorFlow: версия и видимые устройства

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

    Типовая структура учебного проекта

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

  • data/ исходные и подготовленные данные
  • notebooks/ эксперименты и исследования
  • src/ код (подготовка данных, обучение, оценка)
  • models/ сохранённые веса и артефакты
  • requirements.txt зависимости
  • README.md краткое описание эксперимента и шагов запуска
  • Идея простая: ноутбуки — для исследований, src/ — для повторяемого пайплайна.

    Частые ошибки при настройке среды

  • Установка пакетов без окружения, из-за чего “вчера работало, сегодня нет”.
  • Смешивание ноутбуков и случайных версий данных без фиксации.
  • Разные версии библиотек у членов команды без requirements.txt.
  • Попытка “обязательно настроить GPU локально” как первый шаг вместо того, чтобы начать с CPU или Colab.
  • Что дальше

    После того как среда готова, мы можем переходить к практике:

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

    Обучение нейросетей: архитектуры, оптимизация и регуляризация

    Как эта тема связана с предыдущими

    В прошлых темах курса вы разобрали:

  • что такое нейросети и как они применяются
  • базовые понятия машинного обучения: данные , метки , loss, метрики, train/validation/test
  • как готовить данные и не допускать утечек
  • как настроить среду (Python, Jupyter, PyTorch или TensorFlow)
  • Теперь соберём всё в единый практический процесс: как именно обучается нейросеть, какие архитектуры встречаются чаще всего, как работают оптимизация и регуляризация, и почему без них модель либо не обучится, либо переобучится.

    Что значит «обучить нейросеть»

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

    В терминах прошлой статьи про математику:

  • есть входные данные (признаки)
  • есть правильные ответы (метки)
  • модель выдаёт предсказания
  • функция потерь измеряет ошибку
  • оптимизатор меняет веса так, чтобы уменьшать
  • !Цикл обучения: данные → модель → loss → градиенты → обновление весов

    Архитектуры: какие бывают и когда что выбирать

    Архитектура — это как устроена модель внутри: какие слои используются и как они соединены.

    Полносвязные сети (MLP)

    MLP (многослойный перцептрон) — несколько полносвязных слоёв подряд.

    Где часто полезны:

  • табличные данные как базовый старт
  • простые задачи регрессии и классификации
  • Ограничения:

  • плохо используют структуру изображений и текста
  • часто уступают специализированным архитектурам
  • Сверточные сети (CNN)

    CNN используют свёртки, которые хорошо ловят локальные шаблоны.

    Где часто полезны:

  • изображения (классификация, детекция)
  • аудио в виде спектрограмм
  • Интуиция:

  • вместо того чтобы учить отдельный вес на каждый пиксель, CNN учит фильтры, которые «ездят» по изображению и ищут признаки
  • Рекуррентные сети (RNN, LSTM, GRU)

    RNN — классические модели для последовательностей.

    Где встречаются:

  • временные ряды
  • простая обработка текста (исторически)
  • Практическая оговорка:

  • во многих современных NLP-задачах RNN часто заменили трансформеры, потому что лучше масштабируются и параллелятся
  • Трансформеры

    Трансформеры — основа большинства современных моделей для текста и мультимодальности.

    Ключевая идея:

  • механизм внимания помогает модели учитывать важные части последовательности
  • Хороший первоисточник:

  • Attention Is All You Need
  • Где применяются:

  • текст (классификация, генерация, извлечение информации)
  • изображения и видео (vision transformers)
  • мультимодальные задачи
  • Как не ошибиться с архитектурой на старте

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

  • изображения: начинайте с CNN или готовых vision-моделей
  • текст: начинайте с готовых трансформеров
  • табличные данные: начинайте с простого baseline (MLP или даже модели не нейросетевого типа), чтобы понять потолок качества
  • Прямой проход, функция потерь и обратное распространение

    Прямой проход (forward)

    Модель принимает вход и выдаёт предсказание .

    Пример смысла предсказания:

  • в классификации часто интерпретируется как вероятности классов
  • в регрессии — число
  • Функция потерь (loss)

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

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

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

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

    Обратное распространение ошибки (backprop)

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

    На практике вы редко реализуете backprop вручную:

  • PyTorch и TensorFlow делают это автоматически
  • вы управляете тем, какой loss, какой оптимизатор и какие настройки обучения
  • Оптимизация: как именно обновляются веса

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

    Градиентный шаг и скорость обучения

    Интуитивная запись одного шага обновления весов:

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

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

  • слишком большой может привести к “скачкам” и срыву обучения
  • слишком маленький делает обучение очень медленным
  • SGD, Momentum, Adam

    На практике чаще всего встречаются такие оптимизаторы.

  • SGD (stochastic gradient descent): простой и понятный, часто хорош в компьютерном зрении.
  • SGD с momentum: добавляет инерцию, обычно сходится стабильнее.
  • Adam: адаптивно подбирает шаг для разных параметров, часто удобен как стартовый выбор.
  • Первоисточник Adam:

  • Adam: A Method for Stochastic Optimization
  • Практический совет:

  • если вы не уверены, начинайте с Adam и затем пробуйте SGD+momentum как альтернативу
  • Батчи и эпохи

    Термины обучения:

  • batch — небольшая порция данных, на которой считается loss и делается обновление весов
  • epoch — один полный проход по обучающей выборке
  • Компромисс:

  • маленький batch даёт более “шумные”, но иногда полезные градиенты
  • большой batch требует больше памяти и иногда ухудшает обобщение без дополнительных приёмов
  • План обучения: scheduler и early stopping

    Два популярных механизма управления обучением:

  • learning rate scheduler уменьшает скорость обучения по ходу тренировки (часто помогает выйти на лучшее качество)
  • early stopping останавливает обучение, если качество на validation перестало улучшаться (защита от переобучения)
  • Регуляризация: как не переобучиться

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

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

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

  • модель слишком сложная для объёма данных
  • в данных много шума или ошибок разметки
  • слишком долго обучаемся без контроля validation
  • Визуальный симптом:

  • loss на train продолжает падать
  • метрика на validation перестаёт расти или падает
  • L2-регуляризация (weight decay)

    Один из базовых способов — штрафовать большие веса.

    Чаще всего это реализовано как weight decay в оптимизаторе.

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

  • модель предпочитает более “простые” решения
  • часто улучшает устойчивость и качество на validation
  • Полезный материал про корректный weight decay для Adam:

  • Decoupled Weight Decay Regularization
  • Dropout

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

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

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

  • Dropout: A Simple Way to Prevent Neural Networks from Overfitting
  • Batch Normalization

    BatchNorm нормализует активации внутри сети и часто делает обучение стабильнее.

    Практические эффекты:

  • ускорение обучения
  • снижение чувствительности к выбору learning rate
  • Первоисточник:

  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  • Аугментации данных

    Аугментации — это искусственное расширение train-данных, чтобы модель видела больше вариативности.

    Примеры:

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

  • аугментации применяются к train, но обычно не к validation/test
  • Ранняя остановка (early stopping)

    Early stopping — простой и очень практичный метод:

  • следим за метрикой на validation
  • если улучшения нет несколько эпох подряд, останавливаемся и берём лучшую сохранённую модель
  • Типовая схема обучения в проекте

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

  • Разбить данные на train/validation/test.
  • Выбрать baseline-модель и простую метрику.
  • Настроить обучение: loss, оптимизатор, learning rate, batch size, число эпох.
  • Логировать результаты по эпохам (loss и метрики на train/validation).
  • Применить регуляризацию, если видно переобучение.
  • Проверить финальный результат на test ровно один раз, когда выбор модели и настроек завершён.
  • Частые ошибки новичков при обучении

  • Подбирать гиперпараметры по test вместо validation.
  • Делать предобработку “по всем данным” до разбиения (утечка данных).
  • Считать accuracy единственной метрикой при сильном дисбалансе классов.
  • Менять сразу много параметров и не понимать, что повлияло на результат.
  • Не фиксировать зависимости, сиды и версию данных, из-за чего эксперимент нельзя повторить.
  • Что дальше

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

    6. Оценка качества, ошибки, интерпретация и отладка моделей

    Оценка качества, ошибки, интерпретация и отладка моделей

    Зачем нужна оценка качества в практических проектах

    В предыдущих темах вы разобрали, как устроено обучение: данные и метки , функция потерь, оптимизация, регуляризация, а также честное разбиение на train/validation/test. Теперь ключевой практический навык: понять, насколько модель хороша, почему она ошибается и что делать, чтобы улучшить результат.

    Оценка качества — это не “посчитать одну цифру”. Это процесс, который помогает:

  • выбрать правильную метрику под задачу;
  • настроить порог принятия решения;
  • найти системные ошибки и улучшить данные;
  • обнаружить утечки данных и переобучение;
  • объяснить результат модели и снизить риски.
  • !Два ключевых цикла: итеративное улучшение и правило “test один раз”

    Что именно мы оцениваем

    Когда говорят “качество модели”, часто смешивают разные вещи. На практике полезно разделять:

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

    Для классификации один из самых наглядных способов понять поведение модели — матрица ошибок (confusion matrix). В бинарном случае есть 4 исхода:

  • истинно положительный (TP): модель сказала “да”, и это действительно “да”
  • ложноположительный (FP): модель сказала “да”, но на самом деле “нет”
  • истинно отрицательный (TN): модель сказала “нет”, и это действительно “нет”
  • ложноотрицательный (FN): модель сказала “нет”, но на самом деле “да”
  • !Матрица ошибок: из чего складываются метрики

    Матрица ошибок помогает ответить на вопрос “какие именно ошибки делает модель”, а не только “сколько”.

    Метрики классификации и как их выбирать

    Accuracy и почему она часто обманывает

    Accuracy — доля правильных ответов. Она полезна, если классы сбалансированы и цена ошибок примерно одинаковая.

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

    Precision и recall

    Две ключевые метрики для задач, где важны разные типы ошибок:

  • Precision отвечает на вопрос: “если модель сказала да, как часто это правда?”
  • Recall отвечает на вопрос: “из всех настоящих да, сколько мы нашли?”
  • Формулы (встречаются в документации и статьях):

    Здесь:

  • — число истинно положительных предсказаний
  • — число ложноположительных предсказаний
  • — все случаи, когда модель сказала “положительный класс”
  • Здесь:

  • — число ложноотрицательных предсказаний
  • — все реальные случаи положительного класса
  • Практическая интерпретация:

  • если вам важно не тревожить зря (например, спам-фильтр для важных писем), часто критичнее precision
  • если вам важно не пропустить опасное (например, дефект на производстве), часто критичнее recall
  • F1-score как компромисс

    F1-score объединяет precision и recall в одну метрику, когда важен баланс.

    Здесь:

  • и — метрики из предыдущих формул
  • числитель делает F1 высоким только если обе метрики достаточно высокие
  • коэффициент и деление на сумму дают “сбалансированное среднее”, которое сильнее штрафует перекос (например, высокий recall при низком precision)
  • Полезные справки и примеры расчётов:

  • Метрики классификации в scikit-learn
  • ROC-AUC и PR-AUC

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

  • ROC-AUC удобно сравнивать модели в целом, но на сильном дисбалансе классов может выглядеть слишком оптимистично.
  • PR-AUC (площадь под precision-recall кривой) чаще более информативна при редком положительном классе.
  • Справка:

  • ROC-кривые в scikit-learn
  • Precision-Recall в scikit-learn
  • Порог решения: почему “0.5” почти никогда не лучший

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

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

  • под нужный precision (например, “не более 1% ложных тревог”)
  • под нужный recall (например, “найти хотя бы 95% дефектов”)
  • под стоимость ошибок (если FN в 10 раз дороже FP)
  • Важно: порог подбирают по validation (или через кросс-валидацию), а не по test.

    Калибровка вероятностей: когда вероятности нельзя понимать буквально

    Иногда модель говорит “вероятность 0.9”, но в реальности такие ответы оказываются правильными только в 70% случаев. Это проблема калибровки.

    Почему важно:

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

  • сначала проверьте калибровку на validation
  • затем примените методы калибровки (например, Platt scaling или isotonic regression)
  • Справка:

  • Калибровка вероятностей в scikit-learn
  • Метрики регрессии

    Если модель предсказывает число (цена, время доставки, спрос), чаще всего используют:

  • MAE: средняя абсолютная ошибка, проще интерпретируется (в тех же единицах, что и цель)
  • MSE/RMSE: сильнее штрафует большие промахи
  • Практическое правило:

  • если крупные ошибки особенно опасны, RMSE может лучше отражать реальный риск
  • если нужна “честная средняя ошибка” без сильного перекоса из-за редких выбросов, MAE часто удобнее
  • Справка:

  • Метрики регрессии в scikit-learn
  • Ошибки модели: как проводить анализ ошибок

    Анализ ошибок — это переход от “метрика = 0.83” к “мы понимаем, что сломано”. Практически полезно делать это как мини-исследование.

    Шаги анализа ошибок

  • Соберите примеры ошибок на validation.
  • Разделите ошибки по типам (ручными тегами): например, “плохое качество изображения”, “двусмысленный текст”, “ошибка разметки”, “другой язык”, “слишком длинный документ”.
  • Посчитайте долю каждого типа ошибки.
  • Выберите 1–2 самых частых/дорогих типа и улучшайте именно их.
  • Что чаще всего обнаруживается

  • Ошибка разметки: модель “ошибается”, но на самом деле метка неверна.
  • Сегментный провал: модель хороша в среднем, но плохо работает на конкретной группе (регион, тип устройств, стиль текста).
  • Смещение данных: в train и в реальности разные распределения (domain shift).
  • Ограничение входа: слишком короткая/длинная длина, обрезка текста, низкое качество изображений.
  • Переобучение, недообучение и утечки данных: как распознавать

    Из прошлых тем вы знаете симптомы переобучения по train/validation. В оценке качества важно уметь отличать это от утечек данных.

    Типичные признаки недообучения

  • низкое качество и на train, и на validation
  • модель не улавливает закономерности (слишком простая модель, мало эпох, слишком сильная регуляризация)
  • Типичные признаки переобучения

  • качество на train заметно выше, чем на validation
  • улучшение на train продолжается, а validation стоит или деградирует
  • Типичные признаки утечки данных

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

  • вы стандартизировали признаки по всему датасету до разбиения
  • один и тот же пользователь/объект оказался и в train, и в validation/test
  • признак напрямую связан с меткой (например, поле “статус закрыт/открыт” в задаче предсказания закрытия)
  • Интерпретация моделей: что можно объяснить, а что нет

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

    Два уровня интерпретации

  • Глобальная интерпретация: “какие признаки/паттерны важны для модели в целом?”
  • Локальная интерпретация: “почему модель приняла решение для этого конкретного примера?”
  • Что реально применяют на практике

  • для табличных моделей часто используют SHAP или похожие методы для объяснения вкладов признаков
  • для изображений используют карты внимания/салиентности (где модель “смотрела”)
  • для текстов смотрят важные токены/фразы, но учитывают, что такие методы могут быть нестабильны
  • Полезные инструменты и источники:

  • SHAP (репозиторий)
  • LIME (статья на arXiv)
  • Практическая оговорка:

  • интерпретация помогает находить проблемы, но не делает модель “правильной” автоматически
  • объяснения могут зависеть от выбранного метода и настроек
  • Отладка моделей: практический чек-лист

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

    Проверки данных

  • нет ли дубликатов между train и validation/test
  • корректно ли сделано разбиение (особенно по времени, пользователям, группам)
  • нет ли “подсказок” в признаках (утечек)
  • одинаковая ли предобработка на train и inference
  • Проверки обучения

  • loss действительно уменьшается
  • learning rate не слишком большой и не слишком маленький
  • метрика считается корректно (особенно в многоклассовых и мульти-лейбл задачах)
  • модель в режиме train при обучении и в режиме eval при оценке (важно из-за dropout и batchnorm)
  • Проверки оценки

  • метрики считаются на validation, а test не используется для подбора
  • порог подобран по задаче, а не “по умолчанию”
  • качество проверено по сегментам (например, по регионам или источникам данных)
  • Минимальный “sanity check”

    Простой, но полезный тест: попробуйте переобучить модель на маленьком подмножестве (например, 50–200 примеров). Если модель не может добиться почти идеального качества там, значит:

  • ошибка в коде обучения/метрики
  • неправильная разметка/соответствие данных и меток
  • модель получает не те входы
  • Как фиксировать результаты, чтобы улучшения были честными

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

  • версию данных и способ разбиения
  • метрики и порог
  • сиды (seed) и зависимости
  • конфигурацию модели (архитектура, оптимизатор, learning rate, регуляризация)
  • И главный принцип из предыдущих тем: test используется как финальная проверка, когда вы уже перестали “крутить ручки”.

    Что дальше

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

    7. Генеративные модели и внедрение: LLM, промптинг, деплой и MLOps-основы

    Генеративные модели и внедрение: LLM, промптинг, деплой и MLOps-основы

    Как эта тема связана с предыдущими

    Ранее в курсе вы разобрали, что нейросети обучаются на данных, как устроены loss и метрики, почему важно честное разбиение train/validation/test, как готовить данные и как отлаживать модели по ошибкам.

    Генеративные модели, и особенно LLM (Large Language Models, большие языковые модели), добавляют новый слой практики:

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

    Что такое генеративные модели и чем LLM отличаются от “обычного ML”

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

    LLM чаще всего обучаются предсказывать следующий фрагмент текста (токен) по предыдущим токенам. На практике важно понимать три прикладных понятия.

  • Токены: единицы текста, в которые модель разбивает ввод и вывод.
  • Контекстное окно: максимум токенов, которые модель может учитывать за один запрос.
  • Инструкционное поведение: способность следовать задаче (“ответь в JSON”, “суммируй”, “классифицируй”).
  • Главное отличие от классической классификации:

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

    Есть два базовых способа использования LLM.

    Облачный API

    Вы отправляете запрос провайдеру, получаете ответ.

    Плюсы:

  • быстрый старт;
  • масштабирование и инфраструктура на стороне провайдера;
  • часто есть готовые механизмы безопасности и наблюдаемости.
  • Минусы:

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

  • OpenAI API Documentation
  • Anthropic Documentation
  • Локальное или собственное хостинг-развёртывание

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

    Плюсы:

  • контроль над данными;
  • потенциально ниже стоимость при большом трафике;
  • можно выбрать открытую модель и донастроить под домен.
  • Минусы:

  • нужны ресурсы и компетенции по инфраструктуре;
  • сложнее обеспечить стабильную скорость, обновления и мониторинг.
  • Инструменты и ориентиры:

  • Hugging Face Transformers
  • vLLM
  • llama.cpp
  • Ollama
  • Практическая таблица выбора

    | Критерий | Облачный API | Локально или свой хостинг | |---|---|---| | Скорость старта | Высокая | Средняя или низкая | | Контроль данных | Ограниченный | Высокий | | Стоимость на малом объёме | Обычно низкая | Обычно выше из-за инфраструктуры | | Стоимость на большом объёме | Может сильно расти | Может быть выгоднее | | Масштабирование | Проще | Сложнее | | Гибкость выбора моделей | Ограничена провайдером | Высокая |

    Промптинг: как получать предсказуемые ответы

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

    Базовая структура хорошего промпта

    Практичный шаблон:

  • Роль и контекст: кто модель и в каком режиме работает.
  • Задача: что именно нужно сделать.
  • Данные: входной текст, таблица, список фактов.
  • Ограничения: что нельзя делать, что важно.
  • Формат ответа: строго JSON, таблица, список, цитаты.
  • Примеры: 1–3 примера “вход → выход”, если формат сложный.
  • Управление вариативностью: temperature и top-p

    Многие LLM имеют настройки случайности.

  • temperature: чем выше, тем разнообразнее ответы и тем сложнее воспроизводимость.
  • top_p: ограничивает “хвост” вариантов, из которых выбирается следующий токен.
  • Практическое правило:

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

    Обычно вы ограничиваете максимум выходных токенов, например max_tokens.

    Часто стоимость можно прикинуть формулой:

    Где:

  • это итоговая стоимость одного запроса.
  • это цена одного входного токена.
  • это количество входных токенов.
  • это цена одного выходного токена.
  • это количество выходных токенов в ответе.
  • Практический смысл:

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

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

    Подходы:

  • просить “строго JSON без пояснений”;
  • использовать “function calling” или “tools”, если это поддерживается провайдером;
  • валидировать ответ схемой и повторять запрос при ошибке.
  • RAG: как подключить знания без дообучения модели

    LLM может уверенно ошибаться и “додумывать”. Один из самых практичных способов снизить это в прикладных системах это RAG (Retrieval-Augmented Generation): сначала ищем релевантные фрагменты в вашей базе знаний, потом просим модель отвечать только на основе найденного контекста.

    !Диаграмма показывает основные этапы RAG-пайплайна

    Типовой RAG-пайплайн

  • Собрать документы и привести к тексту.
  • Разбить текст на фрагменты подходящего размера.
  • Посчитать эмбеддинги фрагментов.
  • Сохранить эмбеддинги во векторное хранилище.
  • Для запроса пользователя найти top-k фрагментов.
  • Сформировать промпт: вопрос + найденный контекст + правила ответа.
  • Сгенерировать ответ и по возможности приложить ссылки на источники.
  • Популярные инструменты:

  • FAISS
  • LangChain
  • LlamaIndex
  • Типичные ошибки RAG

  • слишком большие фрагменты, из-за чего поиск становится “размытым”;
  • слишком маленькие фрагменты, из-за чего теряется смысл;
  • отсутствие фильтрации по источникам и версиям документов;
  • смешивание “контекста” и “инструкции”, что повышает риск prompt injection.
  • Оценка качества LLM-систем: что измерять и как

    Из прошлых тем у вас уже есть правильная привычка: качество нельзя оценивать по одному примеру.

    Для LLM это особенно важно, потому что ответы вариативны.

    Минимальный набор тестов для продукта

  • Набор эталонных запросов: 50–300 реальных сценариев.
  • Целевой формат: что считать корректным ответом.
  • Критические ошибки: что запрещено.
  • Сегменты: разные типы пользователей, языки, длины, источники.
  • Подходы к оценке

  • Человеческая разметка: самая надёжная, но дорогая.
  • Автоматические проверки: формат JSON, наличие обязательных полей, отсутствие запрещённых фраз.
  • Судья-модель: LLM оценивает ответ другой LLM, но это требует контроля смещений и стабильности.
  • Если у вас RAG, добавляются специфические проверки:

  • ответ опирается на выданный контекст;
  • в ответе нет фактов, которых нет в источниках;
  • поиск действительно приносит релевантные фрагменты.
  • Безопасность: prompt injection, утечки и управление инструментами

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

    Prompt injection

    Пользователь может пытаться “встроить” в запрос инструкции, которые конфликтуют с правилами системы.

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

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

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

    Деплой: как встроить LLM в приложение

    Внедрение обычно сводится к одному из паттернов.

    Паттерны интеграции

  • Синхронный API: запрос пользователя ждёт ответа модели.
  • Асинхронная очередь: запрос ставится в очередь, результат приходит позже.
  • Batch-обработка: пакетная обработка документов или задач по расписанию.
  • Стриминг: вы отдаёте ответ частями по мере генерации, чтобы снизить ощущение задержки.
  • !Схема показывает типовую архитектуру внедрения LLM

    Минимальный каркас сервиса

    Один из популярных вариантов для Python это FastAPI.

  • FastAPI
  • Пример “скелета” сервиса:

    Практические инженерные меры, которые почти всегда нужны:

  • таймауты и ретраи для внешних вызовов;
  • кэширование частых запросов;
  • лимиты частоты запросов;
  • деградация сервиса при перегрузке;
  • раздельные окружения dev и prod.
  • Для упаковки и развёртывания часто используют:

  • Docker
  • Kubernetes
  • MLOps-основы для LLM: что версионировать, как мониторить, как обновлять

    Классический MLOps “модель + данные” в LLM-проектах становится “модель + промпты + контекст + инструменты + политика безопасности”.

    Что стоит версионировать

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

  • MLflow для трекинга экспериментов и артефактов
  • DVC для версионирования данных и пайплайнов
  • CI/CD для LLM-сервиса

    Минимальная схема обновлений:

  • Изменили промпт, модель или RAG-настройки.
  • Прогнали автоматические тесты формата и базовые проверки безопасности.
  • Прогнали оценку на эталонном наборе запросов.
  • Задеплоили в staging.
  • Провели ограниченный rollout или A/B-тест.
  • Включили в прод.
  • Мониторинг в продакшене

    Кроме классических метрик сервиса важно мониторить:

  • латентность и ошибки API;
  • стоимость и токены;
  • долю ответов, не прошедших валидацию;
  • изменение распределения запросов;
  • обратную связь пользователей.
  • Инструменты наблюдаемости:

  • Prometheus
  • Grafana
  • OpenTelemetry
  • “Петля улучшения” как в обычном ML

    Принцип из прошлых тем сохраняется:

  • собирайте ошибки;
  • группируйте по типам;
  • улучшайте либо данные и контекст, либо промпт и формат, либо защитные правила;
  • подтверждайте улучшение на фиксированном наборе оценочных примеров.
  • Итоговый чек-лист перед запуском LLM-функции в продукт

  • зафиксирована постановка задачи и критерии качества;
  • выбран способ запуска: облако или свой хостинг;
  • промпт требует строгий формат и ограничивает фантазирование там, где это критично;
  • если нужны знания, реализован RAG и проверки “ответ из источников”;
  • есть набор тестовых запросов и процедура оценки;
  • предусмотрены защита от prompt injection и ограничения инструментов;
  • деплой включает таймауты, ретраи, лимиты и логирование;
  • настроены мониторинг, версии промптов и процесс безопасных обновлений.