Чому слід зважувати нейромережі до випадкових чисел? [зачинено]


105

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

Але чому нейронні мережі початкові ваги ініціалізуються як випадкові числа?

Я десь читав, що це робиться для "порушення симетрії", і це змушує нейронну мережу швидше вчитися. Як порушення симетрії змушує її швидше вчитися?

Не було б ініціалізацією ваги до 0 кращою ідеєю? Таким чином ваги зможуть швидше знайти свої значення (позитивні чи негативні)?

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


8
Це здається кращим пристосуванням для Cross Valided .
Sycorax

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

Відповіді:


140

Порушення симетрії тут важливо, а не з причини виконання. Уявіть перші два шари багатошарового персептрона (вхідні та приховані шари):

введіть тут опис зображення

Під час поширення вперед кожен блок у прихованому шарі отримує сигнал:

введіть тут опис зображення

Тобто кожна прихована одиниця отримує суму входів, помножену на відповідну вагу.

Тепер уявіть, що ви ініціалізуєте всі ваги на одне значення (наприклад, нуль або один). У цьому випадку кожен прихований блок отримає абсолютно однаковий сигнал . Наприклад, якщо всі ваги ініціалізовані на 1, кожна одиниця отримує сигнал, рівний сумі входів (і виходів sigmoid(sum(inputs))). Якщо всі ваги нулі, що ще гірше, кожен прихований блок отримає нульовий сигнал. Незалежно від того, який був вхід - якщо всі ваги однакові, всі одиниці в прихованому шарі теж будуть однаковими .

Це головне питання, що стосується симетрії та причини, чому слід ініціалізувати ваги випадковим чином (або, принаймні, з різними значеннями). Зауважте, що ця проблема стосується всіх архітектур, які використовують з'єднання «кожен до кожного».


1
Чудове пояснення. Але чому вживати слово symmetryне correlation? Хто вжив слово першим?
nn0p

1
@ nn0p: кореляція передбачає, що 2 сигнали змінюються в подібному напрямку, але не завжди і не з однаковою величиною. Принаймні, наскільки я знаю, симетрія не має формального визначення і тут використовується для подання абсолютно однакових сигналів по всіх зв’язках між вузлами, що робить навчання марним.
подруга

@ffriend, ніж у випадку, коли ми використовуємо випадання, рандомізація більше не потрібна. Я помиляюся?
emanuele

1
@emanuele Dropout сама по собі є своєрідною рандомізацією, так що так, це має працювати. Тим не менше, всі з'єднання, які не "випадають" при кожній ітерації, все одно отримають симетричне оновлення, тому я думаю, що навчання буде досить повільним, і тому рекомендую все ж використовувати випадкову ініціалізацію в будь-якій практичній мережі.
подруга

Це добре пояснює форспропінг, але що робити з backprop?
зел

74

Аналогія:

Я сподіваюся, що це хороша аналогія. Я намагався пояснити це якомога простіше.

Уявіть, що хтось скинув вас з вертольота на невідому вершину гори, і ви потрапили в пастку. Скрізь туман. Єдине, що ви знаєте, - вам слід якось спуститися до рівня моря. У якому напрямку ви повинні піти, щоб спуститися до мінімально можливої ​​точки?

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

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

Це те, що розуміється під порушенням симетрії . Ініціалізація несиметрична ( що відрізняється ), тому ви можете знайти різні рішення однієї проблеми.

У цій аналогії, де ви приземляєтеся - ваги . Отже, з різною вагою є більший шанс досягти найнижчого ( або нижчого) ) точки.

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

введіть тут опис зображення


10
Здається, що вертоліт декілька разів скидає вас десь випадково на гору, однак при глибокому навчанні ми лише один раз запускаємо ваги.
ЮФен Шен

1
Це справжнє інтуїтивне пояснення. Слід також зазначити, що NN майже ніколи не є опуклими, тому рандомізація є ідеальним шляхом - але якщо у вас функція опуклої втрати, то, звичайно, не має значення, на що ви ініціалізуєте вагу.
Кінгз

4
Це хороша аналогія - але має сенс припускати, що вас і ваших друзів скидають на гору (тобто вузли в мережі) - або в одному місці, або в різних місцях різних людей. І припустимо, що ви могли б спілкуватися один з одним. Різні плями з комунікацією дозволять пришвидшити спуск. Те саме місце означає, що всі, ймовірно, підуть тією ж стежкою вниз.
ахмедосний

26

Відповідь досить проста. Основні алгоритми навчання мають жадібний характер - вони не знаходять глобального оптимуму, а скоріше - "найближчого" локального рішення. Як результат, починаючи з будь-якої фіксованої ініціалізації, упереджене рішення до якогось одного певного набору ваг. Якщо ви робите це випадковим чином (і, можливо, багато разів), то є набагато менша ймовірність того, що ви застрягнете в якійсь дивній частині поверхні помилки.

