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

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

Шаг 1: определение проблемы

Для начала давайте посмотрим на простой набор данных (x1, x2):

Этот набор данных может представлять все, что мы хотим, например, x1 = возраст вашего компьютера, x2 = время, необходимое для обучения нейронной сети. Каждая красная точка на нашем графике представляет собой измеренную точку данных. Этот график здесь представляет собой основную истину: все эти точки являются правильными и известными записями. Проблема в том, что основная истина часто ограничена: мы знаем для 11 компьютерных возрастов (x1) соответствующее время, необходимое им для обучения NN. А как насчет вашего компьютера? Если вам повезет, один компьютер в наборе данных имел точно такой же возраст, что и ваш, но это маловероятно. Для вашего компьютера вам известен возраст x1, но вам неизвестно время тренировки NN x2.

Шаг 2: догадки (глупый способ)

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

Но что, если нам повезло меньше и рядом нет компьютера? Тогда ошибка становится очень большой.

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

Шаг 3. Умные угадывания с помощью машинного обучения

а. Аппроксимация данных

Теперь мы переходим в область машинного обучения. Если вы посмотрите на красные точки данных, вы легко увидите линейную тенденцию: чем старше ваш компьютер (больше x1), тем больше время обучения (больше x2). Более совершенный алгоритм изучит данные, определит эту тенденцию и сделает более точный прогноз для нашего компьютера с меньшей ошибкой.

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

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

б. Линия приближения

Но как найти такую ​​линию? Во-первых, давайте вернемся к старшей школе и посмотрим, как определяется линия:

В этом уравнении a определяет наклон нашей линии (выше a = более крутая линия), а b определяет точку, в которой линия пересекает ось y. (Обратите внимание, что ось на наших графиках называется (x1, x2), а не (x, y), как вы привыкли в школе. Не беспокойтесь об этом, мы будем использовать (x, y) для линейного случая сейчас, но позже вернемся к обозначению (x1, x2) для приближений более высокого порядка). Чтобы найти линию, которая идеально соответствует нашим данным, мы должны найти оптимальные значения для как a, так и b.

Для нашего примера данных здесь у нас есть оптимальные значения a = 0,8 и b = 20. Но как нам найти эти значения a и b?

c. Нахождение параметров (a, b), которые минимизируют квадратичную ошибку

Как мы уже говорили ранее, мы хотим найти a и b так, чтобы строка y = ax + b соответствовала нашим данным так же хорошо, как возможный. Или, говоря математически, ошибка / расстояние между точками в нашем наборе данных и линией должно быть минимальным.

Ошибка для отдельной точки (отмеченной зеленым) может быть разницей между действительным значением y точки и значением y -, предсказанным нашей серой аппроксимационной линией: f (x). Его можно рассчитать следующим образом:

Здесь f - это функция f (x) = ax + b, представляющая нашу линию аппроксимации. xi - координата x1 точки, yi - координата x2 точки. Помните параметры a = 0,8 и b = 20? Давайте добавим их в нашу функцию и вычислим ошибку для зеленой точки с координатами (x1, x2) = (100, 120):

Ошибка = f (x) - yi
Ошибка = f (100) - 120
Ошибка = a * 100 + b - 120
Ошибка = 0,8 * 100 + 20–120
Ошибка = -12

Мы видим, что наша линия приближения на 12 единиц ниже этой точки. Чтобы оценить, насколько хороша наша линия аппроксимации для всего набора данных, давайте вычислим ошибку для всех точек. Как мы можем это сделать?

Что ж, во-первых, давайте исправим отдельные ошибки. На это есть две причины:

  1. Возводя ошибки в квадрат, мы получаем абсолютные значения (-12- ›в квадрате-› 144)
  2. Возводя ошибки в квадрат, мы получаем намного большее значение для точек, которые находятся далеко от линии приближения. Следовательно, если наша линия приближения пропускает некоторые точки на большом расстоянии, результирующая ошибка будет довольно большой.

Затем давайте просуммируем ошибки, чтобы получить оценку общей ошибки:

Или, в более общем смысле, написано:

Эта формула называется «Сумма квадратов ошибок» и очень популярна как в машинном обучении, так и в статистике.

d. Функция оптимизации

