Как мне узнать, какова правильная функция потерь для моего алгоритма? Потому что, если я выберу неправильную функцию потерь, я получу неправильное решение.
В машинном обучении наша главная цель - минимизировать ошибку, определяемую функцией потерь. И у каждого типа алгоритма есть разные способы измерения ошибки. В этой статье я расскажу о некоторых основных функциях потерь, используемых в алгоритмах регрессии, и о том, почему они именно такие. Давай начнем.
Предположим, у нас есть 2 функции потерь. Обе функции будут иметь разные минимумы. Поэтому, если вы оптимизируете неправильную функцию потерь, вы придете к неправильному решению - которое является оптимальной точкой или оптимизированным значением весов в моей функции потерь. Или мы можем сказать, что решаем неправильную задачу оптимизации. Итак, нам нужно найти подходящую функцию потерь, которую мы будем минимизировать.
1. Сумма ошибок (SE):
Давайте начнем с рассмотрения самой простой функции потерь, которая представляет собой не что иное, как сумму ошибок на каждой итерации. Ошибка будет разницей в прогнозируемом и фактическом значениях. Таким образом, функция потерь будет представлена как:
где суммирование идет от n = 1 до N, где N - количество экземпляров в нашем наборе данных. Теперь рассмотрим следующую линию, соответствующую нашим трем точкам данных:
Конечно, вы можете сказать, что это не самая подходящая линия! Но в соответствии с этой функцией потерь эта линия является наиболее подходящей линией, поскольку ошибка почти равна 0. Для точки 3 ошибка отрицательная, поскольку прогнозируемое значение ниже. Тогда как для пункта 1 ошибка положительная и почти такой же величины. Для точки 2 это 0. Сложение всего этого приведет к общей ошибке 0! Но ошибка, безусловно, намного больше. Если ошибка равна 0, то алгоритм будет считать, что он сходимся, хотя на самом деле этого не произошло - и завершится преждевременно. Он показал бы очень меньшее значение ошибки, тогда как на самом деле значение было бы намного больше. Итак, как вы можете утверждать, что это неправильная линия? Вы действительно не можете. Вы просто выбрали неправильную функцию потерь.
2. Сумма абсолютных ошибок (SAE):
SE определенно не была той функцией потерь, которую мы хотели бы использовать. Так что давайте немного изменим его, чтобы преодолеть его недостаток. Давайте просто возьмем абсолютные значения ошибок для всех итераций. Это должно решить проблему .. верно? Или нет? Вот как будет выглядеть функция потерь:
Так что теперь ошибочные термины не отменяют друг друга, а фактически складываются. Итак, есть ли потенциальные проблемы с этой функцией? Ну да. Эта функция потерь не является дифференцируемой при 0. График функции потерь будет иметь следующий вид:
Производная не будет в 0. Нам нужно дифференцировать функцию и приравнять ее к 0, чтобы найти оптимальную точку. А здесь это невозможно. Мы не сможем найти решение.
3. Сумма квадратов ошибок (SSE):
Итак, возьмем квадраты вместо абсолютных величин. Теперь функция потерь станет следующей:
который очень дифференцируем во всех точках и дает неотрицательные ошибки. Но вы можете возразить, почему мы не можем перейти к более высоким порядкам, например, к четвертому порядку или около того. Тогда что, если мы рассмотрим функцию потерь 4-го порядка, которая будет выглядеть так:
Следовательно, его градиент исчезнет в 3 точках. Так что у него также будут локальные минимумы, что не является нашим оптимальным решением. Нам нужно найти точку в глобальном минимуме, чтобы найти оптимальное решение. Так что давайте остановимся на самих квадратах.
4. Среднеквадратичные ошибки (MSE):
Теперь представьте, что мы используем SSE в качестве функции потерь. Итак, если у нас есть набор данных, скажем, из 100 точек, наш SSE будет, скажем, 200. Если мы увеличим количество точек данных до 500, наш SSE увеличится, так как квадрат ошибок теперь составит 500 точек данных. Допустим, оно становится 800. Если мы снова увеличим количество точек данных, SSE увеличится еще больше. Справедливо? Точно нет!
Ошибка должна уменьшаться по мере того, как мы увеличиваем наши выборочные данные, поскольку распределение наших данных становится все более и более узким (относится к нормальному распределению). Чем больше у нас данных, тем меньше ошибок. Но в случае с SSE происходит полная противоположность. Вот, наконец, и наш воин - Mean Squared Error. Его выражение:
Мы берем среднее значение SSE. Чем больше данных, тем меньше будет агрегированная ошибка MSE.
Как видите, ошибка уменьшается по мере того, как наш алгоритм набирает все больше и больше опыта. Среднеквадратичная ошибка используется в качестве метрики по умолчанию для оценки производительности большинства алгоритмов регрессии, будь то R, Python или даже MATLAB.
5. Среднеквадратичная ошибка (RMSE):
Единственная проблема с MSE заключается в том, что порядок потери больше, чем порядок данных. Поскольку мои данные имеют порядок 1 и функцию потерь, MSE имеет порядок 2. Таким образом, мы не можем напрямую соотнести данные с ошибкой. Следовательно, мы берем корень MSE - среднеквадратичной ошибки:
Здесь мы не меняем функцию потерь, и решение остается прежним. Все, что мы сделали, это уменьшили порядок функции потерь, взяв корень.
6. Поражение Хубера:
Потеря Хубера сочетает в себе лучшие свойства MSE и MAE (средней абсолютной ошибки). Он квадратичен для меньших ошибок и линейен в противном случае (и аналогично для его градиента). Он определяется параметром delta:
Huber loss менее чувствителен или более устойчив к выбросам в данных, чем MSE. Его также можно дифференцировать при нулевом значении. По сути, это абсолютная ошибка, которая становится квадратичной, когда ошибка мала. Насколько мала эта ошибка, чтобы сделать ее квадратичной, зависит от гиперпараметра 𝛿 (дельта), который можно настроить. Потери Хьюбера приближаются к MAE, когда ~ 0, и MSE, когда ~ ∞ (большие числа).
Это все для этой статьи. Обязательно загляните в этот замечательный блог на Neptune, чтобы узнать больше о показателях производительности. Прокомментируйте свои мысли ниже!