задний фон
Для студентов, которые более знакомы с машинным обучением и глубоким обучением, вы, вероятно, должны были услышать это предложение: машинное обучение = модель + стратегия + алгоритм. На самом деле, когда я впервые начал учиться, у меня было общее представление об этой концепции, но потребовалось время, чтобы действительно понять, что это за три вещи.
- Модель: это функция, выражение или структура сети, которую вы хотите изучить.
- Стратегия: Суть в том, как уменьшить разрыв между значением вывода и фактическим значением модели исследования, включая обучающие данные, тестовые данные и даже неизвестные данные.
- Алгоритм: Суть состоит в том, чтобы уменьшить разрыв между значением вывода и фактическим значением, введенным выше, с помощью алгоритма оптимизации, обычно с помощью итеративного инкрементного алгоритма.
Градиентный спуск является предпочтительным методом оптимизации нейронных сетей и многих других алгоритмов машинного обучения, но при его использовании процесс используется как черный ящик, и внутренний механизм работы не очень ясен. В этой статье обсуждаются самые популярные алгоритмы оптимизации на основе градиента, такие как Momentum, Adagrad и Adam, а также другие расширенные варианты использования.
Градиентный спуск — один из самых популярных алгоритмов оптимизации и, безусловно, наиболее часто используемый метод оптимизации нейронных сетей. Между тем, каждая современная библиотека глубокого обучения содержит реализации различных алгоритмов для оптимизации градиентного спуска (например, TensorFlow, Caffe, MxNet и т. д.). Однако эти алгоритмы часто используются в качестве оптимизаторов черного ящика, потому что трудно найти практическое объяснение их сильных и слабых сторон. Давайте сначала рассмотрим различные варианты градиентного спуска. Затем мы кратко суммируем трудности в обучении. Впоследствии мы представим наиболее распространенные алгоритмы оптимизации, показав их мотивацию для решения этих задач и то, как это приводит к их правилам обновления.
Два градиентных спуска и их варианты
Существует три варианта градиентного спуска, которые различаются тем, сколько данных мы используем для вычисления градиента целевой функции. В зависимости от объема данных мы находим компромисс между точностью обновления параметра и временем, которое требуется для выполнения обновления.
Пакетный градиентный спуск
Для всего набора данных загрузите все данные, рассчитайте значение градиента всей функции и обновите параметры.Поскольку все данные должны быть загружены, требования к памяти для рабочего состояния высоки, и это не очень подходит в случае огромного количества данных легко осуществить. Поскольку нам нужно вычислить градиент всего набора данных для выполнения обновления, пакетный градиентный спуск может быть очень медленным, сложным для наборов данных, которые не помещаются в памяти, а также неуместным для обновлений онлайн-сервисов, которые нельзя использовать онлайн. обновление и коррекция временной модели выполняются в режиме обучения.
Псевдокод метода пакетного градиентного спуска выглядит следующим образом, вы можете его посмотреть:
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_function, data, params)
params = params - learning_rate * params_grad
Стохастический градиентный спуск
Пакетный градиентный спуск выполняет ту же операцию на всей выборке, вычисляя градиенты для всех выборок перед каждым обновлением параметра. SGD завершает обновление параметра посредством одного выполнения выборки. Поэтому он обычно быстрее и также может использоваться для онлайн-обучения.
SGD использует высокую дисперсию для частых обновлений, в результате чего целевая функция сильно колеблется, как показано на рисунке ниже.
Колебания SGD, с одной стороны, позволяют ему переходить к новым, возможно, лучшим локальным минимумам, когда пакетный градиентный спуск сходится к локальным минимумам, в которых находятся параметры. С другой стороны, это усложняет сходимость к точному минимуму, поэтому SGD необходимо дополнительно настроить. Когда мы медленно уменьшаем скорость обучения, SGD демонстрирует то же поведение сходимости, что и пакетный градиентный спуск, почти наверняка сойдясь к локальному или глобальному минимуму как для невыпуклой, так и для выпуклой оптимизации соответственно. Псевдокод для стохастического градиентного спуска выглядит следующим образом:
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_grad
Мини-пакетный градиентный спуск
Мини-пакетный градиентный спуск — это компромисс между пакетным градиентным спуском и стохастическим градиентным спуском.Градиент вычисляется для каждого мини-пакета данных, и параметры обновляются.
Китайцы обращают внимание на «умеренный способ», и небольшое пакетное обновление градиента также является своего рода модерацией, так каковы его характеристики?
- Во-первых, уменьшается дисперсия обновлений параметров за счет использования небольших пакетов вместо случайных одиночных, что делает сходимость более стабильной;
- Во-вторых, высокооптимизированные матричные операции, расширенные библиотеки глубокого обучения могут быть использованы для повышения эффективности вычисления градиентов.
Размер Mini Batch обычно устанавливается равным 128, 25, 512 и т. д. Кроме того, он также зависит от размера распределенного кластера, который необходимо гибко настраивать в соответствии с реальной ситуацией. Мини-пакетный градиентный спуск — типичный алгоритм выбора для обучения нейронной сети.
Три проблемы алгоритмов оптимизации
Однако градиентный спуск небольшими партиями не гарантирует хорошей сходимости, а также создает некоторые проблемы, которые необходимо решить.
- Выбрать подходящую скорость обучения сложно. Слишком маленькая скорость обучения приведет к медленной сходимости, в то время как слишком большая скорость обучения будет препятствовать сходимости, в результате чего функция потерь будет колебаться вокруг минимума или даже расходиться.
- Попробуйте настроить скорость обучения во время обучения, например, с помощью алгоритма отжига, то есть уменьшите скорость обучения в соответствии с заранее определенным правилом или когда цель изменяется ниже порогового значения. Однако эти правила и пороговые значения должны быть определены заранее и поэтому не могут быть адаптированы к характеристикам набора данных.
- Кроме того, скорость обучения для всех обновлений параметров одинакова. Если наши данные скудны, а наши функции имеют очень разную частоту, мы можем не захотеть обновлять все функции в одинаковой степени, а выполнять более крупные обновления для функций, которые появляются нечасто.
- Еще одна ключевая проблема при минимизации очень невыпуклых функций ошибок, обычно встречающихся в нейронных сетях, заключается в том, чтобы не застревать в их многочисленных субоптимальных локальных минимумах. На самом деле сложность возникает не из-за локальных минимумов, а из-за седловых точек, точек, где одно измерение наклоняется вверх, а другое — вниз. Эти седловые точки обычно окружены плато с той же ошибкой, что затрудняет выход SGD, поскольку градиент близок к нулю во всех измерениях.
Четыре ссылки
- Обзор алгоритмов оптимизации градиентного спуска∗АР Вест V.org/PDF/1609.04…
Пять о себе
Личное представление: Ду Баокун, создатель федеративного обучения JD.com от 0 до 1, возглавил команду по созданию решения для федеративного обучения JD.com, реализовал супер-крупномасштабное промышленное решение для федеративного обучения в области маркетинга электронной коммерции. , а также поддерживает сверхкрупномасштабный образец выравнивания конфиденциальности PSI. Он поддерживается многими моделями, такими как модель безопасного дерева и модель нейронной сети, и реализует реализацию бизнес-стороны, такой как реклама, создание новых точек роста бизнеса и производство значительных экономические выгоды для бизнеса. Лично люблю изучать технологии. На основе рассмотрения полносвязного мышления и планирования технологий принятия решений существует множество областей исследований, начиная от архитектуры, данных и заканчивая алгоритмами и алгоритмическими структурами. Приветствую студентов, которым нравятся технологии, чтобы общаться со мной, по электронной почте:baokun06@163.com
Продолжение следует, ждем с нетерпением!