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

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

Оптимизация

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

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

  1. Инициализировать W и B с некоторым случайным значением
  2. Вычислите градиент относительно параметра, в данном случае W и B.
  3. Сделайте небольшой шаг в том направлении, где функция будет уменьшаться для каждого параметра, поскольку мы минимизируем функцию

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

Как алгоритм оптимизации знает, как обновлять параметры модели?

Учитывая исходные данные, правильные ответы и прогнозы, нам нужен способ сообщить нам, насколько плохо мы сделали прогноз. Если мы рассмотрим эти элементы независимо, входные данные и правильные ответы будут фиксированными точками данных, которые мы не можем изменить в процессе оптимизации. С другой стороны, прогнозирование зависит от модели, а модель зависит от параметров модели, поэтому нам нужна некоторая мера качества, которая могла бы представлять собой некоторую функцию, которая позволяла бы настраивать параметры модели, а также включать все другие данные, а затем сообщать нам, будет ли у нас все получается лучше или хуже по сравнению с фактическим ответом. Благодаря этому показателю качества мы позволяем алгоритму оптимизации, такому как обратное распространение, уделять особое внимание параметрам модели и иметь возможность сравнивать, насколько хорошо он выполняет настройку этих параметров.

Представляем убыток

Допустим, у нас есть только один помеченный пример и обозначим его как x и y. Затем во время прямого прохода с параметрами модели W и B, и более формально мы бы написали

f (…) также называется гипотезой. После того, как модель совершила свое волшебство, она дает нам прогноз y-hat. Имея наш прогноз, мы хотим знать, насколько хорошо мы справились, и вот где начинается обучение. Если мы работаем с одним помеченным примером, y-hat вводится в функцию измерения качества, чтобы увидеть, насколько мы далеки от истинного y значение. Этот показатель качества называется функцией потерь и обычно обозначается как L. Вот пример функции потерь.

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

От убытков к расходам

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

Математически параметры функции определяются как что-то, что можно изменить или что-то, что мы хотели бы настроить, поэтому в случае функции стоимости параметры, которые будут оптимизированы, и параметры, которые будут изменяться, - это веса и смещения или W и B в данном случае, поскольку именно это алгоритм оптимизации фактически оптимизирует, все остальное исправлено.
X и Y могут показаться параметрами, но на самом деле они фиксируются в процессе обучения (они являются параметрами для модели, но не для стоимость). Алгоритм обучения не может пойти и изменить их, можно обновлять только веса и смещения.

Обещание функции стоимости

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

  1. Будьте средним по убыткам
  2. Быть функцией результатов модели
  3. Назначьте высокое значение неправильным значениям и низкое значение правильным значениям

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

Усреднение используется таким образом, что функция стоимости не зависит от количества обучающих примеров, иногда мы можем использовать 100 примеров, а иногда 1000 или даже больше, но функция стоимости не должна зависеть от этого.

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

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

Палата общин

Начнем с функции стоимости, специально используемой для задач регрессии.

Среднеквадратичная ошибка

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

TODO: Показать график поверхности ошибки во время обучения X, Y, MSE

Другая категория функций потерь используется специально для задач классификации. Самый простой случай - если у нас есть только два класса предсказания, и мы можем выразить это, используя 0 и 1, все, что находится между ними, является вероятностью того, что предсказание на самом деле 1. Обычно используют точку отсечения 0,5, что означает, что все, что ниже 0,5, помечено как 0 и все выше это обозначено как 1.

Двоичная кросс-энтропия

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

TODO: Показать график поверхности ошибки во время обучения X, Y, BCE

Существует также класс функций потерь, которые в вероятностной структуре максимизированы и очень тесно связаны с бинарной кросс-энтропией.

Вероятность

Чтобы сравнить это с бинарной кросс-энтропией, правильной функцией правдоподобия является Бернулли. Случайная величина Бернулли имеет единственный параметр p, который сообщает вероятность появления 1. Давайте напишем функцию потерь правдоподобия в терминах параметра случайной величины Бернулли р.

В этом случае p - это наши прогнозируемые значения, поэтому мы можем переписать функцию, используя y-hat, чтобы она выглядела так

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

Журнал правдоподобия

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

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

Категориальная перекрестная энтропия

Он очень похож на BCE, но имеет дополнительный член суммирования для суммирования по всем выходным узлам, который в формуле обозначается как J.

Функция стоимости работает вместе с функцией активации softmax. Softmax - это обобщенная сигмовидная функция активации для выходов K. Это необходимо, потому что отдельные выходные данные не будут суммировать до 1, поэтому нам нужно нормализовать его, и это то, что softmax делает для нас.

TODO: Показать график поверхности ошибок во время обучения X, Y, CCE

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

Убыток таможенных пошлин

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

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

Поскольку это проблема регрессии, мы могли бы просто использовать MSE в качестве функции стоимости, проблема с MSE в этом случае заключается в том, что мы нарушаем одно из требований. Чтобы проиллюстрировать это, предположим, что истинная доходность составляет 0,01, и сравним два прогноза -0.01 и 0,03, один - прогноз убытков, другой - прибыль.

MSE = (y - y-шляпа) ² = (0,01 - (-0,01)) ² = (0,01 - 0,03) ² = 0,04

Здесь истинное значение - это прибыль, поэтому мы должны относиться к прогнозированию прибыли иначе, чем к убыткам, и, следовательно, относиться к знакам по-другому (отрицательные для убытков и положительные для прибыли). Оба неверных прогноза с точки зрения риска плохи, но предсказывать убыток как -0,01, когда это прибыль, как в этом случае, интуитивно намного хуже.

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

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

Давайте посмотрим, как он сравнивается с MSE, если мы построим его вместе.

Как вы можете видеть, наша спроектированная функция потерь в этом конкретном сценарии гораздо менее опасна, чем функция MSE. В случае, если наше истинное значение будет 0,06 и мы предсказали -0,01, MSE едва возрастет в этот момент, но наша функция потерь сигнализирует, что прогноз был довольно плохо.

Фактически, потому что мы структурировали нашу функцию потерь, чтобы избежать риска, тогда при фактической оптимизации модели она должна быстрее сходиться к желаемому значению. MSE также сходится для исправления значений P \ L, но это потребует гораздо большего взаимодействия и чаще подвергает нас ненужному риску.