Функция потерь: объяснение для новичков (как модели понимают, что ошибаются)
Это простое руководство по пониманию функций потерь в машинном обучении и того, как модели учатся на своих ошибках.
# Введение
Я знаю, что когда новички начинают изучать машинное обучение, поначалу всё кажется простым. Вы следуете руководству, в котором вас просят загрузить набор данных, обучить модель, и затем видите что-то подобное: loss = «mse» или criterion = nn.CrossEntropyLoss().
И вот так, в этом уроке начинаются рассуждения об уравнениях, градиентах, оптимизации и греческих буквах. Если вы когда-либо кивали головой, не понимая, что делает функция потерь, вы не одиноки. Функции потерь часто объясняют наоборот. Большинство уроков начинаются с формулы, когда следовало бы начать с идеи. Эта статья — часть моей серии для новичков, где я буду упрощать понимание материала. Итак, начнём.
# Что такое функция потерь?
Функция потерь — это способ, с помощью которого модель машинного обучения определяет степень своей ошибки. В этом, по сути, и заключается вся концепция. Модель делает предсказание. Функция потерь сравнивает это предсказание с правильным ответом. Затем она выдает модели число, которое говорит: «Вот насколько серьезной была ваша ошибка».
Высокий уровень потерь означает, что модель была очень ошибочной .
Низкий уровень потерь означает, что модель была близка к истине .
В процессе обучения модель постоянно корректируется, чтобы уменьшить значение функции потерь.
Так происходит обучение. Если вы играли в дартс, то всё очень похоже. Вы бросаете дротик. Чтобы улучшить свои результаты, вам нужна обратная связь. Вам нужно знать, был ли ваш дротик немного неточным, слишком далеко, слишком высоко или слишком далеко влево. Без этой обратной связи вы не сможете улучшить свои результаты. Таким образом, попадание в центр мишени — это, по сути, правильный ответ, а дротик — это предсказание. Вы измеряете расстояние между дротиком и центром мишени. Функция потерь измеряет, насколько далеко приземлился дротик. Это расстояние становится сигналом обратной связи для модели. Вот как это будет выглядеть, если вам удобнее визуализация.

Точно так же, как расстояние до центра имеет значение, бросок слишком близко — это не то же самое, что бросок далеко от центра. Аналогично, для моделей недостаточно просто знать, что ответ неверный. Модель должна знать, насколько сильно она ошиблась, чтобы улучшить свои результаты.
Теперь, когда мы понимаем, что такое функция потерь и зачем она нам нужна, давайте рассмотрим некоторые распространенные функции потерь, используемые в машинном обучении .
# Среднеквадратичная ошибка
Наиболее распространенной функцией потерь при прогнозировании числовых значений является среднеквадратичная ошибка (MSE). Она часто используется, когда модель прогнозирует такие числа, как цены на жилье, температуру или время доставки. Идея очень проста.
- Ошибка: Для каждого прогноза вычислите разницу между предположением и истинным значением.
- В квадрате: умножьте каждый зазор сам на себя.
- Среднее значение: усредните все квадраты этих промежутков.
На Python это можно написать так:
def mean_squared_error(predictions, actuals): squared_errors = [(p — a) ** 2 for p, a in zip(predictions, actuals)] return sum(squared_errors) / len(squared_errors)
Я понимаю, что вычисление ошибок и их усреднение по прогнозам интуитивно понятно, но разобраться, почему мы возводим их в квадрат, может быть непросто. Это делается по двум причинам:
- Возведение в квадрат делает каждую ошибку положительной. Ошибка +3 и ошибка -3 одинаково плохи, а возведение в квадрат превращает обе в 9, поэтому они перестают взаимно компенсироваться.
- Метод возведения в квадрат наказывает за крупные ошибки гораздо строже, чем за мелкие. Это полезно во многих случаях. Например, если вы прогнозируете цены на жилье, то ошибка в 1000 долларов вместо 200 000 долларов должна наказываться соответствующим образом.
# Средняя абсолютная ошибка
Еще одна распространенная функция потерь — средняя абсолютная ошибка (MAE). MAE также измеряет разницу между прогнозируемыми и фактическими значениями, но она не возводит ошибку в квадрат. Вместо этого она просто берет абсолютное значение .
Вот функция на Python для его написания:
def mean_absolute_error(predictions, actuals): absolute_errors = [abs(p — a) for p, a in zip(predictions, actuals)] return sum(absolute_errors) / len(absolute_errors)
Таким образом, он наказывает за серьезные ошибки, но не так сурово, как MSE.
- Ошибка в 10 единиц стоит 10, а ошибка в 20 единиц стоит 20.
- Если в ваших данных естественным образом присутствуют выбросы, и вы не хотите, чтобы ваша модель реагировала чрезмерно, MAE — хороший выбор.
Позвольте мне быстро показать график, сравнивающий кривые MSE и MAE.

