Машинное обучение по крупицам: небольшие статьи о машинном обучении

Добро пожаловать!

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

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

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

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

Давайте сразу перейдем к интересным вещам!

Что такое градиентный спуск?

Первая тема - градиентный спуск - итерационный алгоритм поиска минимума целевой функции.

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

В этой статье мы собираемся изучить:

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

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

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

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

Вот несколько реальных примеров, когда линейная регрессия может быть полезна для определения взаимосвязи между двумя переменными:

Влияние роста на вес

Влияние уровня образования на благосостояние

Влияние количества осадков на количество урожая

Влияние содержания алкоголя в крови на физическую координацию

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

Но настоящий вопрос заключается в том, как мы узнаем, насколько «хорошо» это соответствие?

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

Фактически, мы измеряем соответствие гипотезе с помощью функции стоимости.

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

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

А теперь помните описание градиентного спуска?

Градиентный спуск - это итерационный алгоритм поиска минимума функции.

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

­­­­­­­­

Алгоритм градиентного спуска

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

Чтобы лучше понять интуицию, мы начнем с простейшего примера: одномерный градиентный спуск. То есть градиентный спуск применяется к функции с одной переменной.

Одномерный градиентный спуск

Определим функцию одной переменной J от теты, J (θ), следующим образом:

Функция J (θ) выглядит как рис.1, если строить график относительно θ.

Мы хотим найти значение θ, которое минимизирует J (θ):

Что нам нужно сделать, чтобы достичь этого, так это попробовать разные значения θ, пока J (θ) не достигнет своего минимума. Обычно мы начинаем с θ = 0, но поскольку в данном случае это приводит к минимуму J (θ), допустим, мы начинаем с θ = 6 .

Прежде чем подробно рассматривать алгоритм, необходимо ответить на два важных вопроса:

  1. Как определить, когда J (θ) достигает минимума?
  2. Если J (θ) не является минимальным, как мы узнаем, какое значение θ попробовать дальше?

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

Рассмотрим Рис.2. Поскольку наклон касательной при θ = 6 положительный (12), мы знаем, что θ необходимо уменьшить, чтобы приблизиться к значение, которое минимизирует J (θ) (θ = 0). С другой стороны, наклон касательной при θ = -2 отрицательный (-4), поэтому мы знаем, что нам нужно увеличить значение θ на следующей итерации.

И, что также важно, наклон становится 0, когда мы достигаем минимума J (θ). Вот как мы узнаем, когда градиентный спуск сходится, т.е. значение J (θ) приближается достаточно близко к своему минимуму. На практике мы объявляем сходимость , если J (θ) уменьшается менее чем на 10 ^ (- 3) (= 0,001) за одну итерацию.

Обновить правило

Теперь нам нужен системный и эффективный способ обновления θ, пока мы ищем значение θ, которое минимизирует J (θ).

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

Правило обновления для одномерной функции приведено ниже:

Здесь α называется скоростью обучения, а dJ (θ) / dθ - производной от J (θ). - т.е. наклон касательной.

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

Для J (θ) = θ² производная от J (θ) рассчитывается следующим образом: сжимается к нулю:

Исходя из этого, правило обновления для J (θ) = θ² можно упростить как θ: = (1–2α) θ

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

Давайте, наконец, посмотрим на градиентный спуск в действии.

Мы собираемся выполнить градиентный спуск для J (θ) = θ² с α = 0,3 и начальным значением θ = 6 ( Рис.3).

После первой итерации θ обновляется как θ: = (1–2α) θ = 0,4 * 6 = 2,4
После второй итерации: θ: = (1–2α) θ = 0,4 * 2,4 = 0,96
После третьей итерации: θ: = (1–2α) θ = 0,4 * 0,96 = 0,384

И так далее…

Наконец, с шестой по седьмую итерацию J (θ) уменьшается на 0,0005, что меньше порогового значения 10 ^ (- 3) , после чего мы можем объявить о сходимости.

Настройка скорости обучения

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

Рис. 4 показывает, что скорость обучения слишком велика. Значение θ колеблется взад и вперед, переходя через минимум, а не постепенно приближаясь к нему. Даже после десятой итерации θ все еще довольно далеко от нуля, и мы ожидаем, что гораздо больше ненужных зигзагов для θ, наконец, приблизится к минимуму J (θ). Фактически, в этом случае для достижения сходимости требуется 23 итерации.

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

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

Заворачивать

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

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

Спасибо!

Машинное обучение серии Bit by Bit

  1. Одномерный градиентный спуск
  2. Многомерный градиентный спуск

Ресурсы



Введение в градиентный спуск и линейную регрессию
Градиентный спуск - один из тех алгоритмов« лучших результатов
, которые могут предложить новую перспективу для решения проблем… вращения. atomicobject.com »









Исправление

9 декабря 2018 г. - в разделе «Градиентный спуск в действии» обнаружена опечатка в скорости обучения. Первоначально оно было записано как α = 3, тогда как правильное значение - α = 0,3. Спасибо Анирбану Дутте за указание на это.