Доброго времени суток, «Хабр»!
Представьте, что вы играете в дартс. Сначала ваши дротики разлетаются по всей мишени, но с каждой попыткой вы постепенно приближаетесь к заветному центру. Человек интуитивно понимает, что нужно скорректировать бросок: сильнее, выше, левее или правее. Примерно так же работает и алгоритм машинного обучения. Только вместо интуиции там есть функция потерь.
Сегодня поговорим об этой функции, попробуем в ней разобраться и понять, как же алгоритм понимает, что он ошибся. Принимайте стратегически удобное положение, ну а я приступаю к своему повествованию.
Функция потерь - математическое выражение, количественно оценивающее, насколько предсказания модели отклоняются от фактических значений. Фактически это метрика, позволяющая алгоритму понять, насколько велика ошибка и в каком направлении нужно скорректировать параметры.
Основной принцип машинного обучения состоит в минимизации функции потерь посредством процесса оптимизации. Чем меньше становится значение функции потерь, тем лучше работает модель - ее прогнозы приближаются к реальным данным.
Говоря проще, функция потерь подобна чувству вины нейросети. Сделала прогноз, сравнила с действительностью и заметила расхождение. Функция потерь переводит это различие в штраф. Если штраф велик, сеть резко перестраивает настройки, если мал - слегка подстраивает.
Математически функцию потерь можно представить как:
Где L - функция потерь, y - фактическое значение, y* - предсказанное моделью значение, а f - конкретная реализация функции потерь.
Существует несколько ключевых характеристик качественной функции потерь. Первая - дифференцируемость. Она позволяет вычислять градиенты, что критически важно для работы методов градиентного спуска.
Вторая - выпуклость. Наличие единственного глобального минимума обеспечивает сходимость алгоритмов оптимизации.
Третья - робастность, иначе говоря, устойчивость к выбросам. Это свойство помогает работе с зашумленными данными.
Четвертая характеристика - вычислительная эффективность. Скорость расчетов значительно влияет на общее время обучения модели.
Функции потерь - не просто способ оценки точности. Они определяют форму поверхности оптимизации, по которой движется алгоритм поиска наилучших параметров. Эта форма отражает способность модели успешно обучаться.
В контексте глубокого обучения функция потерь определяет, каким образом информация о качестве предсказаний распространяется через слой нейронной сети в процессе обратного распространения ошибки.
Хотите попробовать какую-то модель? Воспользуйтесь агрегатором нейросетей BotHub. Список нейросетей там обширен - от работы с текстом до транскрибации и генерации видео. По специальной ссылке для регистрации можно получить 100 000 капсов для собственных экспериментов.
Почти все можно разбить на категории, опираясь на то, для чего это нужно. Так и с функциями потерь. Их делят на категории в зависимости от типа решаемой задачи и характеристик данных.
В этом разделе, функции потерь оценивают отклонение предсказанных значений от фактических в задачах, где требуется предсказать непрерывную величину.
Mean Squared Error (MSE) - среднеквадратичная ошибка. Наиболее распространенный вариант для регрессии. Математический вид:
Благодаря возведению в квадрат метрика всегда имеет положительное значение. Кроме того, если в данных есть ошибка, то при использовании такого подхода они будут более заметными при анализе.
Mean Absolute Error (MAE) - средняя абсолютная ошибка, менее чувствительна к выбросам, чем MSE.
MAE не учитывает масштаб (насколько велико полученное отклонение) и направление ошибок (положительное или отрицательное отклонение от реальных значений). Получается, что в зависимости от контекста, одно и то же полученное значение может быть как хорошим, так и плохим результатом.
Huber Loss - гибридная функция, сочетающая свойства MSE и MAE, устойчивая к выбросам.
Где δ - параметр порога, который определяет точку, где функция переходит от квадратичной к линейной.
Log-Cosh Loss - логарифм гиперболического косинуса ошибки, дифференцируемая альтернатива MAE.
Хорошо работает с различными оптимизационными алгоритмами. Однако есть и ограничения: для очень больших прогнозов, не соответствующих истинным значениям, градиент и гессиан функции потерь могут быть постоянными, что может вызвать проблемы в некоторых алгоритмах.
В этой категории, функции потерь измеряют насколько хорошо модель предсказывает вероятность принадлежности к классам.
Binary Cross-Entropy (BCE) используется для бинарной классификации. Измеряет разницу между прогнозируемыми вероятностями и фактическими двоичными метками.
Функция чувствительна к несбалансированным данным. В случаях, когда один класс сильно доминирует в наборе данных, потеря может быть искажена, и модель может иметь смещение к большинству класса.
Кроме того, заметно достаточно сильное влияние выбросов. Экстремальные предсказанные вероятности (близкие к 0 или 1) могут привести к высоким значениям потерь, что может вызывать проблемы с сходимостью во время обучения.
Categorical Cross-Entropy - многоклассовая классификация.
Логарифмические операции иногда могут приводить к числовой нестабильности. Кроме того, фактические метки должны быть закодированы в one-hot, что может увеличить использование памяти. Так же функция может быть чувствительной к несбалансированным наборам данных, где количество образцов в каждом классе не равно.
Focal Loss - модификация CCE для несбалансированных данных. В отличие от традиционных функций потерь, которые обрабатывают все примеры одинаково, тут вводится динамический механизм, который приоритезирует сложные примеры.
для y = 1
для y = 0
Где a - модулирующий фактор для обработки дисбаланса, а Y - дополнительный параметр, который контролирует, как обрабатываются легкие примеры.
Hinge Loss - применяется в SVM (метод опорных векторов) для максимизации разделяющей границы.
Функция подходит только для бинарной классификации - не может напрямую обрабатывать многоклассовую классификацию без модификаций. Кроме того, она чувствительна к несбалансированным данным и не предоставляет вероятностные выходы.
Отдельная категория направленная на решение конкретных задач.
Triplet Loss - используется в задачах метрического обучения и распознавания лиц.
Функция минимизирует расстояние между якорной и позитивной точками, а максимизирует - между якорной и отрицательной. Это помогает эффективнее различать похожие и непохожие примеры.
Contrastive Loss - контрастивная функция. Используется для обучения эмбеддингов (перевода объектов в векторы схожести) таким образом, чтобы схожие объекты имели близкие векторы в латентном пространстве, а различающиеся - находились далеко друг от друга.
Функция требует тщательно подобранных позитивных и негативных пар, высоких вычислительных затрат при больших датасетах. Кроме того, она чувствительна к гиперпараметрам.
Dice Loss - специализированная функция потерь, разработанная для задач сегментации изображений. Она измеряет перекрытие между предсказанными и фактическими масками сегментации.
Connectionist Temporal Classification (CTC) - алгоритм для обучения в задачах, где длина входной и выходной последовательностей отличается, а точное соответствие между ними часто неизвестно. Чаще всего используется в распознавании речи и рукописного текста.
Недостатком является то, что модель может выдавать слова, которые звучат правильно, но не написаны правильно, так как учитывает только отдельные символы, а не целые слова.
Сейчас наблюдается тенденция к использованию составных функций потерь, объединяющих несколько метрик для достижения оптимального баланса между различными аспектами модели. Комбинированные функции позволяют нивелировать недостатки отдельных компонентов и учесть множество факторов в процессе оптимизации.
Пожалуй, ключевой этап проектирования ML-систем - выбор оптимальной функции потерь. Условно процесс выбора можно разбить на критерии.
Для регрессии используют MSE, MAE, Huber Loss.
Для бинарной классификации - BCE.
Для многоклассовой классификации - Categorical Cross-Entropy.
Для генеративных моделей: Wasserstein Loss, KL-Divergence.
Наличие выбросов требует робастных функций (MAE, Huber). Несбалансированные классы лучше обрабатываются через Focal Loss или взвешенные версии стандартных функций. Для зашумленных данных лучше использовать сглаживающие функции.
О математических свойствах тоже не стоит забывать. Например, дифференцируемость критична для градиентных методов оптимизации. Выпуклость обеспечивает наличие единственного глобального минимума, а масштабируемость позволяет эффективно обрабатывать большие объемы данных.
Функции потерь следует выбирать исходя из предметной области. Некоторые виды дают более понятные для конкретной сферы результаты.
Критерий особенно важный для больших моделей и объемов данных. Некоторые функции потерь требуют больше вычислительных ресурсов, а также будут замедлять само обучение.
Взаимосвязь с метриками оценки моделей также является важным критерием. Оптимально когда функция потерь хорошо соотносится с бизнес-метриками, определяющими успех модели.
В современной практике часто используется адаптивный подход, когда функция потерь изменяется в процессе обучения. Например, постепенно увеличивается вес сложных параметров или корректируются параметры в зависимости от текущего состояния обучения.
Основной результат, который дает функция потерь - оценка того, насколько хорошо классификатор работает на обучающей выборке. Однако мы помним, что главная цель машинного обучения - заставить алгоритм правильно работать на тестовой выборке. Поэтому хорошо справляющийся с обучающими данными метод может совершенно не работать на новых объектах. Это явление и называется переобучением.
Представим, что датасет состоит из некоторых точек. Если мы заставим алгоритм идеально подстраиваться под каждую из точек с нулевыми потерями, то график классификации превратится в извилистую кривую.
Это будет плохим результатом, потому что нам важна точность на тестовой выборке, а не на обучающей. Если мы проверим работу уже на новых данных, то имеющаяся кривая станет абсолютно неправильной. Т.е. нам нужно найти какую-то прямую линию, которая примерно соответствовала бы и тем, и другим данным.
В этом заключается фундаментальная проблема машинного обучения. Для ее решения обычно применяют различные методы регуляризации.
Функции потерь - важная вещь в машинном обучении, которая направляет модели к оптимальным решениям. Такой подход может радикально улучшить результаты без изменения архитектуры модели.
Универсальной функции потерь не существует - каждая задача требует индивидуальный подход. Порой в экспериментах, комбинациях и адаптациях функций появляются инновационные решения, позволяющие моделям превзойти стандартные ограничения и достичь нового уровня производительности.
Спасибо за прочтение!
Источник


