Представляем градиентный спуск

Мотивация

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

Коды доступны на GitHub. Первоначально опубликовано на edenau.github.io.

1. Инициализировать

Шаг первый. Импортируйте NumPy. Шутки в сторону.

2. Создание данных

Мы генерируем десять тысяч точек для скалярного ввода X и соответствующего ему гауссовского noise, так что для некоторого фиксированного наклона w_true=7.6 и точки пересечения b_true=-3.3 мы можем сгенерировать y с помощью следующей линейной зависимости. Значения w_true и b_true совершенно произвольны.

y = w_true * X + b_true + noise

Добавление гауссовского шума с нулевым средним делает наши данные более реалистичными.

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

На самом деле нам неизвестны значения параметров линейной функции w и b, и здесь на помощь приходит градиентный спуск. Мы определяем функцию ошибок e как сумму квадратов разницы между фактическим y и предсказал y=wx+b для некоторых (w,b).

Эта функция ошибок штрафует несоответствие между фактическим и прогнозируемым y значением. Квадрат разности используется вместо абсолютной разности ||.||, так что мы можем вычислить ∂e / ∂w и ∂e / ∂b аналитически, что остается в качестве упражнения для читатель. Эти градиенты представляют направления увеличения w и b соответственно. Поэтому, если мы хотим уменьшить, ошибка e, мы должны обновить параметры, перейдя в отрицательное направление производных. Это можно выразить как

w ← w - learning_rate * ∂e/∂w
b ← b - learning_rate * ∂e/∂b
# The key is the minus signs

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

Вывод

Это минимальная реализация алгоритма линейной регрессии с использованием библиотеки NumPy за 3 шага. Если вы хотите проверить свое понимание линейной регрессии, вот список вещей, которые вы, возможно, захотите попробовать:

  • Реализация линейной регрессии с использованием других библиотек (на GitHub )
  • Разделение набора данных для обучения и тестирования
  • Множественные входные функции
  • Негауссовский распределенный шум
  • Различные функции ошибок

Коды доступны на Github. Удачного кодирования!

Статьи по Теме

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







Первоначально опубликовано на edenau.github.io.