В этом видео мы поговорим о стохастическом градиентном спуске, который особенно хорошо подходит для обучения линейных моделей. Итак, мы уже знаем, как работает обычный градиентный спуск. Мы начинаем с некоторой инициализации вектора весов, например, нулями или другими значениями, и дальше повторяем в цикле градиентные шаги. Градиентный шаг состоит в том, что мы вычитаем из текущего приближения вектора весов w (t − 1) вектор градиента, с некоторым коэффициентом ηt. Повторяя эти шаги до тех пор, пока не наступит сходимость, то есть пока вектор весов не начнет меняться слишком слабо. Давайте внимательнее посмотрим на то, как устроен градиентный шаг. Вектор градиента в векторной форме выглядит вот так. Если расписать j-ю компоненту этого вектора, то получим следующую формулу. В ней стоит суммирование по всем объектам обучающей выборки, по i от 1 до l, где мы суммируем следующие слагаемые, которые, по сути, показывают, как надо изменить j-й вес, чтобы как можно сильнее улучшить качество на объекте xi. А вся сумма показывает, как нужно изменить j-й вес, чтобы улучшить качество на всей обучающей выборке. Собственно, в этой формуле и состоит один из главных недостатков градиентного спуска. Здесь стоит суммирование по всей обучающей выборке. Если выборка большая, то один градиентный шаг будет занимать слишком много времени. Так мы приходим к модификации градиентного спуска, который называется стохастическим градиентным спуском. Его главная особенность в том, что на одной итерации мы вычитаем не вектор градиента, вычисленный по всей выборке, а делаем следующее. Мы случайно выбираем один объект из обучающей выборки, например, xi, и дальше вычисляем градиент функционала только на этом объекте, то есть градиент только одного слагаемого в функционале ошибки, и вычитаем именно этот градиент из текущего приближения вектора весов. Очень показательно посмотреть на график сходимости для градиентного спуска и стохастического градиентного спуска. В градиентном спуске мы стараемся на каждую итерацию уменьшить ошибку на всей выборке, и поэтому график получается гладким. По мере увеличения числа итераций ошибка уменьшается монотонно, поскольку мы уменьшаем ее на всей выборке. В случае же со стохастическим градиентным спуском, мы уменьшаем на каждую итерацию ошибку только на одном объекте, но при этом мы можем увеличить ее на другом объекте, поэтому график получается пилообразный. Мы на какой-то итерации можем увеличивать ошибку, но при этом в целом он уменьшается. И рано или поздно мы выходим на довольно неплохое качество, на довольно низкую ошибку. Итак, у стохастического градиентного спуска есть много преимуществ. Во-первых, в нем гораздо быстрее вычисляется один шаг, один градиентный шаг. Так же ему не требуется хранение всей обучающей выборки в памяти. Мы можем считывать по одному объекту из выборки и для каждого следующего объекта делать градиентный шаг. За счет этого стохастический градиентный спуск позволяет обучать линейные модели на очень больших выборках, которые не помещаются в память компьютера. Так же он подходит для онлайн обучения, ситуации, в которой мы получаем за каждый шаг только один объект, и должны как-то изменить модель, чтобы учесть этот объект. Итак, мы обсудили, что градиентный спуск требует суммирование по всем объектам обучающей выборки на каждой итерации, что может быть проблемой, если выборка большая. Стохастический градиентный спуск решает эту проблему, используя лишь один объект обучающей выборки на каждой своей итерации. При этом он имеет много преимуществ и позволяет, например, обучать линейные модели на очень больших выборках, которые не помещаются в память компьютера. В следующем видео мы поговорим о том, как применять линейные модели в задачах классификации.