Градиент

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

Функция стоимости

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

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

Как это работает

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

  • Линии, которые лучше соответствуют нашим данным (где лучше определяется нашей функцией ошибок), приведут к более низким значениям ошибки. Если мы минимизируем эту функцию, мы получим лучшую строку для наших данных. Поскольку наша функция ошибок состоит из двух параметров (m and b), мы можем представить ее в виде двумерной поверхности.

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

  • Горизонтальные оси представляют параметры (w and β), а функция стоимости J(w, β) представлена ​​на вертикальных осях. Вы также можете видеть на изображении, что градиентный спуск является выпуклой функцией.
  • Нам нужно найти значения w и β, которые соответствуют минимуму функции стоимости (отмечено красной стрелкой). Чтобы начать с поиска правильных значений, мы инициализируем значения w и β некоторыми случайными числами, а затем начинаем градиентный спуск с этой точки.
  • Затем он делает один шаг за другим в самом крутом нисходящем направлении, пока не достигнет точки, в которой функция стоимости будет минимально возможной.

Алгоритм

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

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

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

  1. Инициализируйте веса w случайным образом.
  2. Вычислите градиенты Gпараметров функции стоимости относительно. Это делается с помощью частичного дифференцирования G = ∂J(w) / ∂w. Значение градиента G зависит от входных данных, текущих значений параметров модели и функции стоимости. Возможно, вам придется вернуться к теме дифференциации, если вы рассчитываете градиент вручную.
  3. Обновите веса на величину, пропорциональную G, т. е. w = w − ηG.
  4. Повторяйте до тех пор, пока стоимость J(w) не перестанет снижаться или не будут выполнены некоторые другие предварительно определенные критерии завершения.

На шаге 3 η — это скорость обучения, которая определяет размер шагов, которые мы предпринимаем для достижения минимума. Мы должны быть очень осторожны с этим параметром. Высокие значения η могут превышать минимум, а очень низкие значения будут достигать минимума очень медленно.

Скорость обучения

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

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

Когда вы начинаете использовать градиентный спуск для решения конкретной задачи, просто попробуйте 0,001, 0,003, 0,01, 0,03, 0,1, 0,3, 1 и т. д., поскольку это скорость обучения, и посмотрите, какой из них работает лучше всего.

Конвергенция

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

Типы градиентного спуска

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

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

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

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

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

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

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

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

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

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

использованная литература

Приветствуются любые отзывы или конструктивная критика.