Перейти к основному содержимому

Оптимизаторы с переменным шагом

Проблемой стандартных градиентных методов оптимизации, таких как стохастический градиентный спуск (SGD) или стохастический градиентный спуск с инерцией (SGD+momentum) является то, что они устанавливают одинаковый шаг обучения η\eta (learning rate) вдоль всех направлений в пространстве настраиваемых весов нейросети. Это не оптимально, поскольку

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

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

Пример функции потерь с разной скоростью изменений показан на рисунке ниже вместе с разрезами вдоль каждой из осей:

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

Идея улучшения методов оптимизации для настройки нейросетей заключается в подборе своей скорости изменений весов вдоль каждой оси в пространстве весов.

Например на рисунке выше имеет смысл шаг обучения вдоль оси w1w_1 выбрать поменьше, а вдоль оси w2w_2 - побольше.

В действительности всё сложнее...

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

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

Скорость изменения функции потерь вдоль оси определяется абсолютным значением частной производной функции потерь вдоль соответствующей оси.

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

Метод AdaGrad

Метод AdaGrad [1] производит изменение каждого веса wiw_i вектора весов wRK\mathbf{w}\in\mathbb{R}^K по следующим формулам:

git=git1+(Ln:n+B1(w)wi)2wit=witηgit+δ(Ln:n+B1(w)wi)\begin{align*} g_i^t &= g_i^{t-1}+\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right)^2 \\ w^t_i &= w^t_i-\frac{\eta}{\sqrt{g^t_i}+\delta}\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right) \end{align*}

где

  • KK - число настраиваемых весов сети;

  • δ=108\delta=10^{-8} - фиксированное смещение, чтобы избежать деления на ноль;

  • Ln:n+B1(w)\mathcal{L}_{n:n+B-1}(\mathbf{w}) - средние потери по мини-батчу объектов n,n+1,...n+B1n,n+1,...n+B-1.

Метод RMSprop

В методе AdaGrad квадрат градиента кумулятивно накапливается в нормировке gitg^t_i. Если в начале оптимизации функция потерь менялась резко, а потом стала меняться плавно, то gitg^t_i всё равно будет большим, а скорость изменения весов - малой. Метод RMSprop (root mean square propagation, [2]) лишён этого недостатка за счёт усреднения квадрата градиента экспоненциальным сглаживанием, за счёт которого возможные большие градиенты в начале оптимизации будут забываться экспоненциально быстро. То есть обновление каждого вектора весов wiw_i для i=1,2,...Ki=1,2,...K будет производиться по формулам:

git=βgit1+(1β)(Ln:n+B1(w)wi)2wit=witηgit+δ(Ln:n+B1(w)wi)\begin{align*} g_i^t &= \beta g_i^{t-1}+(1-\beta)\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right)^2 \\ w^t_i &= w^t_i-\frac{\eta}{\sqrt{g^t_i}+\delta}\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right) \end{align*}

Гиперпараметр β(0,1)\beta\in(0,1) отвечает за длину истории, по которой копится квадрат градиента, и обычно выбирается равным β=0.9\beta=0.9.

Метод Adam

Метод Adam (adaptive moments, [3]) совмещает метод RMRprop с внесением инерции (momentum) и является самым популярным методом настройки нейросетей.

Обновление каждого веса wiw_i для i=1,2,...Ki=1,2,...K будет происходить по следующим формулам:

sit=β1sit1+(1β1)(Ln:n+B1(w)wi)git=β2git1+(1β2)(Ln:n+B1(w)wi)2s^it=sit1β1tg^it=git1β2twit=witηg^it+δs^it\begin{align*} s_i^t &= \beta_1 s_i^{t-1}+(1-\beta_1)\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right) \\ g_i^t &= \beta_2 g_i^{t-1}+(1-\beta_2)\left(\frac{\partial \mathcal{L}_{n:n+B-1}(\mathbf{w})}{\partial w_i}\right)^2 \\ \hat{s}^t_i &= \frac{s^t_i}{1-\beta_1^t} \\ \hat{g}^t_i &= \frac{g^t_i}{1-\beta_2^t} \\ w^t_i &= w^t_i-\frac{\eta}{\sqrt{\hat{g}^t_i}+\delta}\hat{s}_i^t \end{align*}

Перенормировка sits_i^t и gitg_i^t осуществляется, чтобы избежать смещения оценок, вызванных инициализацией si0=gi0=0s_i^0=g_i^0=0.

Обычно гиперпараметры β1,β2(0,1)\beta_1,\beta_2\in (0,1) берут равными

β1=0.9,β2=0.99.\beta_1 = 0.9,\quad \beta_2=0.99.

Псевдокод метода представлен ниже для векторов d,s,g,s^,g^,w\mathbf{d},\mathbf{s},\mathbf{g},\hat{\mathbf{s}},\hat{\mathbf{g}},\mathbf{w}:

перемешать объекты выборки

инициализировать w\mathbf{w} случайно

n:=1n:=1

s:=0\mathbf{s}:=\mathbf{0} # вектор из нулей

g:=0\mathbf{g}:=\mathbf{0} # вектор из нулей

ПОВТОРЯТЬ

    d:=wLn:n+B1(w)\mathbf{d} := \nabla_\mathbf{w} \mathcal{L}_{n:n+B-1}(\mathbf{w})

    s:=β1s+(1β1)d\mathbf{s}:=\beta_1\mathbf{s}+(1-\beta_1)\mathbf{d}

    g:=β2g+(1β2)dd\mathbf{g}:=\beta_2 \mathbf{g}+(1-\beta_2)\mathbf{d}\odot \mathbf{d}

    s^:=s/(1β1t)\hat{\mathbf{s}}:=\mathbf{s}/(1-\beta_1^t)

    g^:=g/(1β2t)\hat{\mathbf{g}}:=\mathbf{g}/(1-\beta_2^t)

    w:=wηg+δs^\mathbf{w}:=\mathbf{w}-\frac{\eta}{\sqrt{\mathbf{g}}+\delta}\odot\hat{\mathbf{s}}

    n:=n+1n:=n+1

    ЕСЛИ n>Nn>N:

        перемешать объекты выборки

        n:=1n:=1

ДО СХОДИМОСТИ

В псевдокоде \odot - обозначает поэлементное перемножение векторов, а извлечение корня из вектора g\mathbf{g} и деление на него также происходит поэлементно.

Литература

  1. Duchi J., Hazan E., Singer Y. Adaptive subgradient methods for online learning and stochastic optimization //Journal of machine learning research. – 2011. – Т. 12. – №. 7.

  2. Hinton, G. E. 2012. Neural Networks for Machine Learning. Lecture 6.5. Coursera Lectures.

  3. Kingma D. P., Ba J. Adam: A method for stochastic optimization //arXiv preprint arXiv:1412.6980. – 2014.