Основы машинного обучения: от теории к практике

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

1. Введение в машинное обучение: основные понятия, типы задач и обучение с учителем

Введение в машинное обучение: основные понятия, типы задач и обучение с учителем

Добро пожаловать на курс «Основы машинного обучения: от теории к практике». Мы начинаем наше путешествие с фундаментальных основ. Сегодня машинное обучение (Machine Learning, ML) окружает нас повсюду: от рекомендаций фильмов на стриминговых сервисах до голосовых помощников в наших смартфонах. Но что именно скрывается за этим термином и как магия превращается в математику?

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

Что такое машинное обучение?

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

Отличие от традиционного программирования

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

В традиционном программировании человек (разработчик) пишет правила. У нас есть входные данные и алгоритм обработки, который выдает ответ.

> Если температура больше 30 градусов, включить кондиционер.

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

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

Основные понятия и терминология

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

  • Датасет (Dataset) — набор данных, на котором мы обучаем модель. Это наша таблица с информацией о квартирах.
  • Объект (Sample/Instance) — одна строка в этой таблице (одна конкретная квартира).
  • Признаки (Features) — характеристики объекта. Например: площадь, этаж, район, год постройки. В математической нотации их обычно обозначают вектором .
  • Целевая переменная (Target) — то, что мы хотим предсказать. В нашем случае — цена. Обозначается как .
  • Модель (Model) — алгоритм или математическая формула, которая принимает на вход признаки и выдает предсказание.
  • Математически задачу машинного обучения можно записать как поиск функции , которая наилучшим образом приближает зависимость:

    Где — целевая переменная (ответ), — входные данные (признаки), а — функция (модель), которую мы пытаемся найти.

    Типы задач машинного обучения

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

    !Классификация основных типов машинного обучения

    1. Обучение с учителем (Supervised Learning)

    Это самый распространенный тип задач. У нас есть «учитель», который знает правильные ответы. Датасет состоит из пар «вопрос — правильный ответ» (признаки и цель ). Задача модели — научиться предсказывать для новых .

    Примеры: Определение спама в почте, диагностика заболеваний по снимкам, предсказание цен акций.

    2. Обучение без учителя (Unsupervised Learning)

    Здесь учителя нет. У нас есть только входные данные , но нет правильных ответов . Модель предоставлена сама себе и должна найти скрытую структуру в данных.

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

    3. Обучение с подкреплением (Reinforcement Learning)

    В этом сценарии действует «агент», который взаимодействует со «средой». Агент совершает действия и получает обратную связь в виде награды или штрафа. Его цель — максимизировать суммарную награду.

    Примеры: Обучение робота ходьбе, игра в шахматы или Go, управление беспилотным автомобилем.

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

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

    Задача регрессии (Regression)

    Задача регрессии возникает, когда целевая переменная является числом (непрерывной величиной). Мы хотим ответить на вопрос «Сколько?».

    Примеры: * Прогноз температуры на завтра (25.5°C). * Предсказание выручки магазина (1 000 000 руб). * Оценка времени прибытия такси (12 минут).

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

    Где: * — предсказанная цена. * — площадь квартиры (признак). * — вес (weight), показывающий, насколько сильно площадь влияет на цену. * — смещение (bias), базовая цена, не зависящая от площади.

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

    Задача классификации (Classification)

    Задача классификации возникает, когда целевая переменная является категорией (дискретной величиной). Мы хотим ответить на вопрос «Какой класс?» или «Да/Нет?».

    Примеры: * Является ли письмо спамом? (Да/Нет — бинарная классификация). * Какая цифра изображена на картинке? (0, 1, ..., 9 — многоклассовая классификация). * Болен ли пациент? (Здоров/Болен).

    В классификации модель строит разделяющую границу между классами.

    !Визуальное различие задач регрессии и классификации

    Как происходит процесс обучения?

    Мы сказали, что модель «подбирает» параметры. Но как она понимает, что подобрала их хорошо? Для этого используется функция потерь (Loss Function).

    Функция потерь — это способ измерить, насколько сильно модель ошибается. Чем меньше значение функции потерь, тем лучше модель.

    Для задачи регрессии часто используют среднеквадратичную ошибку (MSE — Mean Squared Error):

    Где: * — значение ошибки. * — количество примеров в датасете. * — знак суммы (мы суммируем ошибку по всем примерам). * — правильный ответ для -го примера (реальность). * — предсказание модели для -го примера.

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

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

  • Модель делает предсказание со случайными параметрами.
  • Мы считаем ошибку с помощью функции потерь.
  • Специальный алгоритм (оптимизатор) немного меняет параметры модели (например, и ), чтобы уменьшить ошибку.
  • Шаги 1-3 повторяются много раз, пока ошибка не станет приемлемо низкой.
  • Заключение

    Сегодня мы заложили фундамент. Мы узнали, что машинное обучение — это поиск закономерностей в данных, а не написание жестких правил. Мы выяснили, что задачи делятся на обучение с учителем (есть правильные ответы), без учителя (нет ответов) и с подкреплением (есть награда).

    В рамках обучения с учителем мы выделили два главных направления: * Регрессия — предсказываем число. * Классификация — предсказываем категорию.

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

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

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

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

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

    > Garbage In, Garbage Out (Мусор на входе — мусор на выходе).

    Это означает, что качество ваших данных гораздо важнее, чем сложность выбранного алгоритма. В этой статье мы пройдем путь от «сырого» датасета до набора данных, готового к обучению модели. Этот процесс называется предобработкой данных (Data Preprocessing).

    !Процесс превращения сырых данных в топливо для модели машинного обучения

    1. Очистка данных (Data Cleaning)

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

    Пропущенные значения (Missing Values)

    Представьте, что мы анализируем анкеты клиентов банка. В графе «Ежемесячный доход» у некоторых людей пустота. Это и есть пропущенные значения (в Python они часто обозначаются как NaN — Not a Number).

    Большинство математических алгоритмов не умеют работать с пустотой. У нас есть три пути решения:

  • Удаление. Если строк с пропусками очень мало (например, 1% от всего датасета), мы можем просто удалить эти строки. Это самый простой, но не всегда лучший метод, так как мы теряем данные.
  • Заполнение константой. Мы можем заменить все пропуски на 0 или «Неизвестно». Это подходит, если пропуск имеет смысл (например, отсутствие информации о гараже в описании дома скорее всего означает, что гаража нет).
  • Заполнение средним или медианой. Это самый популярный метод для числовых данных. Мы считаем среднее значение по столбцу и вписываем его вместо пропусков.
  • Дубликаты

    Иногда из-за сбоев в базе данных одна и та же запись может дублироваться. Если мы не удалим дубликаты, модель может «переоценить» важность этих примеров, просто потому что видит их чаще.

    Выбросы (Outliers)

    Выбросы — это значения, которые аномально отличаются от большинства других. Например, в столбце «Возраст» мы видим значение 250 или -5. Очевидно, это ошибка ввода. Такие значения нужно либо удалять, либо заменять на граничные разумные значения, иначе они сильно исказят обучение модели (особенно линейных моделей).

    2. Работа с категориальными признаками

    Компьютеры понимают только числа. Если в вашем датасете есть столбец «Цвет машины» со значениями «Красный», «Зеленый», «Синий», модель не сможет обработать этот текст напрямую. Нам нужно закодировать эти категории в числа.

    Label Encoding (Порядковое кодирование)

    Каждой уникальной категории присваивается число. Например: * Низкий 0 * Средний 1 * Высокий 2

    Этот метод хорош, когда в категориях есть естественный порядок (как в размерах одежды S, M, L). Но если мы применим его к цветам (Красный=1, Синий=2), модель может решить, что Синий «больше» или «лучше» Красного, что математически неверно.

    One-Hot Encoding (Горячее кодирование)

    Для категорий без порядка (города, марки машин, цвета) используют One-Hot Encoding. Мы создаем новый столбец для каждого уникального значения.

    Представьте столбец «Фрукт»:

    | Фрукт | | --- | | Яблоко | | Банан | | Яблоко |

    После One-Hot Encoding это превратится в:

    | Фрукт_Яблоко | Фрукт_Банан | | --- | --- | | 1 | 0 | | 0 | 1 | | 1 | 0 |

    Теперь у нас только единицы и нули, и никакой ложной иерархии.

    !Визуальное сравнение двух методов кодирования категориальных данных

    3. Масштабирование признаков (Feature Scaling)

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

  • Площадь (от 20 до 200 кв.м).
  • Количество комнат (от 1 до 5).
  • Диапазон значений площади в десятки раз больше диапазона комнат. Для многих алгоритмов (например, для тех, которые используют градиентный спуск или измеряют расстояния) это проблема: признак с большими числами будет автоматически считаться более важным, «забивая» признак с маленькими числами.

    Чтобы этого избежать, мы приводим все признаки к одному масштабу. Существует два основных способа.

    Нормализация (Min-Max Scaling)

    Мы сжимаем все значения так, чтобы они попали в диапазон от 0 до 1. Формула выглядит так:

    Где: * — новое, нормализованное значение. * — исходное значение. * — минимальное значение в этом столбце. * — максимальное значение в этом столбце.

    Этот метод хорош, когда мы точно знаем границы данных, но он чувствителен к выбросам.

    Стандартизация (Z-score Normalization)

    Этот метод делает так, чтобы среднее значение признака стало равно 0, а стандартное отклонение — 1. Данные центрируются вокруг нуля.

    Где: * — новое стандартизированное значение. * — исходное значение. * (мю) — среднее арифметическое значение столбца. * (сигма) — стандартное отклонение (показатель того, насколько сильно данные разбросаны от среднего).

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

    4. Конструирование признаков (Feature Engineering)

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

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

    Примеры:

  • Недвижимость: У вас есть «Общая цена» и «Площадь». Вы можете создать новый признак «Цена за квадратный метр», который может быть гораздо информативнее для модели.
  • Даты: Компьютер плохо понимает дату «2023-10-05». Но мы можем извлечь из нее новые признаки: «День недели» (будний или выходной?), «Месяц» (сезонность?), «Год».
  • Текст: Из текста отзыва можно извлечь признак «Длина отзыва» или «Количество восклицательных знаков».
  • 5. Разбиение данных (Train/Test Split)

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

  • Обучающая выборка (Training set): Обычно 70-80% данных. На этих примерах модель учится, подбирает веса и находит закономерности.
  • Тестовая выборка (Test set): Оставшиеся 20-30% данных. Эти данные мы прячем от модели во время обучения. Мы показываем их только в самом конце, чтобы проверить, как хорошо модель работает на новых, незнакомых ей данных.
  • Зачем это нужно? Чтобы избежать переобучения (overfitting). Это ситуация, когда модель просто «зазубрила» обучающие примеры, но не поняла общей логики. Это как студент, который выучил ответы на билеты прошлого года, но провалился на экзамене, потому что вопросы немного изменились.

    Заключение

    Подготовка данных — это фундамент машинного обучения. Мы прошли путь из пяти шагов:

  • Очистка: убрали пропуски и дубликаты.
  • Кодирование: превратили текст в цифры (One-Hot, Label).
  • Масштабирование: привели числа к одному диапазону (Нормализация, Стандартизация).
  • Инжиниринг: создали новые умные признаки.
  • Разбиение: отложили часть данных для честного экзамена.
  • Теперь, когда у нас есть качественные данные, мы готовы к самому интересному — выбору и обучению модели. Об этом мы поговорим в следующей статье.

    3. Классические алгоритмы: линейные модели, деревья решений и методы кластеризации

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

    В предыдущих статьях мы разобрали фундамент машинного обучения: что это такое, какие бывают типы задач и как подготовить данные, чтобы не получить «мусор» на выходе. Теперь, когда наши данные очищены, нормализованы и ждут своего часа, настало время выбрать инструмент для работы. Этот инструмент — алгоритм.

    Сегодня мы рассмотрим «золотую классику» машинного обучения. Несмотря на хайп вокруг нейросетей, именно эти алгоритмы решают 70-80% реальных бизнес-задач. Они интерпретируемы, быстры и часто требуют меньше данных, чем глубокое обучение.

    Мы разделим наше погружение на три части:

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

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

    Линейная регрессия (Linear Regression)

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

    !Визуализация принципа работы линейной регрессии: поиск линии, минимизирующей ошибки.

    Математически модель выглядит так:

    Где: * — предсказываемое значение (например, цена). * — смещение (bias), базовое значение , когда все признаки равны нулю. * — веса модели (коэффициенты), показывающие важность каждого признака. * — значения признаков (площадь, этаж и т.д.).

    Как интерпретировать веса? Если вес при признаке «Площадь» () положительный и большой, значит, с ростом площади цена сильно растет. Если вес отрицательный (например, при признаке «Расстояние до метро»), значит, с увеличением этого признака цена падает.

    Логистическая регрессия (Logistic Regression)

    Пусть вас не обманывает название. Логистическая регрессия — это алгоритм классификации, а не регрессии. Она используется, когда нам нужно предсказать вероятность принадлежности к классу (например, «Спам» или «Не спам»).

    Если мы используем обычную линейную регрессию для классификации, она может выдать значения вроде 1.5 или -0.2, что не имеет смысла для вероятности (которая должна быть от 0 до 1). Чтобы «сплющить» выход линейной модели в диапазон [0, 1], используется сигмоида.

    Формула логистической регрессии:

    Где: * — вероятность того, что объект принадлежит к классу 1. * — сигмоидная функция. * — число Эйлера (основание натурального логарифма, примерно 2.718). * — результат линейного уравнения ().

    !Сигмоида трансформирует любое число в вероятность от 0 до 1.

    Если полученная вероятность больше 0.5, мы говорим, что это класс 1. Если меньше — класс 0. Эта граница называется Decision Boundary (разделяющая поверхность).

    Деревья решений (Decision Trees)

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

    Представьте, что вы решаете, брать ли зонт:

  • Идет ли дождь? (Да Брать).
  • Если нет, то пасмурно ли? (Нет Не брать).
  • Если пасмурно, то сильный ли ветер?...
  • Структура дерева

    Дерево состоит из трех элементов: * Корневой узел (Root Node): Самый верхний вопрос, с которого начинается деление. * Внутренние узлы (Internal Nodes): Промежуточные вопросы. * Листья (Leaves): Конечные узлы, где мы даем ответ (прогноз).

    !Пример структуры дерева решений для задачи классификации.

    Как дерево строится?

    Главный вопрос: как алгоритм выбирает, какой вопрос задать первым? Почему сначала «Доход», а не «Возраст»?

    Алгоритм перебирает все возможные признаки и ищет тот, который лучше всего разделяет данные на «чистые» группы. Для оценки «чистоты» используются метрики, такие как Энтропия или Неопределенность Джини.

    Идея проста: если после разделения по признаку «Возраст» в одной группе оказались только те, кто вернул кредит, а в другой — только должники, то это идеальное разделение. Энтропия (хаос) стала равна нулю.

    Плюсы и минусы деревьев

    Плюсы: * Интерпретируемость: Вы всегда можете посмотреть на дерево и понять, почему модель приняла такое решение. * Работа с разными данными: Деревьям не так важно масштабирование данных (нормализация), они «едят» и числа, и категории.

    Минусы: * Склонность к переобучению: Дерево может построить очень сложную структуру, запомнив каждый отдельный пример из обучающей выборки, но провалиться на новых данных. Чтобы этого избежать, ограничивают глубину дерева (max_depth).

    Методы кластеризации: поиск структуры в хаосе

    До сих пор мы говорили об обучении с учителем (у нас были правильные ответы ). Но что, если ответов нет? Мы переходим к обучению без учителя (Unsupervised Learning). Самая популярная задача здесь — кластеризация.

    Задача кластеризации — разбить объекты на группы (кластеры) так, чтобы внутри группы объекты были похожи друг на друга, а объекты из разных групп — отличались.

    Алгоритм K-Means (К-средних)

    Это самый простой и популярный алгоритм кластеризации. Его логика работы интуитивно понятна.

    Допустим, мы хотим найти 3 кластера в данных.

  • Инициализация: Выбираем 3 случайные точки в пространстве данных и называем их центроидами (центрами кластеров).
  • Присвоение: Для каждой точки данных считаем расстояние до всех трех центроидов. Присваиваем точку тому кластеру, чей центроид ближе.
  • Обновление: Пересчитываем положение центроидов. Новый центр кластера — это среднее арифметическое координат всех точек, попавших в этот кластер.
  • Повторение: Повторяем шаги 2 и 3, пока центроиды не перестанут двигаться.
  • Формула для обновления центроида:

    Где: * — новые координаты центра кластера . * — количество точек в кластере . * — сумма координат всех точек , принадлежащих кластеру .

    !Итеративный процесс работы алгоритма K-Means.

    Проблема K-Means: Вам нужно заранее знать количество кластеров (). Если вы укажете , алгоритм найдет 3 группы, даже если в данных их реально 5 или 2. Для подбора оптимального используют «Метод локтя» (Elbow Method), анализируя, как падает ошибка с увеличением числа кластеров.

    Сравнение подходов

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

    | Алгоритм | Тип обучения | Тип задачи | Главное преимущество | Главный недостаток | | :--- | :--- | :--- | :--- | :--- | | Линейная регрессия | С учителем | Регрессия | Простота, интерпретируемость | Плохо работает с нелинейными данными | | Логистическая регрессия | С учителем | Классификация | Выдает вероятность, надежна | Граница решений только линейная | | Дерево решений | С учителем | Класс. / Регр. | Понимает сложные нелинейные связи | Легко переобучается | | K-Means | Без учителя | Кластеризация | Быстрый, простой | Нужно заранее знать число кластеров |

    Заключение

    Мы рассмотрели три кита классического машинного обучения.

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

    В следующей статье мы поговорим о том, как оценивать качество этих моделей. Ведь мало просто обучить алгоритм — нужно понять, можно ли ему доверять в реальном бою. Мы разберем такие метрики как Accuracy, Precision, Recall и ROC-AUC.

    4. Введение в глубокое обучение: принципы работы искусственных нейронных сетей

    Введение в глубокое обучение: принципы работы искусственных нейронных сетей

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

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

    От биологии к математике: Искусственный нейрон

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

    В середине XX века ученые Уоррен Маккалох и Уолтер Питтс предложили математическую модель этого процесса, которую назвали перцептроном (или искусственным нейроном). Это фундаментальный строительный блок любой нейросети.

    !Структура искусственного нейрона: входы, веса, сумматор и функция активации.

    Как работает один нейрон?

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

  • Взвешенная сумма. Нейрон получает входные данные (признаки), умножает их на соответствующие веса (важность признака) и складывает их. Также добавляется смещение (bias).
  • Функция активации. Полученная сумма проходит через специальную функцию, которая решает, насколько «активен» этот нейрон.
  • Выход. Результат передается следующему нейрону или является итоговым ответом.
  • Математически это записывается так:

    Где: * — промежуточный результат (взвешенная сумма) до применения функции активации. * — количество входов (признаков). * — вес -го входа (число, показывающее, насколько важен этот сигнал). * — значение -го входа. * — смещение (bias), позволяющее сдвигать функцию активации влево или вправо.

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

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

    Зачем нужна функция активации?

    Это критически важный момент. Если бы мы просто складывали и умножали числа (как в формуле ), то, сколько бы слоев нейронов мы ни нагородили друг на друга, вся эта конструкция осталась бы эквивалентна одной большой линейной регрессии.

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

    Самые популярные функции активации:

  • Сигмоида (Sigmoid): Превращает любое число в диапазон от 0 до 1. Исторически использовалась часто, сейчас реже.
  • ReLU (Rectified Linear Unit): Самая популярная функция в современном глубоком обучении. Она работает очень просто: если число отрицательное, она превращает его в 0, если положительное — оставляет как есть.
  • Формула ReLU:

    Где: * — значение функции ReLU. * — операция выбора максимального из двух значений. * — входное число.

    Архитектура нейронной сети: Многослойный перцептрон

    Один нейрон может решать только очень простые задачи. Магия начинается, когда мы объединяем их в сеть. Классическая полносвязная нейронная сеть (Multilayer Perceptron, MLP) состоит из слоев:

  • Входной слой (Input Layer): Принимает исходные данные (например, пиксели картинки). Количество нейронов равно количеству признаков.
  • Скрытые слои (Hidden Layers): Находятся между входом и выходом. Именно здесь происходит «глубокое» обучение. Чем больше скрытых слоев, тем «глубже» сеть.
  • Выходной слой (Output Layer): Выдает финальный результат (например, вероятность того, что на фото кошка).
  • !Архитектура полносвязной нейронной сети с двумя скрытыми слоями.

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

    Как сеть обучается? (Магия Backpropagation)

    Самый частый вопрос: «Откуда сеть знает, какие веса нужно выставить?»

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

    Шаг 1: Прямое распространение (Forward Propagation)

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

    Шаг 2: Вычисление ошибки (Loss Calculation)

    Мы сравниваем предсказание сети с правильным ответом с помощью функции потерь (Loss Function), о которой мы говорили в статье про регрессию.

    Где: * — значение ошибки (Loss). * — правильный ответ. * — предсказание нейросети.

    Шаг 3: Обратное распространение ошибки (Backpropagation)

    Это сердце глубокого обучения. Мы должны понять, кто виноват в ошибке и насколько.

    Алгоритм идет от выхода к входу (справа налево) и вычисляет градиент — направление, в котором нужно изменить каждый вес , чтобы ошибка уменьшилась. Если вес сильно повлиял на ошибку, мы меняем его сильно. Если почти не повлиял — трогаем чуть-чуть.

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

    Где: * — новое, обновленное значение веса. * — текущее значение веса. * (альфа) — скорость обучения (learning rate). Коэффициент, определяющий, насколько большие шаги мы делаем. * — частная производная ошибки по весу (градиент). Она показывает, как изменение веса влияет на ошибку.

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

    !Визуализация градиентного спуска: поиск минимума функции потерь.

    Глубокое обучение vs Классическое ML

    Почему же все говорят о Deep Learning, если есть простые алгоритмы?

  • Автоматическое выделение признаков. В классическом ML (например, линейной регрессии) мы должны сами придумать признаки: «площадь квартиры», «расстояние до метро». В Deep Learning мы можем подать «сырые» данные (пиксели картинки), и сеть сама научится выделять из них важные признаки (контуры, текстуры).
  • Масштабируемость. Классические алгоритмы выходят на «плато» — добавление новых данных перестает улучшать качество. Нейросети же «жадные»: чем больше данных вы им скормите, тем умнее они станут.
  • Универсальность. Одна и та же архитектура может быть адаптирована для поиска рака на рентгеновских снимках и для перевода текстов.
  • Однако за эту мощь приходится платить: нейросети требуют огромных вычислительных мощностей (видеокарты GPU) и очень много размеченных данных.

    Заключение

    Сегодня мы заглянули под капот искусственного интеллекта. Мы узнали, что: * Нейросеть состоит из простых блоков — нейронов. * Функция активации (например, ReLU) добавляет необходимую нелинейность. * Обучение происходит методом обратного распространения ошибки: сеть делает прогноз, видит ошибку и подкручивает веса в обратном направлении.

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

    5. Оценка качества моделей, метрики эффективности и предотвращение переобучения

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

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

    Представьте, что вы обучили нейросеть предсказывать курс доллара. Она выдает прогноз: «Завтра курс будет 90 рублей». Хорошо это или плохо? А если вчера она предсказала 85, а курс был 86? Можно ли доверять этой модели свои деньги?

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

    Метрики в задачах регрессии

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

    MAE (Mean Absolute Error)

    Самая интуитивно понятная метрика — средняя абсолютная ошибка. Мы просто берем разницу между правильным ответом и предсказанием, отбрасываем знак (нам неважно, ошиблись мы в плюс или в минус) и усредняем.

    Где: * — средняя абсолютная ошибка. * — количество примеров в выборке. * — знак суммы (суммируем по всем примерам от 1 до ). * — модуль числа (абсолютное значение). * — правильное значение для -го примера. * — предсказанное моделью значение для -го примера.

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

    MSE (Mean Squared Error)

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

    Где: * — среднеквадратичная ошибка. * — количество примеров. * — правильное значение. * — предсказание модели.

    Зачем возводить в квадрат? Квадрат «наказывает» за большие ошибки сильнее, чем за маленькие. Ошибка в 10 единиц превратится в 100, а ошибка в 2 единицы — всего в 4. Если вам критично не допускать грубых промахов, используйте MSE.

    (Коэффициент детерминации)

    Метрики ошибок (MAE, MSE) трудно интерпретировать без контекста. Ошибка 5.0 — это много или мало? Если мы предсказываем температуру тела — это катастрофа, если расстояние до Луны — это идеально.

    Коэффициент показывает, какую долю разнообразия (дисперсии) данных объясняет наша модель. Его идеальное значение равно 1 (модель предсказывает идеально). Если , значит, модель работает так же, как если бы мы просто предсказывали среднее значение по больнице.

    Где: * — коэффициент детерминации. * — правильное значение. * — предсказание модели. * — среднее арифметическое всех правильных ответов.

    Метрики в задачах классификации

    В классификации (спам/не спам, болен/здоров) все интереснее. Самая очевидная метрика часто оказывается самой бесполезной.

    Ловушка Accuracy (Точность)

    Accuracy — это доля правильных ответов.

    Где: * — количество правильных предсказаний. * — общее количество примеров.

    Пример: Представьте, что мы ищем редкое заболевание, которое встречается у 1 человека из 100. Если наша модель будет всегда говорить «Здоров», ее Accuracy будет 99%! Цифра красивая, но модель абсолютно бесполезна, так как она пропустит всех больных.

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

    Матрица ошибок (Confusion Matrix)

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

  • True Positive (TP): Верно предсказали положительный класс (сказали «Болен», и человек правда болен).
  • True Negative (TN): Верно предсказали отрицательный класс (сказали «Здоров», и человек здоров).
  • False Positive (FP): Ложное срабатывание (сказали «Болен», а человек здоров). Ошибка 1-го рода.
  • False Negative (FN): Пропуск цели (сказали «Здоров», а человек болен). Ошибка 2-го рода.
  • !Визуальное представление четырех исходов классификации: истинно положительные, ложно отрицательные, ложно положительные и истинно отрицательные.

    Precision (Точность) и Recall (Полнота)

    Эти две метрики помогают балансировать между типами ошибок.

    Precision отвечает на вопрос: «Из всех, кого мы назвали больными, сколько реально больных?» (насколько мы доверяем срабатыванию).

    Где: * — истинно положительные срабатывания. * — ложно положительные срабатывания.

    Recall отвечает на вопрос: «Из всех реально больных, скольких мы нашли?» (не пропустили ли мы кого-то).

    Где: * — истинно положительные срабатывания. * — ложно отрицательные срабатывания (пропуски).

    > В медицине важнее высокий Recall (лучше перепроверить здорового, чем пропустить больного). В спам-фильтре важнее высокий Precision (лучше пропустить спам, чем отправить важное письмо в папку «Спам»).

    F1-Score

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

    Где: * — метрика F1-score. * — точность. * — полнота.

    Переобучение (Overfitting) и Недообучение (Underfitting)

    Главный враг любого Data Scientist'а — переобучение.

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

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

    !Сравнение недообученной, оптимальной и переобученной моделей на примере регрессии.

    Как обнаружить переобучение?

    Для этого мы и делили данные на Train (обучение) и Test (тест) в статье про подготовку данных.

    * Если ошибка на Train низкая, а на Test высокая Переобучение. * Если ошибка и на Train, и на Test высокая Недообучение. * Если ошибки примерно равны и низкие Хорошая модель.

    Кросс-валидация (Cross-Validation)

    Иногда простого разделения на Train/Test недостаточно. Вдруг нам просто повезло, и в тест попали самые легкие примеры? Чтобы получить более надежную оценку, используют кросс-валидацию (перекрестную проверку).

    Самый популярный метод — k-fold cross-validation:

  • Весь датасет делится на равных частей (фолдов), например, на 5 частей.
  • Мы обучаем модель 5 раз.
  • В 1-й раз: учим на частях 1-4, тестируем на 5-й.
  • Во 2-й раз: учим на частях 1,2,3,5, тестируем на 4-й.
  • И так далее, пока каждая часть не побывает в роли теста.
  • Итоговое качество — это среднее значение метрик по всем 5 прогонам.
  • !Принцип работы кросс-валидации: ротация тестовой выборки для более надежной оценки.

    Заключение

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

    * Используйте MSE, если боитесь больших ошибок в регрессии. * Не верьте Accuracy на несбалансированных данных, смотрите на F1-score. * Всегда сравнивайте качество на обучающей и тестовой выборках, чтобы не допустить переобучения. * Для надежности используйте кросс-валидацию.

    Теперь вы обладаете полным набором инструментов: от теории и данных до алгоритмов и методов их проверки. На этом наш вводный курс завершен. Вы готовы применять эти знания на практике!