Часть 3 из серии «Начало работы с глубоким обучением»

Мотивация

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

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

Краткий обзор линейной регрессии

Мы представили линейную регрессию в первом сообщении блога этой серии, и мы быстро вспомним это здесь. Модель линейной регрессии:

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

Среднеквадратичная ошибка

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

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

Градиентный спуск для линейной регрессии

Правило обновления градиентного спуска задается следующим образом:

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

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

так что его производная от параметры

Следовательно, частная производная MSE сводится к

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

Реализация градиентного спуска для линейной регрессии

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

  • X - это матрица m x (n + 1), где m - количество примеров, а n - количество функций, поэтому каждый пример представляет собой строку в X. Мы обозначаем i -й пример с помощью надстрочной записи и представляем i -ю входную функцию / измерение с помощью подстрочной записи. Дополнительный начальный столбец заполнен единицами для учета смещения .

  • y - вектор размером m наземных истинных результатов.

  • θ - вектор параметров размером n + 1 (его первый элемент - смещение) .

Векторизованная версия прогноза модели дается формулой

Также легко проверить, что векторизованная версия потери равна

Производная потерь по каждому параметру может быть записана как

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

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

  • Мы начинаем с добавления столбца единиц к матрице X, чтобы представить член смещения (поскольку исходный входной набор данных не содержит столбца единиц).
  • Затем мы случайным образом инициализируем наши параметры θ маленькими значениями.
  • Затем мы применяем алгоритм градиентного спуска: мы вычисляем прогнозы и потери модели и, используя градиент последних, обновляем параметры θ.

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

Пришло время реализовать его!

Это было не так уж сложно! Мы рекомендуем вам реализовать модель линейной регрессии самостоятельно, чтобы лучше понять, как эта модель работает! Когда вы узнаете о других моделях машинного обучения, вы можете последовать совету Андрея Карпати и внедрить их тоже!

Благодарности

Эта публикация была написана с помощью Андре Пинто, также организатора сессий Deep Learning Sessions Lisboa.