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

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

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

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

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

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

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

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

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

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

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

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

Далее будут описаны основные методы, реализующие эту идею.

Метод AdaGrad

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

git=git1+(Ln:n+B1(w)wi)2,wit=witηgit+δ(Ln:n+B1(w)wi),\begin{aligned} 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{aligned}

где

  • tt - номер итерации;

  • ii - номер параметра (оси), вдоль которого производится оптимизация;

  • 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{aligned} 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{aligned}

Гиперпараметр β(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{aligned} 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{aligned}

Перенормировка 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.