Я щойно чув, що хороша ідея вибирати початкові ваги нейронної мережі з діапазону , деd- кількість входів у даний нейрон. Передбачається, що множини нормалізуються - означають 0, дисперсію 1 (не знаю, чи це має значення).
Чому це гарна ідея?
Я щойно чув, що хороша ідея вибирати початкові ваги нейронної мережі з діапазону , деd- кількість входів у даний нейрон. Передбачається, що множини нормалізуються - означають 0, дисперсію 1 (не знаю, чи це має значення).
Чому це гарна ідея?
Відповіді:
Я припускаю, що ви використовуєте логістичні нейрони, і ви тренуєтесь за градієнтним спуском / поширенням назад.
Логістична функція близька до плоскої для великих позитивних або негативних входів. Похідний на вході становить близько 1 / 10 , але в 10 похідна становить близько 1 / 22000 . Це означає, що якщо вхід логістичного нейрона дорівнює 10, то для заданого тренувального сигналу нейрон дізнається приблизно в 2200 разів повільніше, ніж якщо вхід був 2 .
Якщо ви хочете, щоб нейрон швидко засвоївся, вам потрібно подати величезний тренувальний сигнал (наприклад, з функцією втрати перехресної ентропії) або ви хочете, щоб похідне було великим. Щоб зробити похідну великою, ви встановлюєте початкові ваги, щоб ви часто отримували введення в діапазоні .
Початкові ваги, які ви даєте, можуть не спрацювати. Це залежить від того, як нормалізуються вхідні дані. Якщо вхідні норми мають середнє значення та стандартне відхилення 1 , то випадкова сума d членів з рівномірними вагами ( - 1матиме середнє значення0та дисперсію1 , незалежно відбуд. Ймовірність того, що ви отримаєте суму поза[-4,4], невелика. Це означає, що збільшуючиd, ви не змушуєте нейронів починати насичуватися, щоб вони не навчалися.
З нормами введення, які не нормалізуються, ці ваги можуть бути неефективними для уникнення насичення.
[1] вирішує питання:
По-перше, ваги не повинні встановлюватися на нулі, щоб порушити симетрію при зворотному програмуванні:
Як правило, діапазони можуть бути ініціалізовані до нуля, але ваги потрібно обережно ініціалізувати, щоб порушити симетрію між прихованими одиницями одного шару. Оскільки різні вихідні одиниці отримують різні градієнтні сигнали, ця проблема порушення симетрії не стосується вихідних ваг (у вихідних одиницях), які також можуть бути встановлені на нуль.
Деякі стратегії ініціалізації:
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 рік.
Питання: як найкраще вибрати ваги ?. Ідея полягає у тому, щоб вибирати значення ваг випадковим чином після розподілу, що допомагає процесу оптимізації перейти до змістовного рішення.
Ну і лише в якості оновлення, « Поглиблення глибоко в випрямлячі: перевершення продуктивності людського рівня n Класифікація ImageNet» та ін. Запровадили ініціалізацію спеціально з ініціалізацією, w = U([0,n]) * sqrt(2.0/n)
де n
кількість входів вашого NN. Я бачив цю ініціалізацію, що використовується в багатьох останніх роботах (також з ReLU). Вони фактично показують, як це починає знижувати швидкість помилок набагато швидше, ніж (-1 / n, 1 / n), про яку ви згадали. Для детального пояснення дивіться статтю, але ось як швидко вона зближується:
Ідея полягає в тому, що ви хочете ініціалізувати ваги таким чином, щоб забезпечити хороший рух даних вперед та назад по мережі. Тобто, ви не хочете, щоб активації постійно зменшувались або збільшувалися під час просування по мережі.
На цьому зображенні показано активацію 5-шарового багатошарового Perceptron ReLU за 3 різних стратегій ініціалізації після одного проходження MNIST через мережу.
У всіх трьох випадках ваги витягуються з нульового центрального нормального розподілу, який визначається його стандартним відхиленням. Ви можете бачити, що якщо початкові ваги занадто малі (стандартне відхилення невелике), активації задушаться, і що якщо вони занадто великі, активації вибухають. Середнє значення, яке є приблизно правильним, можна знайти, встановивши ваги таким чином, що дисперсія активацій та оновлень градієнта залишається приблизно такою ж, як при проходженні через мережу.
Я написав публікацію в блозі про ініціалізацію ваги, яка детальніше описується, але основна ідея полягає в наступному.
під час тренувань. Таким чином, Batch Normalization стабілізує навчання.
Як результат, пакетна нормалізація дозволяє швидше навчатись , використовуючи набагато більш високі показники навчання та полегшує проблему поганої ініціалізації. BN також дозволяє використовувати насичуючі нелінійності, не дозволяючи мережі застрявати в режимах насичення. Підсумовуючи, Batch Normalization - це диференційована трансформація, яка впроваджує нормалізовані активації в мережу. На практиці шар BN можна вставити відразу після повністю з'єднаного шару.