Цей же аргумент стосується інших алгоритмів, які не в змозі знайти глобальний оптимум (k-засоби, ЕМ тощо) і не застосовуються до методів глобальної оптимізації (як алгоритм SMO для SVM).


Отже, не гарантовано, що він не застрягне в локальних мінімумах лише шляхом рандомізації? Але після декількох пробіжок з різною рандомізованою вагою може отримати глобальний мінімум?
Шаян РК

1
Гарантії немає, але кілька ініціалізацій можуть допомогти хоча б наблизитися до справжнього оптимуму.
лейлот

Чи є якась стандартна формула або правило для встановлення значення для ініціалізації ваг ?? У мене є нейромережа зворотного поширення вперед, багатошарову, де використовується сигмоїдна функція.
lkkkk

в книзі С. Хайкіна "нейронні мережі" є деяке правило
lejlot

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

4

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


2
  1. Не було б ініціалізацією ваги до 0 кращою ідеєю? Таким чином ваги зможуть швидше знайти свої значення (позитивні чи негативні)?

  2. Як порушення симетрії змушує її швидше вчитися?

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

Вузли, які знаходяться поруч у прихованому шарі, підключеному до одних і тих же входів, повинні мати різні ваги для алгоритму навчання для оновлення ваг.

Зробивши ваги як ненульові (але близькі до 0, як 0,1 тощо), алгоритм вивчить ваги в наступних ітераціях і не буде застрявати. Таким чином відбувається порушення симетрії.

  1. Чи є якась інша основна філософія, яка стоїть за рандомізацією ваг, крім сподівання, що вони будуть близькими до своїх оптимальних значень при ініціалізації?

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

Прогресування пошуку або вивчення нейронної мережі відоме як конвергенція. Виявлення неоптимального рішення або локальної оптими призводить до передчасного зближення.

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

Після 2015 року, завдяки прогресу в дослідженні машинного навчання, He-et et al Initializatio n вводиться для заміни випадкової ініціалізації

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Ваги все ще випадкові, але різняться за діапазоном залежно від розміру попереднього шару нейронів.

Підсумовуючи, нам допомагають ненульові випадкові ваги

  1. Вийдіть з місцевої оптими
  2. Порушення симетрії
  3. Досягніть глобальної оптими в подальших ітераціях

1

Крім ініціалізації зі випадковими значеннями, початкові ваги не повинні починатися з великих значень. Це тому, що ми часто використовуємо танг-сигмоподібні функції в прихованих шарах і вихідних шарах. Якщо ви подивитеся на графіки двох функцій, після поширення вперед на першій ітерації приводяться до більш високих значень, і ці значення відповідають місцям в сигмоїдних і танних функціях, які зближують похідну до нуля. Це призводить до холодного початку навчального процесу та збільшення часу на навчання. Як результат, якщо ви почнете зважувати випадково, ви можете уникнути цих проблем, помноживши ці значення на такі значення, як "0,01" або "0,001".


1

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

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

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

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

[1]: https://i.stack.imgur.com/2dioT.png [Калхор, А. (2020). Класифікація та регресія НН. Лекція.]

У найпростішому випадку нова вага така:

W_new = W_old + D_loss

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

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


0

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

dZ2 = A2 - Y

dW2 = (1 / м) * dZ2 * A2.T

Нехай ігнорує db2. (Шкода не жаль ;) )

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Проблема, яку ви бачите, є жирним шрифтом. Обчислення dZ1 (для обчислення dW1) має W2, який дорівнює 0. Ми ніколи не отримували шансів змінити ваги на що-небудь більше 0, і ніколи не будемо. Отже, по суті, нейронна мережа нічого не вчить. Я думаю, що це гірше, ніж логістична регресія (одна одиниця). У випадку логістичної регресії ви дізнаєтесь з більшою кількістю ітерацій, оскільки отримуєте різний внесок завдяки X. У цьому випадку інші шари завжди дають однаковий результат, тому ви зовсім не вчитеся.


0

Я дізнався одне: якщо ви ініціалізуєте вагу до нулів, очевидно, що блоки активації в одному шарі будуть однаковими, це означає, що вони матимуть однакові значення. Під час зворотного руху ви побачите, що всі рядки градієнта dW також однакові, отже, всі рядки вагової матриці W однакові після оновлення градієнта спуску. Взагалі, ініціалізація всіх ваг до нуля призводить до того, що мережа не може порушити симетрію. Це означає, що кожен нейрон у кожному шарі вивчить одне і те ж, і ви, можливо, також будете тренувати нейронну мережу n[l]=1n[l]=1для кожного шару, і мережа не є більш потужною, ніж лінійний класифікатор, такий як логістична регресія. Ендрю Нг курс:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.