Які хороші початкові ваги в нейромережі?


68

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

Чому це гарна ідея?


Дивіться мою магістерську дисертацію, стор. 81 для огляду методів ініціалізації.
Мартін Тома

Відповіді:


47

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

Логістична функція близька до плоскої для великих позитивних або негативних входів. Похідний на вході становить близько 1 / 10 , але в 10 похідна становить близько 1 / 22000 . Це означає, що якщо вхід логістичного нейрона дорівнює 10, то для заданого тренувального сигналу нейрон дізнається приблизно в 2200 разів повільніше, ніж якщо вхід був 2 .21/10101/220001022002

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

Початкові ваги, які ви даєте, можуть не спрацювати. Це залежить від того, як нормалізуються вхідні дані. Якщо вхідні норми мають середнє значення та стандартне відхилення 1 , то випадкова сума d членів з рівномірними вагами ( - 101dматиме середнє значення0та дисперсію1(1d,1d)0 , незалежно відбуд. Ймовірність того, що ви отримаєте суму поза[-4,4], невелика. Це означає, що збільшуючиd, ви не змушуєте нейронів починати насичуватися, щоб вони не навчалися.13d[4,4]d

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


1
Отже, завжди слід принаймні враховувати нормалізацію даних. Зараз це має сенс. Чи можете ви пояснити, чому відхилення STD буде 1/3 і наскільки мала ймовірність вхідної суми поза діапазону <-4,4>?
elmes

1
Існують деякі основні властивості дисперсії, з яких випливає це: Якщо і Y незалежні, то Var ( X + Y ) = Var ( X ) + Var ( Y ), а якщо X і Y незалежні і мають середнє значення 0 , то Var ( X Y ) = Var ( X ) Var ( Y ) . XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
Дуглас Заре

1
Ви можете оцінити ймовірність того, що випадкова величина не менше стандартних відхилень від середньої величини, використовуючи нерівність Чебишева. На практиці це не різко, але точний результат залежить від розподілу. 12
Дуглас Заре

До речі, я прорахувався. Дисперсія - , так що стандартне відхилення13 . 13
Дуглас Заре

1
"Логістична функція близька до плоскої для великих позитивних чи негативних входів. Похідна на вході ..." Чи не повинен відповідний суб'єкт бути похідною від функції витрат логістичної регресії? Внаслідок чого вхід у похідну функції витрат вже масштабується логістичною функцією до (0,1) незалежно від розміру ваг і сигналів?
Moobie

28

[1] вирішує питання:

По-перше, ваги не повинні встановлюватися на нулі, щоб порушити симетрію при зворотному програмуванні:

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

Деякі стратегії ініціалізації:

  • [2] та [3] рекомендують масштабувати обернену площу кореня вентилятора
  • Глоро і Бенджо (2010) та навчальні посібники з глибокого навчання використовують поєднання фан-ін і фан-ауту:
    • r=6fan-in+fan-out
    • r=46fan-in+fan-out
  • у випадку КВМ добре допомагає нульовому середньому гауссу з невеликим стандартним відхиленням приблизно 0,1 або 0,01 (Hinton, 2010) для ініціалізації ваг.
  • Ортогональна ініціалізація випадкової матриці, тобто W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)використовувати її uяк матрицю ініціалізації.

Також непідконтрольна попередня підготовка може допомогти в деяких ситуаціях:

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

Деякі бібліотеки ANN також мають цікаві списки, наприклад, Лазанья :

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[1] Бенджо, Йошуа. " Практичні рекомендації щодо градієнтної підготовки глибоких архітектур ". Нейронні мережі: трюки торгівлі. Спрингер Берлін Гейдельберг, 2012. 437-478.

[2] LeCun, Y., Bottou, L., Orr, GB, and Muller, K. (1998a). Ефективна підтримка. У нейромережах, хитрощі торгівлі .

[3] Глоро, Ксав'є та Йошуа Бенджо. " Розуміння труднощів підготовки глибоких нейронних мереж ". Міжнародна конференція з питань штучного інтелекту та статистики. 2010 рік.


