Строим мост между концепцией и математикой

Введение

Машинное обучение - захватывающая часть науки о данных, которую большинство из нас пытается изучить. Со всеми этими онлайн-курсами, статьями, блогами и видео, предлагающими нам множество источников на выбор. Когда дело доходит до обучения машинному обучению, важно иметь ключевое понимание этой области. Термины машинное обучение, нейронные сети, глубокое обучение, искусственный интеллект могут показаться обычному человеку одинаковыми или похожими. Но понимание разницы между ними жизненно важно. Для всех тех, кто ищет базовое понимание и взаимосвязь между концепцией и математикой машинного обучения, находит хороший источник знаний, коррелирующий перспективы машинного обучения, будь то математика, концептуальное или реализация в целом, для отличного понимания тема могла быть сложной. Чтобы правильно получить базовые знания и понимание ML, возможно, придется обратиться к нескольким источникам, которые могут использовать различную терминологию и номенклатуру.

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

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

Машинное обучение: Общая интуиция

Начнем с вопроса:

«Чем машинное обучение отличается от традиционного способа решения проблем?»

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

Мы сделали 2 переменные для наших 2 входов

Мы реализовали алгоритм (правила), который принимает 2 переменные в качестве входных данных и производит сумму 2 переменных

Мы сохранили сумму в третьей переменной или просто отобразили сумму.

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

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

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

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

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

Итак, в двух словах: при традиционном способе решения проблем вводятся правила и ввод, и, используя их, мы производим вывод. Однако в ML вводятся и выводятся входные и выходные данные, с помощью которых мы выясняем правила, которые их связывают .

Машина учится:

Начнем с интуиции. Чтобы понять, как машина «обучается»? Давайте рассмотрим тот же пример, который мы обсуждали ранее, когда мы прогнозируем цены на жилье.

И для достижения этой задачи нам предоставляются некоторые образцы данных, состоящие из набора домов с их размером в качестве входной характеристики (x) и их продажной ценой (y) (в конце концов, это пример контролируемого обучения). Общее количество примеров обозначено «m».

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

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

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

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

Здесь мы каким-то образом обнаружили нематематическую связь «hθ (x)» между входом «X» и выходом «Y» (что кажется линейной зависимостью). Теперь, если бы мы могли математически выразить функцию hθ (x), наша проблема была бы решена.

Давайте начнем с визуализации данных в виде графика, на котором мы нанесем размер дома (X) на ось x, а цену дома (Y) на ось y. Это может выглядеть примерно так:

Это всегда хорошее начало при внедрении машинного обучения. Визуализированные данные могут очень помочь нам в выборе типов 'Гипотезы' функции (hθ (x)), ' Cost ' (J (θ)) мы должны использовать для обучения алгоритма (подробнее об этом позже).

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

Обучение алгоритму машинного обучения

Итак, как нам найти уравнение AB? Что ж, мы можем использовать предоставленные нам данные для «обучения» алгоритма машинного обучения, который найдет для нас hθ (x). Когда hθ (x) полностью обучен, мы можем использовать его для прогнозирования цены любого дома.

Функция активации:

Это «уравнение», которое мы ищем, известно как «функция активации» или «функция гипотезы».

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

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

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

Это похоже на общее уравнение для линий, то есть Y = mx + c
(Y = c + mx). Результат hθ (x) известен как прогноз. Здесь θ₀ и θ₁ известны как параметры или веса, а x1 - входная характеристика, которая в нашем случае является размером дома. Таким образом, функция гипотезы - это предсказание того, каким должен быть результат на основе его весов (θ₀ и θ₁) и входных данных.

Найти линию AB. нам нужно найти такие значения θ₀a nd θ₁, которые дадут нам наиболее близкий расчетный прогноз к фактическому выходу «y» для всех m примеров:

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

Функция затрат:

Итак, чтобы найти значения параметров θ₀ и θ₁. Мы используем так называемую функцию стоимости. Но что это? Начнем с определения:

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

Функция стоимости - это способ подсчитать, насколько наш прогноз отличается от фактического значения. С точки зрения непрофессионала, это средняя ошибка между hθ (x) и y для всего обучающего примера. Следовательно, этот член ошибки можно формализовать как разницу между прогнозируемым выходом hθ (x) и фактическим выходом y:

В нашем примере мы используем функцию квадратичной ошибки. Теперь, если мы подставим значение hθ (x):

Как вы, вероятно, можете сказать, чтобы минимизировать ошибку или `` стоимость '' нашей модели машинного обучения, нам нужно найти наилучшую возможную комбинацию θ₀ и θ₁, чтобы прогнозируемый результат 1-го члена был как можно ближе к фактическому вывод y.

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

Следовательно, функция затрат формализуется как:

Мы можем сказать, что функция стоимости представляет собой приблизительное среднее значение суммы ошибок между прогнозируемыми и фактическими результатами для всех «m» примеров. x (i) и y (i) обозначают iᵗʰ вход и выход из обучающего примера.

