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

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

В этом блоге моя цель - объяснить, как работает оптимизация, ее логику и математику. Я не буду объяснять / предоставлять какой-либо код. Если вы ищете математическое / логическое объяснение, продолжайте.

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

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

Так что, черт возьми, такое функция потерь?

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

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

Как это рассчитать?

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

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

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

MSE в основном выводит число. Наименьшее, чего мы можем достичь, - 0. Результат равен 0 или всегда больше нуля.

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

Оптимизация начинается

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

Эта часть этого блога во многом вдохновлена ​​видео на YouTube Брэндона Рорера. Пожалуйста, посмотрите его видео на YouTube для лучшего объяснения.

Давайте представим освежающую задачу

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

Теперь давайте сосредоточимся на сахарной части. Если мы добавим в чай ​​слишком много сахара, он станет неприятным на вкус, а если мы добавим очень мало сахара, то он станет неприятным на вкус. Если мы добавим в него идеальное количество сахара, только тогда он будет просто идеальным на вкус👌.

Исходя из этого, если мы построим график, где ось X представляет количество сахара, а ось Y показывает, насколько плох вкус чая, то он будет выглядеть примерно так. На графике самая низкая точка - это золотая середина.

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

Давай оптимизируем это

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

Есть разные способы оптимизации проблемы. Первый и, возможно, самый неэффективный способ сделать это - использовать так называемый «Исчерпывающий поиск».

Итак, в алгоритме исчерпывающего поиска мы просто смотрим на самую низкую точку на графике.

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

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

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

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

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

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

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

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

Градиентный спуск простыми словами

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

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

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

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

Ясно, что, судя по графику, нам нужно спуститься вниз (помните, что самая низкая точка - это золотая середина).

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

Счастливый конец

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

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

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