Наскільки я знаю, дві формули, які ви дали, є майже стандартною ініціалізацією. Я переглядав літературу деякий час тому, скопіював її нижче, якщо зацікавився.
[1] вирішує питання:
По-перше, ваги не повинні встановлюватися на нулі, щоб порушити симетрію при зворотному програмуванні:
Як правило, діапазони можуть бути ініціалізовані до нуля, але ваги потрібно обережно ініціалізувати, щоб порушити симетрію між прихованими одиницями одного шару. Оскільки різні вихідні одиниці отримують різні градієнтні сигнали, ця проблема порушення симетрії не стосується вихідних ваг (у вихідних одиницях), які також можуть бути встановлені на нуль.
Деякі стратегії ініціалізації:
- [2] та [3] рекомендують масштабувати обернену площу кореня вентилятора
- Глоро і Бенджо (2010) та навчальні посібники з глибокого навчання використовують поєднання фан-ін і фан-ауту:
- для сигмоподібних одиниць: зразок a Uniform (-r, r) з r =6вентилятор + вентилятор---------√ (вентилятор - це кількість входів пристрою).
- для гіперболічних дотичних одиниць: зразок уніформи (-r, r) з r = 46вентилятор + вентилятор---------√ (вентилятор - це кількість входів пристрою).
- у випадку КВМ добре працює гаусівський нуль із невеликим стандартним відхиленням приблизно 0,1 або 0,01 (Hinton, 2010) для ініціалізації ваг.
- Ортогональна ініціалізація випадкової матриці, тобто
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
використовуйте u
як матрицю ініціалізації.
Також непідконтрольна попередня підготовка може допомогти в деяких ситуаціях:
Важливим вибором є те, чи слід використовувати непідтримуваний попередній тренінг (і який алгоритм навчання непідконтрольних функцій використовувати) для ініціалізації параметрів. У більшості налаштувань ми виявили, що попередня підготовка не контролюється, щоб допомогти і дуже рідко травмувати, але, звичайно, це означає додатковий час тренувань та додаткові гіпер-параметри.
Деякі бібліотеки ANN також мають цікаві списки, наприклад, Lasagne :
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 рік.