Лучшее понимание функции затрат

Другой способ понять функцию стоимости - визуализировать ее. Мы строим функцию стоимости как функцию от теты, и это средняя ошибка всего обучающего примера. Чтобы лучше понять это, представьте, что наша гипотеза имеет только 1 параметр θ₀. Тогда наша функция гипотезы будет:

Как видите, линия AB проходит через начало координат. Наилучшая возможная линия AB, которую мы пытаемся получить, будет такой, чтобы средние квадраты вертикальных расстояний (обозначенных голубым цветом) разбросанных точек от линии были наименьшими. Итак, предположим, что θ₀ = 1 - лучшее значение нашей гипотезы. Теперь наша функция стоимости:

Как видите, функция стоимости является функцией θ₀. А поскольку это функция в квадрате, мы можем построить график зависимости θ₀ от J (θ), как показано:

Функция стоимости образует параболу. Итак, когда мы начинаем тренировку, допустим, мы начинаем с некоторого значения θ₀ ‘A’. Для точки «A» значение J (θ) велико. Следовательно, нам нужно уменьшить J (θ), что можно сделать, уменьшив ошибку.

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

Хорошо, теперь, когда мы понимаем, почему нам нужно минимизировать J (θ), давайте посмотрим, как это сделать? Или лучше: как нам эффективно скатить эту кривую?

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

i) Он не должен выходить за пределы минимумов, т. е. точки B.

ii) Чтобы добраться до точки B, необходимо сделать минимальное количество шагов.

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

Градиентный спуск: алгоритм оптимизации

Итак, теперь, когда мы знаем, какая функция нам нужна, то есть hθ (x), и мы также можем проверить, насколько хорошо она подходит, используя функцию стоимости J (θ). Теперь нам нужна функция, которая может эффективно помочь нам достичь наилучшего возможного значения θ за минимальное количество шагов. Вот тут-то и пригодится градиентный спуск. Как обычно, давайте начнем с его определения:

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

Вы можете заметить, что в определении термина «крутой спуск» есть вопрос:

«Каков самый крутой спуск по параболе?»

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

Но перед этим формализуем функцию градиентного спуска:

Здесь α называется скоростью обучения, j указывает номер индекса функции, то есть θ₀, θ₁, θ₂,… θₙ. Сначала это может показаться немного сложным, но не волнуйтесь, мы разберем его.

Обратите внимание на знак ": =" в уравнении. Это указывает на то, что, используя тот же J (θ), мы должны одновременно вычислять значения параметров θ₀, θ₁,… θₙ, а затем после вычисления изменения тета, т.е. ∂ / ∂θⱼ для каждого θ, мы должны снова одновременно одновременно заменять θ₀, θ₁ ,… Θₙ.

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

Лучшее представление о градиентном спуске

Термин ∂ / ∂θⱼ * (J (θ)) известен как производная от теты и представляет собой изменение теты, которое необходимо произвести за одну итерацию градиентного спуска. Он представляет собой наклон касательной в текущем положении шара на кривой. С точки зрения непрофессионала, производные члены не только показывают, насколько крутой является кривая в числах, но также говорят, в каком направлении должен катиться мяч, учитывая его текущую точку на кривой.

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

  1. Понимание того, какой путь минимален:
  • СЛУЧАЙ I:

Таким образом, для отрицательного наклона рис. 6 (a) мы получаем отрицательное значение ∂ / ∂θⱼ * J (θj), следовательно, член - (- ∂ / ∂θⱼ * J ( θ)) положительный. Из-за этого мы добавляем изменение θ. Это заставляет нас двигаться вправо по оси x, что оказывается правильным направлением, в котором нам нужно двигаться, чтобы достичь минимума.

  • СЛУЧАЙ II:

Для положительного наклона мы получаем положительное значение ∂ / ∂θⱼ * J (θⱼ), которое в сочетании с - (∂ / ∂θⱼ * J (θ)) приводит к уменьшению θⱼ, заставляя его катиться влево по оси x, что, как оказалось, является правильным направлением, в котором нам нужно двигаться, чтобы достичь минимума.

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

2. Как понять, сколько нужно переместить за одну итерацию:

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

Как известно, производная либо складывается, либо вычитается из текущих значений параметра θ. Итак, если мы сохраним постоянное значение, скажем, 1, то величина производного члена также будет пропорциональна тому, насколько «крутой» наклон. Это показано ниже. Синяя линия - это наклон, а ее длина - его величина.

  • СЛУЧАЙ I:

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

  • СЛУЧАЙ II:

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

Заключение

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

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

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

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

Библиография

[1] Основы машинного обучения: https://www.coursera.org/learn/machine-learning?

[2] Начало градиентного спуска:

https://www.youtube.com/watch?v=IHZwWFHWa-w