Градиент
Градиент измеряет, насколько изменится результат функции, если вы немного измените входные данные. Он просто измеряет изменение всех весов по отношению к изменению ошибки и итеративно корректирует значения, используя вычисления, чтобы они минимизировали заданную функцию. Вы также можете думать о градиенте как о наклоне функции. Чем выше градиент, тем круче наклон и тем быстрее может обучаться модель. Но если наклон равен нулю, модель прекращает обучение. Говоря более математически, градиент — это частная производная по отношению к входным данным.
Функция стоимости
Это способ определить, насколько хорошо работает модель машинного обучения с учетом разных значений каждого параметра. В модели линейной регрессии параметрами будут два коэффициента, β и m :
Поскольку функция стоимости является функцией параметров β и m, мы можем построить функцию стоимости с каждым значением коэффициентов. Учитывая значение каждого коэффициента, мы можем обратиться к функции стоимости, чтобы узнать, насколько хорошо работает модель машинного обучения.
Как это работает
Функция стоимости принимает пару (m,β)
и возвращает значение ошибки в зависимости от того, насколько линия соответствует нашим данным. Чтобы вычислить эту ошибку для заданной строки, мы перебираем каждую (x,y)
точку в нашем наборе данных и суммируем квадратные расстояния между значением y каждой точки и y строки-кандидата. значение (at mx + b)
. Обычно это расстояние возводят в квадрат, чтобы убедиться, что оно положительное, и сделать нашу функцию ошибок дифференцируемой.
- Линии, которые лучше соответствуют нашим данным (где лучше определяется нашей функцией ошибок), приведут к более низким значениям ошибки. Если мы минимизируем эту функцию, мы получим лучшую строку для наших данных. Поскольку наша функция ошибок состоит из двух параметров
(m and b)
, мы можем представить ее в виде двумерной поверхности.
- Каждая точка в этом двумерном пространстве представляет собой линию. Высота функции в каждой точке является значением ошибки для этой линии. Некоторые линии дают меньшие значения ошибки, чем другие (т. е. лучше соответствуют нашим данным). Когда мы запускаем поиск с градиентным спуском, мы начинаем с некоторого места на этой поверхности и двигаемся вниз, чтобы найти линию с наименьшей ошибкой.
- Горизонтальные оси представляют параметры
(w and β)
, а функция стоимостиJ(w, β)
представлена на вертикальных осях. Вы также можете видеть на изображении, что градиентный спуск является выпуклой функцией. - Нам нужно найти значения
w
иβ
, которые соответствуют минимуму функции стоимости (отмечено красной стрелкой). Чтобы начать с поиска правильных значений, мы инициализируем значения w и β некоторыми случайными числами, а затем начинаем градиентный спуск с этой точки. - Затем он делает один шаг за другим в самом крутом нисходящем направлении, пока не достигнет точки, в которой функция стоимости будет минимально возможной.
Алгоритм
Двигаясь вперед, чтобы найти наименьшую ошибку (самую глубокую долину) в функции стоимости (относительно одного веса), нам нужно настроить параметры модели. Используя исчисление, мы знаем, что наклон функции — это производная функции по значению.
Мы можем видеть график функции стоимости (названный Error
с символом J
) только для одного веса. Теперь, если мы вычислим наклон функции стоимости по отношению к этому одному весу, мы получим направление, в котором нам нужно двигаться, чтобы достичь локальных минимумов (ближайшей самой глубокой долины).
Градиент (или производная) сообщает нам наклон или наклон функции стоимости. Следовательно, чтобы минимизировать функцию стоимости, мы движемся в направлении, противоположном градиенту.
- Инициализируйте веса w случайным образом.
- Вычислите градиенты
G
параметров функции стоимости относительно. Это делается с помощью частичного дифференцированияG = ∂J(w) / ∂w
. Значение градиентаG
зависит от входных данных, текущих значений параметров модели и функции стоимости. Возможно, вам придется вернуться к теме дифференциации, если вы рассчитываете градиент вручную. - Обновите веса на величину, пропорциональную
G
, т. е.w = w − ηG
. - Повторяйте до тех пор, пока стоимость
J(w)
не перестанет снижаться или не будут выполнены некоторые другие предварительно определенные критерии завершения.
На шаге 3
η
— это скорость обучения, которая определяет размер шагов, которые мы предпринимаем для достижения минимума. Мы должны быть очень осторожны с этим параметром. Высокие значенияη
могут превышать минимум, а очень низкие значения будут достигать минимума очень медленно.
Скорость обучения
Насколько велики шаги, которые градиентный спуск делает в направлении локального минимума, определяются так называемой скоростью обучения. Он определяет, насколько быстро или медленно мы будем двигаться к оптимальным весам. Чтобы градиентный спуск достиг локального минимума, мы должны установить скорость обучения на соответствующее значение, которое не является ни слишком низким, ни слишком высоким.
Это связано с тем, что если шаги, которые он делает, слишком велики, он, возможно, не достигнет локального минимума, потому что он просто прыгает туда-сюда между выпуклой функцией градиентного спуска, как вы можете видеть в левой части изображения ниже. Если вы установите скорость обучения на очень маленькое значение, градиентный спуск в конечном итоге достигнет локального минимума, но это может занять слишком много времени, как вы можете видеть в правой части изображения.
Когда вы начинаете использовать градиентный спуск для решения конкретной задачи, просто попробуйте 0,001, 0,003, 0,01, 0,03, 0,1, 0,3, 1 и т. д., поскольку это скорость обучения, и посмотрите, какой из них работает лучше всего.
Конвергенция
Как только агент после многих шагов поймет, что стоимость не сильно улучшится и он застрянет очень близко к определенной точке minima
, технически это называется конвергенцией. Значение параметров на этом самом последнем шаге известно как лучший набор параметров, и у нас есть обученная модель.
Типы градиентного спуска
Три популярных типа градиентного спуска, которые в основном различаются объемом данных, которые они используют.
Пакетный градиентный спуск
Также называемый ванильным градиентным спуском, вычисляет ошибку для каждого примера в наборе обучающих данных, но только после оценки всех обучающих примеров модель обновляется. Весь этот процесс подобен циклу и называется эпохой обучения.
Его преимущества заключаются в том, что он эффективен в вычислительном отношении, дает стабильный градиент ошибки и стабильную сходимость. Недостаток пакетного градиентного спуска заключается в том, что стабильный градиент ошибки может иногда приводить к состоянию сходимости, которое не является лучшим, которого может достичь модель. Также требуется, чтобы весь обучающий набор данных находился в памяти и был доступен для алгоритма.
Стохастический градиентный спуск (SGD)
В алгоритмах ванильного градиентного спуска мы вычисляем градиенты для каждого наблюдения один за другим; В стохастическом градиентном спуске мы можем выбирать случайные наблюдения случайным образом. Он называется стохастическим, потому что образцы выбираются случайным образом (или перемешиваются) вместо одной группы (как при стандартном градиентном спуске) или в том порядке, в котором они появляются в обучающем наборе. Это означает, что он обновляет параметры для каждого обучающего примера один за другим. Это может сделать SGD быстрее, чем пакетный градиентный спуск, в зависимости от проблемы.
Одним из преимуществ является то, что частые обновления позволяют нам иметь довольно подробную информацию о скорости улучшения. Частые обновления более затратны в вычислительном отношении, чем подход пакетного градиентного спуска. Частота этих обновлений также может привести к зашумленным градиентам, из-за чего частота ошибок может скачкообразно прыгать, а не медленно уменьшаться.
Мини-пакетный градиентный спуск
Представляет собой комбинацию концепций SGD и пакетного градиентного спуска. Он просто разбивает набор обучающих данных на небольшие пакеты и выполняет обновление для каждого из этих пакетов. Поэтому он создает баланс между надежностью стохастического градиентного спуска и эффективностью пакетного градиентного спуска.
Общие размеры мини-пакетов варьируются от 50 до 256, но, как и для любых других методов машинного обучения, нет четкого правила, поскольку они могут различаться для разных приложений. Это наиболее распространенный тип градиентного спуска в рамках глубокого обучения.
использованная литература
- https://towardsdatascience.com/gradient-descent-in-a-nutshell-eaf8c18212f0
- (https://spin.atomicobject.com/2014/06/24/gradient-descent-linear-regression)
Приветствуются любые отзывы или конструктивная критика.