Чем это полезно? Что ж, давайте вспомним наше первоначальное определение проблемы: мы хотим найти такие a и b, чтобы линия линейного приближения y = ax + b лучше всего соответствовала нашим данным. Скажем это другими словами: мы хотим найти a и b так, чтобы квадратичная ошибка была минимальной.

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

Если мы найдем минимум этой функции f (a, b), мы найдем наши оптимальные значения a и b:

Прежде чем мы перейдем к фактическим вычислениям, давайте представим графическое представление о том, как выглядит наша функция оптимизации f (a, b):

Обратите внимание, что график слева на самом деле не является представлением нашей функции f (a, b), но выглядит похожим. Высота ландшафта представляет ошибку в квадрате. Чем выше горы, тем хуже ошибка. Таким образом, минимальная квадратичная ошибка находится именно там, где указывает наша зеленая стрелка. Когда мы установили значения для a и b на этом этапе, мы получим a-оптимальный и b-оптимальный .

Углубление в сторону a (например, более высокие значения для a) даст нам более высокий наклон и, следовательно, более серьезную ошибку.

Если бы мы пошли в направлении b (например, имея более высокие значения для b), мы бы сместили нашу линию вверх или вниз, что также дало бы нам худшие квадратичные ошибки.

е. Рассчитайте оптимальное значение

Таким образом, оптимальной точкой действительно является минимум f (a, b). Но как это вычислить? Что ж, мы знаем, что глобальный минимум должен удовлетворять двум условиям:

f '(a, b) = 0 - первая производная должна быть равна нулю
f' '(a, b) ›0 - вторая производная должна быть положительный

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

f(a, b) Δa = 0
f(a, b) Δb = 0

Давайте перепишем f (a, b) = SUM [axi + b - yi] ², разрешив квадрат. Остается f (a, b) = SUM [yi² + b² + a²x + 2abxi - 2byi - 2bxiyi]. Давайте заполним это нашими производными:

f (a, b) = СУММ [yi² + b² + a²x + 2abxi - 2byi - 2axiyi] Δa = 0
f (a, b) = СУММ [yi² + b² + a²x + 2abxi - 2byi - 2axiyi] Δb = 0

Мы можем легко вычислить частные производные:

f (a, b) = СУММ [2ax + 2bxi - 2xiyi] = 0
f (a, b) = СУММ [2b + 2axi - 2yi] = 0

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

Почему мы не делаем это вручную? Что ж, помните, что у нас есть сумма в наших уравнениях и много известных значений xi и yi. Даже для 10 точек данных уравнение получается довольно длинным. Мы можем позволить компьютеру решать это без проблем, но вряд ли можем сделать это вручную.

Поздравляю! Теперь вы понимаете, как работает линейная регрессия, и теоретически можете рассчитать линию линейной аппроксимации самостоятельно без помощи калькулятора!

Но подождите, есть еще кое-что

Аппроксимирующие многочлены

Что, если бы наши данные показывали не линейный тренд, а изогнутый? Как кривая функции в квадрате?

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

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

Принцип их расчета точно такой же, поэтому позвольте мне быстро рассмотреть его с использованием функции приближения в квадрате. Сначала мы снова определяем определение нашей проблемы: нам нужна функция в квадрате y = ax² + bx + c, которая лучше всего соответствует нашим данным.

Как видите, теперь нам нужно найти три значения: a, b и c. Поэтому наша задача минимизации тоже немного изменится. Хотя сумма квадратов ошибок по-прежнему определяется так же:

Изложение показывает, что теперь у нас есть функция оптимизации с тремя переменными: a, b и c:

С этого момента вы продолжаете точно так же, как показано выше для линейной интерполяции.

Переоснащение

Остается один вопрос: для линейной задачи мы также могли бы использовать функцию приближения в квадрате. Почему? Итак, с функцией приближения y = ax² + bx + c и значением a = 0 у нас остается y = bx + c , который определяет строку, которая также может идеально соответствовать нашим данным. Так почему бы просто не использовать функцию аппроксимации очень высокого порядка для наших данных, чтобы получить наилучший результат?

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

Ну не очень. Легче всего это объясняется следующей картинкой:

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

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

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

Если вам нужен специалист в области разработки программного обеспечения или искусственного интеллекта, посетите мою Компанию по разработке программного обеспечения в Цюрихе.