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

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

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

какая польза от градиентного спуска в машинном обучении?

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

Пример линейной регрессии:

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

Предположим, мы хотим смоделировать указанный выше набор точек с помощью линии. Для этого мы будем использовать стандартное уравнение линии y = mx + b, где m — наклон линии, а b — точка пересечения линии с осью y. Чтобы найти наилучшую линию для наших данных, нам нужно найти наилучший набор значений наклона m и y-пересечения b.

Простой подход к решению этого типа проблем заключается в определении функции ошибки (также называемой функцией стоимости), которая измеряет, насколько «хороша» данная линия. Эта функция примет пару (m,b) и вернет значение ошибки в зависимости от того, насколько хорошо линия соответствует нашим данным. Чтобы вычислить эту ошибку для заданной строки, мы пройдемся по каждой точке (x, y) в нашем наборе данных и просуммируем квадраты расстояний между значением y каждой точки и значением y линии-кандидата (вычисляется при mx + b). Обычно это расстояние возводят в квадрат, чтобы убедиться, что оно положительное, и сделать нашу функцию ошибок дифференцируемой.

Линии, которые лучше соответствуют нашим данным (функция стоимости/ошибки), приведут к более низкой функции стоимости.

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

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

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

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

Ниже приведены некоторые снимки градиентного спуска, выполненного для 2000 итераций для нашей примерной задачи. Мы начинаем с точки m = -1, b = 0. Каждая итерация m и b обновляются до значений, которые дают немного меньшую ошибку, чем предыдущая итерация. На левом графике отображается текущее местоположение поиска градиентного спуска (синяя точка) и путь, по которому туда можно добраться (черная линия). На правом графике отображается соответствующая строка для текущего местоположения поиска. В итоге у нас получилась довольно точная подгонка.

Учитывая каждый обучающий экземпляр:

  1. Вычислите прогноз, используя текущие значения коэффициентов.
  2. Рассчитайте новые значения коэффициентов на основе ошибки в прогнозе.

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

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

Для получения дополнительной информации о градиентном спуске, линейной регрессии и других темах машинного обучения я настоятельно рекомендую «Машинное обучение» Эндрю Нг!

Спасибо!