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

Простой пример: линейная регрессия

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

y = mx + b

Где:
- y – это результат нашей функции, наш прогноз
 –  – это вход нашей функции, наши данные
- m — это коэффициент входа (также называемый наклоном)
- b — это смещение от начала координат (также называемое точкой пересечения)

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

Как определить наилучшие значения для m и b? Сначала нам нужно формальное определение слова «лучший».

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

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

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

Вы заметите отличие от предыдущего уравнения: начальный термин 1/2m. Этот член является произведением 1/2 и 1/м. Почему мы умножаем на это сумму наименьших квадратов?

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

Поиск лучшей линии

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

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

Производные

Одна из вещей, которую вы узнаете в «Исчислении I», — это производные. Напомню, что производная функции F(x) определяется наклоном f(x) в каждой точке x. . Например, допустим, автомобиль проезжает 100 метров за 10 секунд с постоянной скоростью 10 метров в секунду:

Если мы построим график расстояния автомобиля (ось Y) от начальной точки во времени (ось X), это будет выглядеть примерно так:

Поскольку скорость автомобиля постоянна, ее можно смоделировать линейным уравнением. Линейные уравнения всегда имеют один и тот же наклон, поэтому производная функция положения автомобиля будет просто возвращать наклон этой линии для любого заданного момента времени между 0 и 10. В этом случае производная функция будет F(x) = 10.

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

Многомерные производные

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

По сути, мы хотим разбить нашу многомерную функцию на ряд линейных функций и взять производные от этих функций. Это называется получением частной производной. Представим, что у нас есть функция f(x, y), частная производная будет:

Обозначение ∂/∂x просто означает «частная производная по x». Остальные обозначения представляют собой более формальное представление производной. По сути, это наклон в любой точке функции.

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

Если мы возьмем частные производные нашей функции ошибок по двум переменным, m и b,, то мы сможем получить «наклон» нашей функции по этим двум переменным. . Наклон говорит нам, увеличивается ли функция (положительный наклон) или уменьшается (отрицательный наклон) в любой заданной точке, так что это говорит нам о том, должны ли мы уменьшить или увеличить наше следующее предположение для m и .

Я собираюсь закончить это здесь, потому что я вот-вот потеряю сознание. Думаю, в следующий раз я остановлюсь на более формальных деталях:

  • Производные и частные производные
  • Как решить производную функции ошибок
  • Как интерпретировать направление движения как вектор в проблемном пространстве.

Спасибо, что прочитали все, и, пожалуйста, дайте мне знать, если у меня есть какие-то неточности; Я уверен, что в какой-то момент я позволил себе некоторую вольность с моей математикой или определениями.