Про градієнтних методах навчання багатошарових нейронних мереж прямого поширення

Частина 2: Градієнтні методи першого порядку.

Цей текст є прололженіем статті про методи навчання багатошарових нейронних мереж прямого поширення. Тут ми поговоримо про градієнтних методах першого порядку навчання класифікатора.

1. Введення.

У попередній статті ми формально поставили завдання навчання класифікатора $ h $ як мінімізацію функції втрати в просторі ваг. \ Begin \ min_W E (h (X, W), C) \ label \ end

Далі ми займемося вирішенням цього завдання.

2. Градієнтні методи навчання першого порядку

Для вирішення завдання (\ ref), ми будемо використовувати градієнтні методи оптимізації (першого порядку). Градієнт функції $ \ nabla E (W) $ в точці $ W $ це напрямок найшвидшого її зростання, відповідно для мінімізації функції необхідно змінювати параметри в сторону протилежну градієнту. Цей підхід називається методом градієнтного спуску. Загальна схема такого навчання виглядає наступним чином.

  1. форматувати ваги $ W $ (випадковими малими значеннями)
  2. обчислюємо помилку $ E (h (X, W), C) $
  3. якщо результат задовільний то кінець роботи
  4. обчислюємо значення градієнта ф-ції втрати: $ \ nabla E (h (X, W), C) $
  5. обчислюємо зміна параметрів: $ \ Delta W = \ eta \ cdot \ nabla E $
  6. коригуємо параметри: $ W: = W- \ Delta W $
  7. перехід на п.2
Параметр $ \ eta $ називають швидкістю навчання. він визначає величину кроку процесу оптимізації і його вибір це окреме завдання, в найпростішому випадку його задають як константу $ 0 \ lt \ eta \ lt 1 $.

Таким чином, наступне завдання, яке необхідно вирішити для реалізації навчання нейронної мережі, це знайти спосіб обчислення градієнта функції втрати $ \ nabla E (h (X, W), C) $.

3. Метод зворотного поширення помилки.

Для вирішення завдання оптимізації (\ ref) методом градієнтного спуску, описаному в попередньому розділі, нам необхідно знайти спосіб обчислення градієнта функції втрати $ \ nabla E $, який представляє собою вектор приватних похідних. $$ \ nabla E (W) = \ left [\ frac \ ldots, \ frac \ right] $$ де $ k $ - загальна кількість ваг мережі.

де $ E $ - функція втрати, $ w_ $ - вага зв'язку нейронів $ i $ і $ j $, $ y_j $ - вихід нейрона номер $ j $, $ s_j $ - стан нейрона $ j $.

Розглянемо частини співвідношення ($ \ ref $) окремо.

$ \ Partial s_j / \ partial w_ $ - вихід $ i $-того нейрона попереднього (по відношенню до нейрона $ j $) шару, ця частина визначена в явному вигляді,

$ \ Partial y_j / \ partial s_j $ боку - значення похідної активационной функції по її аргументу для нейрона $ j $, цю частину досить просто можна обчислити,

$ \ Partial E / \ partial y_j $ - помилка нейрона номер $ j $, тут виникають деякі труднощі. Значення помилки визначено явно тільки для нейронів вихідного шару, як бути з прихованими шарами? Тут нам допоможе спосіб, який носить назву - метод зворотного поширення помилки.

Суть його полягає в послідовному обчисленні помилок прихованих шарів за допомогою значень помилки вихідного шару, тобто значення помилки поширюються по мережі в зворотному напрямку від виходу до входу.
Тут ми не будемо наводити висновок формул, відразу наведемо результат - рекурсивную формулу для розрахунків величини $ \ partial E / \ partial y $.

для вихідного шару $$ \ delta_i: = \ frac $$ для прихованого шару \ begin \ delta_i: = \ frac \ cdot \ sum \ limits_j \ delta_j w_ \ label \ end де $ \ partial y / \ partial s $ - значення похідної активационной функції по її аргументу.

Сам алгоритм розрахунку градієнта функції втрати методом зворотного поширення помилки виглядає наступним чином.
  1. прямий прохід: обчислити стану нейронів $ s $ всіх шарів і вихід мережі
  2. обчислюємо значення $ \ delta: = \ partial E / \ partial y $ для вихідного шару
  3. зворотний прохід: послідовно від кінця до початку для всіх прихованих шарів обчислюємо $ \ delta $ за формулою ($ \ ref $)
  4. для кожного шару обчислюємо значення градієнта $ \ nabla E = \ partial E / \ partial W = y \ cdot \ delta ^ T $,
    де $ y $ - вектор-вхід шару, $ \ delta $ - вектор помилки на виході шару.
