Ініціалізація ваги CNN xavier


14

У деяких навчальних посібниках я виявив, що ініціалізація ваги "Xavier" (стаття: Розуміння труднощів дресирування глибоких нейронних мереж ) є ефективним способом ініціалізації ваг нейронних мереж.

Для повністю пов’язаних шарів у цих підручниках було правило:

Var(W)=2nin+nout,simpler alternative:Var(W)=1nin

де - дисперсія ваг для шару, ініціалізованого нормальним розподілом і , - кількість нейронів у батьківському та поточному шарах.Var(W)ninnout

Чи існують подібні правила великого пальця для звивистих шарів?

Я намагаюся зрозуміти, що було б найкраще ініціалізувати ваги згорткового шару. Наприклад, у шарі, де форма ваг (5, 5, 3, 8), тож розмір ядра 5x5, фільтрація трьох вхідних каналів (вхід RGB) та створення 8функціональних карт ... 3вважатиметься кількістю вхідних нейронів? А точніше 75 = 5*5*3, тому що вхідні дані - це 5x5патчі для кожного кольорового каналу?

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

Відповіді:


13

У цьому випадку кількість нейронів повинна бути 5*5*3.

Я вважаю це особливо корисним для згорткових шарів. Часто працює також рівномірний розподіл по інтервалі . [c/(in+out),c/(in+out)]

Він реалізований як варіант майже у всіх бібліотеках нейронної мережі. Тут ви можете знайти вихідний код реалізації Керасом ініціалізації Xavier Glorot.


1
Хм..у вас є додаткові поради? Наприклад, одна з моїх мереж має повністю пов'язаний шар із 480 000 нейронів. Якщо я застосую ініціалізацію Xavier, я закінчуюсь різницею приблизно і моя мережа просто вивчає деякі дивні структури перешкод. Я думаю, що це потрапляє в якийсь місцевий мінімум. Я маю на увазі, що ваги тоді справді невеликі. В основному я відчуваю розумне навчання з чимось в інтервалі . Будь-які ідеї з цього приводу? Я думаю, ініціалізація Xavier не застосовується до дійсно великих шарів? 1106[0.1,0.01]
daniel451

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

Багато бібліотек DL приймають за параметр методів генерації випадкових чисел стандартний відхилення, а не термін дисперсії. Отже, для дисперсії вам знадобиться стандартне відхилення , яке може пояснити ваші результати. 106103
eric.mitchell

0

Я другу відповідь Еріка тут. Я також беру "sqrt" терміна, а не тільки цього терміна. Незважаючи на це, коли ви підключаєте сигмоподібну глибину своєї мережі до виходу "RelU" .... це може спричинити затримку навчання. Це відбувається через необмежений вихід "Relu", який може призвести до того, що градієнт в сигмоїді впаде до 0, а навчання не відбувається. Отже, у цих випадках у мене є коефіцієнт "scaleDown" для моєї мережі, який буде зважувати відхилення ініціалізації за цим фактором. Я продовжую емпірично налаштовувати ваги, поки не відбудеться навчання. Простий спосіб знайти - зберегти модель одразу після 1 ітерації та ознайомитись з результатом RELU (який підключений до сигмоїди). Продовжуйте налаштовувати ваги, поки цей вихід RELU не є розумним. А потім використовуйте ці ваги для тренувань. Це гарний старт. Якщо вона все-таки руйнується після кількох ітерацій, зважте їх трохи більше, поки не досягнете стійкості. Це я просто зламав. Це працювало на мене для моєї установки. Тож ділюсь своїм досвідом. Різні речі працюють для різних налаштувань.

Отже ... удачі!

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