Насколько я знаю, две приведенные вами формулы являются в значительной степени стандартной инициализацией. Я сделал обзор литературы некоторое время назад, я скопировал его ниже, если интересно.
[1] отвечает на вопрос:
Во-первых, веса не должны быть установлены в нули, чтобы нарушить симметрию при обратном программировании:
Смещения, как правило, можно инициализировать до нуля, но необходимо аккуратно инициализировать веса, чтобы нарушить симметрию между скрытыми единицами одного и того же слоя. Поскольку разные выходные блоки получают разные сигналы градиента, эта проблема нарушения симметрии не касается выходных весов (в выходные блоки), которые поэтому также могут быть установлены на ноль.
Некоторые стратегии инициализации:
- [2] и [3] рекомендуют масштабировать с помощью обратного корня квадратного из веерного входа
- Glorot и Bengio (2010) и учебные пособия по глубокому обучению используют сочетание разветвления и разветвления:
- г = 6веер + веер---------√
- r = 4 6веер + веер---------√
- в случае с RBMs, гауссиану с нулевым средним с небольшим стандартным отклонением около 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] Бенджо, Йошуа. « Практические рекомендации по градиентной основе подготовки глубоких архитектур. » Нейронные сети: приемы торговли. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB, и Muller, K. (1998a). Эффективный бэкпроп. В нейронных сетях, хитрости торговли .
[3] Глорот, Ксавье и Йошуа Бенжио. « Понимание сложности обучения глубоких нейронных сетей с прямой связью ». Международная конференция по искусственному интеллекту и статистике. 2010.