Оптимизаторы с постоянным шагом
Метод градиентного спуска
Нейросети оптимизируют свои веса, минимизируя средние потери по обучающей выборке:
где - потери на объекте .
Поскольку нейросети представляют собой суперпозицию большого числа нелинейных преобразований, то минимизация не будет допускать аналитического решения и будет решаться градиентными методами.
Градиентные методы оптимизации основаны на линейной аппроксимации функции потерь:
согласно которому наибольшая локальная скорость убывания функции потерь достигается вдоль её антиградиента (). На этой идее основан метод градиентного спуска (gradient descent):
инициализировать случайно
ПОВТОРЯТЬ
ДО СХОДИМОСТИ
где - шаг обучения (learning rate), влияющий на скорость сходимости.
Для выбора шага обучения нужно строить зависимость от номера итерации. Потери на графике должны убывать по ходу итераций и не слишком медленно. Если потери растут, это свидетельствует о расходимости, и необходимо уменьшить шаг обучения .
Инициализация весов
Инициализировать начальные значения весов нужно случайно, а не одинаковыми константами, иначе для симметрично расположенных нейронов с одинаковыми весами на каждом шаге оптимизации из симметрии они будут изменяться синхронно на одинаковую величину, и нейроны будут извлекать одинаковые признаки!
Обычно смещения инициализируют нулём, а прочие веса инициализируют
-
из равномерного распределения
-
либо из нормального распределения .
Детали инициализации и формулы для расчётов и будут подробно рассмотрены далее в отдельной главе.
Недостатком метода градиентного спуска является сложность вычисления градиента на каждом шаге, поскольку она пропорциональна числу объектов выборки .
Онлайновый метод стохастического градиентного спуска
Более быстрым является онлайновый метод стохастического градиентного спуска (online stochastic gradient descent), в котором используется приближение
т.е. градиент по всем объектам приближается градиентом всего лишь по одному случайно выбранному объекту . На практике объект не сэмплируют каждый раз случайно, а вначале перед каждой эпохой (проходу по всем объектам выборки, epoch) объекты перемешивают в случайном порядке (с возвращением), а затем проходят по ним последовательно, как показано в алгоритме:
перемешать объекты выборки
инициализировать случайно,
ПОВТОРЯТЬ
ЕСЛИ :
перемешать объекты выборки
ДО СХОДИМОСТИ
Поскольку для приближения градиента используется каждый раз новый объект выборки, то после итераций этот метод задействует информацию о всей обучающей выборке.
Недостатком OSGD является использование слишком зашумлённых версий исходного градиента , поскольку для оценки используется всего лишь один объект. Это не препятствует сходимости метода при выборе достаточно малого (и убывающего с опр еделённой скоростью) шага обучения , но замедляет его, поскольку задействует лишь малое число вычислительных ресурсов за каждый такт оптимизации.
Стохастический градиентный спуск по мини-батчам
Чтобы ускорить метод OSGD, рекомендуется использовать стохастический градиентный спуск по мини-батчам (mini-batch stochastic gradient descent, MSGD). Его также называют просто методом стохастического градиентного спуска (stochastic gradient descent, SGD). Его идея заключается в том, что для оценки градиента используется набор из объектов:
где обозначает, что усреднение происходит по объектам .
Псевдокод метода представлен ниже:
перемешать объекты выборки
инициализировать случайно
ПОВТОРЯТЬ
ЕСЛИ :
перемешать объекты выборки
ДО СХОДИМОСТИ
выбирают исходя из максимального числа операций, которое процессор/видеокарта может обработать за один такт, чтобы максимально задействовать вычислительные ресур сы.