Далі ми розглянемо різні модифікації методу градієнтного спуску для навчання нейронної мережі і їх реалізації.

4. Метод градієнтного спуску

Вище ми вже наводили схему методу градієнтного спуску, тут буде представлена ​​його трохи ускладнена версія, цей алгоритм є базовим для алгоритмів описаних в наступних розділах.

Метод градієнтного спуску в "чистому" вигляді може "застрявати" в локальних мінімумах функції втрати $ E $, для боротьби з цим ми будемо використовувати кілька доповнень для цього методу. Перше доповнення це застосування вже описаної вище стратегії mini-batch, а друге це так звані "моменти".

Метод моментів можна порівняти з поведінкою важкого кульки, який скотився по схилу в найближчу низину деяку відстань здатний рухатися вгору за інерцією, вибираючись таким чином з локальних мінімумів. Формально це виглядає як добавка для зміни ваг мережі. $$ \ Delta W_t: = \ eta \ cdot \ nabla E + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації.

Ще одним удосконаленням методу оптимізації буде застосування регуляризації. Регуляризація "накладає штраф" на надмірний ріст значень ваг це допомагає боротися з перенавчанням. Формально це виглядає ще одна добавка для зміни ваг мережі. $$ \ Delta W_t: = \ eta \ cdot \ left (\ nabla E + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W_ $ - значення ваг на попередній ітерації.

Так само ми будемо змінювати коефіцієнт швидкості навчання $ \ eta $ на кожній ітерації $ t $ в залежності від зміни помилки $ E $ наступним чином.

$$ \ eta_t = \ left \ \ Alpha \ cdot \ eta_ . \ Delta E \ gt 0 \\ \ beta \ cdot \ eta_ . - \ end \ right. $$ де $ \ eta_0 = 0.01 $ - початкове значення швидкості навчання,
$ \ Delta E = E_t - \ gamma \ cdot E_ $ - зміна помилки,
$ \ Alpha = 0.99, \ \ beta = 1.01, \ \ gamma = 1.01 $ - константи

Таким чином, при істотному зростанні помилки $ E $ крок зміни параметрів $ \ eta $, зменшується, в іншому випадку - крок $ \ eta $ збільшується. Це доповнення може збільшити швидкість збіжності алгоритму.

Зберемо все разом, наш алгоритм набуває такого вигляду.
  1. форматувати ваги $ W $ (випадковими малими значеннями)
  2. форматувати нулями початкові значення зміни ваг $ \ Delta W $
  3. обчислюємо помилку $ E (h (X, W), C, W) $ і її зміна $ \ Delta E $ на контрольному наборі
  4. якщо результат задовільний то то виконуємо підсумковий тест і кінець роботи
  5. випадковим чином вибрати підмножина $ (X, C) _L $ з навчального набору
  6. обчислюємо значення градієнта функції втрати $ \ nabla E $ на обраному підмножині
  7. обчислюємо зміна параметрів: $ \ Delta W: = \ eta \ cdot (\ nabla E + \ rho \ cdot W) + \ mu \ cdot \ Delta W $
  8. коригуємо параметри: $ W: = W- \ Delta W $
  9. коригуємо швидкість навчання $ \ eta $
  10. перехід на п.3
Далі побудуємо реалізацію і подивимося як це працює.

5. Метод quickProp

У цьому розділі ми розглянемо модифікацію описаного в попередньому розділі методу градієнтного спуску, яка називається quickProp. Від базового методу він відрізняється тим, що параметр моменту $ \ mu $ і коефіцієнт швидкості навчання $ \ eta $ задаються індивідуально для кожного параметра. Зміна параметрів описується наступним співвідношенням. $$ \ Delta W: = \ eta \ cdot (\ nabla E + \ rho \ cdot W) + \ mu \ cdot \ Delta W $$ де $ \ rho $ - коефіцієнт регуляризації.

Параметр швидкості навчання обчислюється таким чином. $$ \ eta = \ left \ \ eta_0 . (\ Delta W = 0) \ lor (- \ Delta W \ cdot S \ gt 0) \\ 0 . - \ end \ right. $$ де $ \ eta_0 \ in (0.01. 0.6) $ - константа, $ S = \ nabla E + \ rho W $

Параметр моменту виглядає наступним чином. $$ \ mu = \ left \ \ mu_ . (\ Beta \ gt \ mu_) \ lor (\ gamma \ lt 0) \\ \ beta . - \ end \ right. $$ де $ \ mu_ = 1.75 $ - константа,
$ S = \ nabla E + \ rho W $,
$ \ Beta = S (t) / (S (t-1) - S (t)) $
$ \ Gamma = S \ cdot (- \ Delta W) \ cdot \ beta $

Далі побудуємо реалізацію і подивимося як це працює.

6. Метод rProp

У цьому розділі ми розглянемо модифікацію описаного в попередньому розділі методу градієнтного спуску, яка називається rProp (resilient back propagation). У разі rProp моменти і регуляризація не використовуються, застосовується проста стратегія full-batch. Ключову роль відіграє параметр швидкості навчання $ \ eta $, він розраховується для кожного ваги індивідуально. $$ \ eta (t) = \ left \ min (\ eta_, a \ cdot \ eta (t-1)) . S \ gt 0 \\ max (\ eta_, b \ cdot \ eta (t-1)) . S \ lt 0 \\ \ eta (t-1) . S = 0 \ end \ right. $$ де $ S = \ nabla E (t-1) \ cdot \ nabla E (t) $ - твори значень градієнта на цьому і попередньому кроці,
$ \ Eta_ = 50 \, \ \ eta_ = 10 ^ \, \ a = 1.2 \, \ b = 0.5 $ - константи

Зміна параметрів виглядає наступним чином.

$$ \ Delta W_t: = \ eta \ cdot \ left (sign (\ nabla E) + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $$ sign (x) = \ left \ -1 . x \ lt 0 \\ 0 . x = 0 \\ 1 . x \ gt 0 \ end \ right. $$

7. Метод сполучених градієнтів

У цьому розділі ми розглянемо метод сполучених градієнтів (conjugate gradient). Особливість цього методу - спеціальний вибір напрямок зміни параметрів. Воно вибирається таким чином, що б було ортогональним до попередніх напрямів. Повна зміна ваг виглядає наступним чином. $$ \ Delta W: = \ eta \ cdot (p + \ rho \ cdot W) + \ mu \ cdot \ Delta W $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ P $ - напрямок зміни параметрів,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W $ - значення ваг на попередній ітерації.

При цьому коефіцієнт швидкості навчання $ \ eta $, вибирається на кожній ітерації, шляхом вирішення задачі оптимізації. $$ \ min_ \ eta E (\ Delta W (\ eta)) $$

Напрямок зміни параметрів вибирається в такий спосіб. $$ p = \ nabla E + \ beta \ cdot p $$ Початковий напрямок вибирається як $ p_0: = \ nabla E $.

Ключовим моментом є обчислення коефіцієнта сполучення $ \ beta $. Його можна обчислювати по крайней мере двома різними способами. Перший спосіб - формула Флетчера-Ривса. $$ \ beta = \ frac ^ T \ cdot g_>; $$ Другий спосіб - формула Полак-Рібьер. $$ \ beta = \ frac)> ^ T \ cdot g_>; $$ де $ g = \ nabla E $ - градієнт функції втрати на цій і попередній ітераціях.

Для компенсації накопичується похибки обчислень метод передбачає скидання сполученого напрямки тобто ($ \ Beta: = 0 $, $ p: = \ nabla E $) через кожні $ n $ циклів, де $ n $ вибирається залежно від кількості параметрів W.

8. Метод NAG (Nesterov's Accelerated Gradient)

У цьому розділі ми розглянемо модифікацію методу градієнтного спуску NAG, тут градієнт обчислюється щодо зсунутих на значення моменту ваг. $$ \ Delta W_t: = \ eta \ cdot \ left (\ nabla E (W_ + \ mu \ cdot \ Delta W_) + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W_ $ - значення ваг на попередній ітерації.

(I.Sutskever, J.Martens, G.Dahl, G.Hinton On the importance of initialization and momentum in deep learning)

9. Метод AdaGrad (Adaptive Gradient)

Метод AdaGrad враховує історію значень градієнта в такий спосіб. $$ g_t: = \ frac<\nabla E_t><\sqrt<\sum\limits_^t \nabla E_i^2>> $$ $$ \ Delta W_t: = \ eta \ cdot \ left (g_t + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W_ $ - значення ваг на попередній ітерації.

(J.Duchi, E.Hazan, Y.Singer, Adaptive Subgradient Methods for Online Learning and Stochastic Optimization)

10. Метод AdaDelta

Метод AdaDelta враховує історію значень градієнта і історію зміни ваг наступним чином. $$ S_t: = \ alpha \ cdot S_ + (1 \ alpha) \ cdot \ nabla E_t ^ 2 \; \ S_0: = 0 $$ $$ D_t: = \ beta \ cdot D_ + (1 \ beta) \ cdot \ Delta W_ ^ 2 \; \ D_0: = 0 $$ $$ g_t: = \ frac<\sqrt><\sqrt> \ Cdot \ nabla E_t $$ $$ \ Delta W_t: = \ eta \ cdot \ left (g_t + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W_ $ - значення ваг на попередній ітерації,
$ \ Alpha = \ beta = 0.9 $

(M.Zeiler Adadelta: an adaptive learning rate method)

11. Метод Adam

Метод Adam перетворює градієнт наступним чином. $$ S_t: = \ alpha \ cdot S_ + (1 \ alpha) \ cdot \ nabla E_t ^ 2 \; \ S_0: = 0 $$ $$ D_t: = \ beta \ cdot D_ + (1 \ beta) \ cdot \ nabla E_t \; \ D_0: = 0 $$ $$ g_t: = \ frac \ Cdot \ sqrt<\frac> $$ $$ \ Delta W_t: = \ eta \ cdot \ left (g_t + \ rho \ cdot W_ \ right) + \ mu \ cdot \ Delta W_ $$ де $ \ eta $ - коефіцієнт швидкості навчання,
$ \ Nabla E $ - градієнт функції втрати,
$ \ Mu $ - коефіцієнт моменту,
$ \ Delta W_ $ - зміна ваг на попередній ітерації,
$ \ Rho $ - коефіцієнт регуляризації,
$ W_ $ - значення ваг на попередній ітерації,
$ \ Alpha = 0.999, \ \ beta = 0.9 $

(Diederik P. Kingma, Jimmy Lei Ba Adam: a method for stochastic optimization)

12. Реалізації.

У цьому розділі ми представимо реалізації описаних вище методів. Тестувати їх будемо на декількох наборах даних - три набори крапок (в двох класах) і набір картинок з цифрами від 0 до 9 для розпізнавання. Кожен набір точок перед запуском процедури навчання випадковим чином ділитися на три частини: навчальний, контрольний і тестовий.

12.1 Перший набір.

Далі представимо результати для різних методів навчання.

Метод градієнтного спуску. будемо використовувати нейронну мережу з трьома обробними шарами: вхідний шар 2 нейрона, перший обробляє шар 20 нейронів з активацією tanh, другий обробляє шар 20 нейронів з активацією експонентний сигмоид, третій шар - 2 нейрона (по числу класів) з активацією softmax. Навчання зайняло 2500 епох, результати представлені нижче.


Рис .: історія зміни помилки ч.1


Рис .: історія зміни помилки ч.2


Рис .: результат тесту

Метод сполучених градієнтів. будемо використовувати нейронну мережу з трьома обробними шарами: вхідний шар 2 нейрона, перший обробляє шар 30 нейронів з активацією експонентний сигмоид, другий обробляє шар 30 нейронів з активацією ReLU, третій шар - 2 нейрона (по числу класів) з активацією softmax. Навчання зайняло 100 епох, результати представлені нижче.


Рис .: історія зміни помилки ч.1


Рис .: історія зміни помилки ч.2


Рис .: результат тесту

Метод quickProp. використовуватимемо будемо використовувати нейронну мережу з трьома обробними шарами: вхідний шар 2 нейрона, перший обробляє шар 20 нейронів з активацією tanh, другий обробляє шар 20 нейронів з активацією tanh, третій шар - 2 нейрона (по числу класів) з активацією експонентний сигмоид. Навчання зайняло 3000 епох, результати представлені нижче.


Рис .: історія зміни помилки ч.1


Рис .: історія зміни помилки ч.2


Рис .: результат тесту

Метод rProp. будемо використовувати нейронну мережу з трьома обробними шарами: вхідний шар 2 нейрона, перший обробляє шар 20 нейронів з активацією tanh, другий обробляє шар 20 нейронів з активацією tanh, третій шар - 2 нейрона (по числу класів) з активацією експонентний сигмоид. Навчання зайняло 350 епох, результати представлені нижче.


Рис .: історія зміни помилки ч.1


Рис .: історія зміни помилки ч.2


Рис .: результат тесту