Методи ініціалізації ваги в нейронних мережах

Саурабх Ядав

9 листопада 2018 · 5 хв читання

Побудова навіть простої нейронної мережі може бути заплутаним завданням, і тому її налаштування для отримання кращого результату надзвичайно нудне. Але першим кроком, який враховується під час побудови нейронної мережі, є ініціалізація параметрів; якщо це зробити правильно, то оптимізація буде досягнута за найменший час, інакше зближення до мінімумів за допомогою градієнтного спуску буде неможливим.

ваги

Ця стаття написана з припущенням, що читач вже знайомий з поняттям нейронної мережі, вагою, ухилом, функціями активації, поширенням вперед та назад тощо.

Основні позначення

Розглянемо нейронну мережу L-рівня, яка має L-1 прихованих шарів та по 1 вхідному та вихідному шарах. Параметри (ваги та ухили) для шару l представлені у вигляді

У цій статті ми розглянемо деякі основні практики використання та деякі вдосконалені методи, які необхідно використовувати для досягнення кращого результату. Нижче наведено кілька методів, які зазвичай практикуються для ініціалізації параметрів:

  • Нульова ініціалізація
  • Випадкова ініціалізація

Нульова ініціалізація:

У загальній практиці зсуви ініціалізуються 0, а ваги ініціалізуються випадковими числами, що робити, якщо ваги ініціалізуються 0?

Для того, щоб зрозуміти, давайте розглянемо, що ми застосували функцію активації сигмовидної форми для вихідного рівня.

Якщо всі ваги ініціалізовані 0, похідна щодо функції втрат однакова для кожного w у W [l], отже, всі ваги мають однакове значення в наступних ітераціях. Це робить приховані одиниці симетричними і триває для всіх n ітерацій, тобто встановлення ваг на 0 не робить його кращим, ніж лінійна модель. Важливо пам’ятати, що упередження не мають жодного ефекту при ініціалізації з 0.

давайте розглянемо нейронну мережу лише з трьома прихованими шарами з функцією активації ReLu у прихованих шарах та сигмовидною для вихідного шару.

Використовуючи вищезазначену нейронну мережу на наборі даних «робити кола» із sklearn.datasets, отриманий результат був таким:

для 15000 ітерацій, втрата = 0,6931471805599453, точність = 50%

очевидно, що нульова ініціалізація не є успішною в класифікації.

Випадкова ініціалізація:

Призначення випадкових значень вагам краще, ніж просто присвоєння 0. Але є одне, що слід пам’ятати, це те, що відбувається, якщо ваги ініціалізуються високими або дуже низькими значеннями, і що є розумною ініціалізацією значень ваги.

а) Якщо ваги ініціалізуються з дуже високими значеннями, термін np.dot (W, X) + b стає значно вищим, і якщо застосовується така функція активації, як sigmoid (), функція відображає своє значення поблизу 1, де нахил градієнта повільно змінюється а навчання займає багато часу.

б) Якщо ваги ініціалізуються з низькими значеннями, він отримує значення 0, де регістр той самий, що і вище.

Цю проблему часто називають градієнтом зникнення.

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

Нейронна мережа така ж, як і раніше, використовуючи цю ініціалізацію на наборі даних «зробити круги» з sklearn.datasets, результат отриманий наступним чином:

для 15000 ітерацій, втрата = 0,38278397192120406, точність = 86%

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

Нові методики ініціалізації

Як ми вже бачили вище, при великій або 0 ініціалізації ваг (W) не отримується значний результат, навіть якщо ми використовуємо відповідну ініціалізацію ваг, ймовірно, що навчальний процес займе більше часу. З цим пов’язані певні проблеми:

а) Якщо модель занадто велика і займає багато днів, то що

б) А як щодо проблеми зникнення/вибуху градієнта

Це були деякі проблеми, які стояли на шляху довгі роки, але у 2015 р. He et al. (2015) запропонував активацію з урахуванням ініціалізації ваг (для ReLu), яка змогла вирішити цю проблему. ReLu та негерметичний ReLu також вирішує проблему зникнення градієнта.

Він ініціалізує: ми просто множимо випадкову ініціалізацію на

Щоб побачити, наскільки ефективним є це рішення, скористаємося попереднім набором даних і нейронною мережею, яку ми взяли для вищезазначеної ініціалізації, і результати:

для 15000 ітерацій, втрата = 0,07357895962677366, точність = 96%

Звичайно, це покращення порівняно з попередніми техніками.

Також використовуються деякі інші прийоми, крім ініціалізації Не, які порівняно кращі за старі і часто використовуються.

Ініціалізація Xavier: Це те саме, що ініціалізація He, але воно використовується для функції активації tanh (), у цьому методі 2 замінено на 1.

Деякі також використовують наступний прийом для ініціалізації:

Ці методи служать хорошими вихідними точками для ініціалізації та зменшують шанси вибуху або зникнення градієнтів. Вони встановлюють ваги ні набагато більше, ніж 1, ні набагато менше, ніж 1. Отже, градієнти не зникають і не вибухають занадто швидко. Вони допомагають уникнути повільної конвергенції, а також гарантують, що ми не будемо постійно коливатися від мінімумів. Існують інші варіанти вищезазначеного, де головною метою знову є мінімізація дисперсії параметрів. Дякую.