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

Предположим, вы заблудились в горах в густом тумане; вы можете найти склон только под своей ногой. Хорошая стратегия состоит в том, чтобы идти по дну долины, спускаясь по склону в направлении самого крутого склона. Именно это и делает градиентный спуск: он измеряет локальный градиент функции ошибки относительно вектора параметров (тета) и движется в направлении нисходящего градиента. Как только градиент равен нулю, вы достигли минимума!

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

Расходы:

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

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

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

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

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

Пакетный градиентный спуск:

Чтобы реализовать градиентный спуск, вам нужно вычислить градиент функции стоимости относительно каждого параметра модели (тета). Другими словами, вам нужно рассчитать, насколько изменится функция стоимости, если вы немного измените (тета). Это называется частной производной. Это все равно, что спросить «какой наклон под моими ногами, если я повернусь лицом на восток», а затем задать тот же вопрос лицом на север (и вскоре для всех измерений, если вы можете представить вселенную с более чем тремя измерениями).

Это уравнение вычисляет функцию стоимости относительно параметра (тета).

Это частная производная функции стоимости.

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

Когда у вас есть вектор градиента, который будет указывать на гору, просто идите в противоположном направлении, чтобы идти вниз. Это означает вычитание MSE(тета) из (тета). Именно здесь в игру вступает скорость обучения, умножая вектор градиента на скорость обучения (n), чтобы определить размер, который нужно спустить.

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

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

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

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

Таким образом, случайность — это хорошо, чтобы уйти от минимума, но плохо, потому что это означает, что алгоритм никогда не остановится на глобальном минимуме. Одно из решений этой дилеммы — постепенное снижение скорости обучения. Шаги начинаются большими (что помогает быстро прогрессировать и избегать локальных минимумов), а затем становиться все меньше и меньше, позволяя алгоритму остановиться на глобальном минимуме.

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

Мини-пакетный градиентный спуск:

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

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

Алгоритмы обрабатывают с меньшим пространством параметров и менее неустойчивы, чем с SGD, особенно с довольно большими мини-пакетами. В результате мини-партии ходят немного ближе к минимуму, чем SGD. Но, с другой стороны, уйти от локального минимума может быть труднее. Стохастический и мини-пакетный градиентный спуск заканчиваются близко к минимуму, но пути пакетного GD фактически останавливаются на минимуме, он не застревает в локальном минимуме и не продолжает идти рядом с минимумом. Однако не забывайте, что пакетный градиентный спуск занимает как минимум много времени, но решение, данное с использованием пакетного GD, является оптимальным решением.

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

Спасибо за чтение!