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

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

Впрочем, я ни в коем случае не являюсь специалистом в этой области. Я сам начал изучать машинное обучение примерно 3 года назад (в 2018 году). Если вы обнаружите ошибку в каком-либо из этих сообщений, сообщите мне об этом, создав задачу в прикрепленном репозитории GitHub.

Линейная регрессия

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

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

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

Да, вы будете правы, говоря, что используя нормальное уравнение, мы получаем точные результаты. Однако, когда у нас есть большое количество зависимых переменных (которые мы будем называть «признаками» в будущем), вычисление нормального уравнения становится очень затратным с вычислительной точки зрения, и мы должны обратиться к не обязательно лучшему, но более быстрому итеративному алгоритму, который мы будем использовать. взгляните в ближайшее время.

Нормальное уравнение

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

Любая система линейных уравнений может быть компактно представлена ​​в виде матриц и векторов. Например,

В приведенном выше уравнении матрица θ содержит коэффициенты при зависимых переменных в системе уравнений. Матрица X содержит зависимые переменные (признаки). Когда есть только один признак, матрица X становится вектором. Вектор y содержит независимую переменную (метки). Когда есть только одна функция, система уравнений становится слишком знакомой, уравнением линии:

где m — это наклон линии, который аналогичен θ в многомерном уравнении.

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

Давайте определим наилучшее решение следующим образом:

который дает оценочные метки в соответствии с наилучшим решением.

являются оценочными метками в соответствии с решением наилучшего соответствия.

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

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

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

срок. Инверсия матриц с помощью компьютеров становится все более и более дорогой по мере увеличения размера матрицы. Для специалистов по информатике временная сложность обращения матриц равна кубическому времени O(n³).

Теперь, как и было обещано, давайте рассмотрим численный итеративный алгоритм под названием «Градиентный спуск».

Градиентный спуск

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

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

Я снова начинаю с функции среднеквадратичной ошибки (MSE),

Ранее я включил член пересечения по оси Y (смещение) в матрицу θ, а также предположил, что первый признак (x0) равен 1. Теперь я выделю его и представлю наше линейное уравнение в виде следует,

где θ_0 — точка пересечения по оси Y (смещение). Следовательно, функция среднеквадратичной ошибки принимает вид

Теперь я беру первую производную MSE по коэффициентам θ и θ_0.

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

Поэтому теперь мы корректируем значения коэффициентов, вычитая градиенты.

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

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

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

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