# Функция потерь кросс-энтропии
До сих пор мы говорили о прогнозировании чисел. Но многие задачи машинного обучения связаны с прогнозированием категорий.
Это письмо — спам или нет?
Это изображение кошки, собаки или рыбы?
Является ли определенная транзакция мошеннической или нет?
Для задач классификации модели обычно выдают вероятности следующего вида:
Собака: 70% Кошка: 20% Рыба: 10%
Если на изображении действительно собака, это хороший прогноз. Но если это кошка, то модель должна быть оштрафована за присвоение более низкой вероятности правильному ответу.
Итак, интуитивно понятно следующее:
- Правильно и уверенно — минимальные потери
- Верно, но не уверен — средний убыток
- Неверно и самоуверенно — большие потери

Именно поэтому кросс-энтропия так широко используется для классификации. Она учитывает не только правильность модели, но и степень уверенности модели в её достоверности.
# Потери против точности
Теперь, когда мы рассмотрели различные функции потерь, я также хочу пояснить разницу между потерями и точностью. Это не одно и то же.
Показатель точности отражает количество верных прогнозов .
Но показатель потерь демонстрирует , насколько серьёзными были ошибки модели .
Если у вас есть две модели — Модель А и Модель Б — и обе дают 90 правильных прогнозов из 100, то их точность будет одинаковой. Но одна модель может быть очень уверена в правильных ответах и лишь немного ошибаться в неправильных, в то время как другая может быть едва верна во многих примерах и чрезвычайно уверена в своих прогнозах, когда ошибается.
В этом случае точность будет той же, но потери будут другими.
# Цикл обучения
Как только модель получит значение функции потерь, её можно улучшить. Цикл обучения выглядит следующим образом:
- Модель делает прогнозы.
- Функция потерь измеряет ошибки.
- Оптимизатор обновляет модель.
- Модель пытается снова.
- Будем надеяться, что потери со временем уменьшатся.
При обучении модели мы также строим график изменения функции потерь во времени. Вначале модель совершает много ошибок и плохо делает прогнозы, поэтому функция потерь высока. Но по мере обучения функция потерь уменьшается, и модель улучшает свои прогнозы.
Здоровая тренировочная кривая часто выглядит так:
Высокие потери в начале → резкое падение → постепенное выравнивание
как вы можете видеть на рисунке ниже.

Сглаживание кривой — это нормально. Это означает, что модель выучила простые закономерности и теперь делает меньшие улучшения. Но если ошибка обучения уменьшается, а ошибка валидации начинает расти, это может быть признаком переобучения — то есть модель может запоминать обучающие данные вместо того, чтобы изучать закономерности, которые можно обобщить.
# Заключительные мысли
Функция потерь — это показатель ошибок модели.
Это показывает модели, насколько неверны её прогнозы, и задаёт чёткую цель обучения: уменьшить это число.
Как только вы поймете функции потерь, многие другие идеи машинного обучения станут проще для понимания, включая градиентный спуск, обратное распространение ошибки, оптимизацию, переобучение и метрики оценки.
Не нужно начинать со сложных уравнений. Начните с идеи:
- Модель делает предположение.
- Функция потерь оценивает правильность предположения.
- Модель обновляется, чтобы снизить оценку.
В этом и заключается суть машинного обучения.
Потери — это то, по чему модель понимает, что она ошибается.
Тренировка помогает научиться реже ошибаться.
На этом мы завершаем эту статью. В нашей серии статей для новичков мы продолжим рассматривать интересные концепты.
Канвал Мехрин — инженер по машинному обучению и технический писатель, глубоко увлеченная наукой о данных и взаимодействием ИИ с медициной. Она является соавтором электронной книги «Максимизация производительности с помощью ChatGPT». Как стипендиат программы Google Generation Scholar 2022 для Азиатско-Тихоокеанского региона, она выступает за разнообразие и академическое превосходство. Она также является стипендиатом программы Teradata Diversity in Tech Scholar, стипендиатом Mitacs Globalink Research Scholar и стипендиатом Harvard WeCode Scholar. Канвал — убежденная сторонница перемен, основавшая FEMCodes для расширения прав и возможностей женщин в областях STEM (наука, технология, инженерия и математика).
Источник: www.kdnuggets.com
Оцените материал:
Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
