С математикой вместо кода

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

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

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

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

В этой настройке мы записываем одно наблюдение метки класса как строчную букву «y», которая может принимать значения 0 или 1, и одну точку данных как строчную букву «x». » с подчеркиванием, чтобы указать, что это вектор.

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

Теперь нам нужно решить, как смоделировать эту вероятность. Логистическая регрессия делает это, делая следующее предположение.

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

Теперь мы можем видеть, что, установив для первого элемента каждого вектора точек данных значение 1, мы получим термин пересечения или смещения. Позже станет ясно, почему мы этого хотим.

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

Так что же такое сигма? Обратите внимание: если бы мы просто вычислили взвешенную сумму, мы могли бы получить любое реальное значение, потому что характеристики каждой точки данных могут принимать любое реальное значение. Но мы хотим смоделировать вероятность, которая находится между нулем и единицей. Итак, нам нужна функция, которая отображает все действительные значения в интервал [0,1].

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

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

Итак, теперь вопрос в том, каким должен быть этот вектор «тета»?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это дает нам все необходимое для нашей окончательной модели, которая такая же, как и та, с которой мы начали, но теперь — что очень важно — включает «тета-шляпу!»

Это полезно, но помните, что наша первоначальная цель логистической регрессии состояла в том, чтобы выполнить бинарную классификацию и предсказать, принадлежит ли данная точка данных к классу, помеченному 1 или 0. Мы будем называть эти предсказания класса «y шляпа ” и сказать, что если оценочная вероятность того, что точка данных принадлежит классу, помеченному 1, больше 0,5, то мы предсказываем, что точка данных принадлежит этому классу. В противном случае мы предсказываем, что точка данных принадлежит классу с меткой 0.

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

Давайте посмотрим на пару примеров. Если бы у нас был только один признак, мы могли бы использовать вторую ось, чтобы показать соответствующие метки классов, 0 и 1. Наши предсказанные вероятности для каждого значения признака вычерчивали бы сигмовидную кривую из-за нашей модели, а граница решения была бы — единственное значение признака, соответствующее вероятности 0,5.

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

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

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