2
Я хотів би додати дві корисні посилання: 1) Поглиблення глибоко в випрямлячі: Перевершення продуктивності людського рівня за Класифікацією ImageNet - про важливість масштабування з урахуванням активації arxiv.org/abs/1502.01852 2) Точні рішення нелінійної динаміки навчання в глибоких лінійних нейронних мережах arxiv.org/abs/1312.6120 - ортонормальні матриці набагато краще, ніж просто гауссовий шум
old-ufo

1
Редактор пропонує ініціалізації сигмоїди, а гіперболічну дотичну слід переключити на оригінальний папір.
gung

2
Ви хотіли зберегти цю редакцію, Френк? Якщо ні, ви можете повернути її назад.
gung

Мені, мабуть, чогось не вистачає. Звідки в роботі Glorot та Bengio (2010) написано, що вони рекомендують використовувати 4-кратне значення рівняння 16 при використанні функцій логістичної активації сигмоїдів? Рівняння 16 випливає з використання рівняння 12 та дисперсії рівномірного розподілу, але рівняння 16 виводиться, передбачаючи симетричну активацію з одиничною похідною при 0. Таким чином, наприклад, функція активації тан, але не логістична функція активації (несиметрична). Далі вони навіть не перевіряють запропоновану ініціалізацію логістичною сигмоїдою; вони випробовують його лише за допомогою танху та софтсигналу.
Tommy L

10

<xi>=0
<xi2>=1

Питання: як найкраще вибрати ваги ?. Ідея полягає у тому, щоб вибирати значення ваг випадковим чином після розподілу, що допомагає процесу оптимізації перейти до змістовного рішення.

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

<xi2>=10

σααα

Це особливо стосується глибоких нейронних мереж, де під час додавання шарів одиниці, як правило, швидко насичуються. Існує ряд робіт, які займаються цим питанням. Хорошим початковим моментом може бути «Розуміння труднощів підготовки глибоких нейронних мереж подачі» від glorot та bengio
jpmuc

10

Ну і лише в якості оновлення, « Поглиблення глибоко в випрямлячі: перевершення продуктивності людського рівня n Класифікація ImageNet» та ін. Запровадили ініціалізацію спеціально з ініціалізацією, w = U([0,n]) * sqrt(2.0/n)де nкількість входів вашого NN. Я бачив цю ініціалізацію, що використовується в багатьох останніх роботах (також з ReLU). Вони фактично показують, як це починає знижувати швидкість помилок набагато швидше, ніж (-1 / n, 1 / n), про яку ви згадали. Для детального пояснення дивіться статтю, але ось як швидко вона зближується: Конвергенція 22-шарової великої моделі


Оце Так! Значне поліпшення для мене.
Thomas W

Не для великої кількості входів, хоча ... не вдається з MNIST.
Thomas W

Зауважимо, що He-ініціалізація розроблена спеціально для (P) ReLU та пояснює той факт, що вона не симетрична (що є одним із припущень Xavier-ініціалізації). Не обманюйте цей графік поза контекстом!
Містер Цьолдер,

5

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

На цьому зображенні показано активацію 5-шарового багатошарового Perceptron ReLU за 3 різних стратегій ініціалізації після одного проходження MNIST через мережу.

Активації в MLP ReLU з різними стратегіями ініціалізації

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

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

x(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

Var(x(i+1))=Var(x(i))

Var(w(i))=1ni.

Lxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

ni=ni+1

Var(w(i))=2ni+ni+1.

N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.

3

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^iγβ

γβx^ixixix^iβγпід час тренувань. Таким чином, Batch Normalization стабілізує навчання.

Як результат, пакетна нормалізація дозволяє швидше навчатись , використовуючи набагато більш високі показники навчання та полегшує проблему поганої ініціалізації. BN також дозволяє використовувати насичуючі нелінійності, не дозволяючи мережі застрявати в режимах насичення. Підсумовуючи, Batch Normalization - це диференційована трансформація, яка впроваджує нормалізовані активації в мережу. На практиці шар BN можна вставити відразу після повністю з'єднаного шару.

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