Я только что слышал, что это хорошая идея, чтобы выбрать начальные веса нейронной сети из диапазона , где - это количество входов в данный нейрон. Предполагается, что множества нормализованы - среднее значение 0, дисперсия 1 (не знаю, имеет ли это значение).г
Почему это хорошая идея?
Ответы:
Я предполагаю, что вы используете логистические нейроны и тренируетесь по градиентному спуску / обратному распространению.
Логистическая функция близка к плоской для больших положительных или отрицательных входов. Производная на входе составляет около , но при производная составляет около . Это означает, что если вход логистического нейрона равен то для данного обучающего сигнала нейрон будет учиться примерно в раз медленнее, чем если бы вход был равен .1 / 10 10 1 / 22000 10 2200 22 1 / 10 10 1 / 22000 10 2200 2
Если вы хотите, чтобы нейрон учился быстро, вам нужно либо создать огромный обучающий сигнал (например, с функцией кросс-энтропийной потери), либо вы хотите, чтобы производная была большой. Чтобы сделать производную большой, вы устанавливаете начальные веса так, чтобы вы часто получали входные данные в диапазоне .[−4,4]
Начальные веса, которые вы даете, могут или не могут работать. Это зависит от того, как нормируются входы. Если входные значения нормализованы, чтобы иметь среднее значение и стандартное отклонение , то случайная сумма членов с равномерно распределенными весами будет иметь среднее значение и дисперсию , независимо от . Вероятность того, что вы получите сумму за пределами , мала. Это означает, что, увеличивая , вы не заставляете нейроны начинать насыщенными, чтобы они не учились.1 д ( - 10 1 d 01(−1d√,1d√) 0 д[-4,4]д13 d [−4,4] d
С входами, которые не нормированы, эти веса могут быть неэффективными для предотвращения насыщения.
источник
[1] отвечает на вопрос:
Во-первых, веса не должны быть установлены в нули, чтобы нарушить симметрию при обратном программировании:
Некоторые стратегии инициализации:
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
Затем используется вu
качестве матрицы инициализации.Кроме того, неконтролируемая предварительная подготовка может помочь в некоторых ситуациях:
В некоторых библиотеках ANN также есть несколько интересных списков, например, Lasagne :
[1] Бенджо, Йошуа. « Практические рекомендации по градиентной основе подготовки глубоких архитектур. » Нейронные сети: приемы торговли. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB, и Muller, K. (1998a). Эффективный бэкпроп. В нейронных сетях, хитрости торговли .
[3] Глорот, Ксавье и Йошуа Бенжио. « Понимание сложности обучения глубоких нейронных сетей с прямой связью ». Международная конференция по искусственному интеллекту и статистике. 2010.
источник
Вопрос в том, как лучше выбрать вес? Идея состоит в том, чтобы случайным образом выбирать значения весов после распределения, которое помогает процессу оптимизации приблизиться к значимому решению.
источник
Ну, просто как обновление, углубляясь в выпрямители: превосходя производительность на человеческом уровне n Классификация ImageNet от He et al представила инициализацию специально с инициализацией
w = U([0,n]) * sqrt(2.0/n)
гдеn
число входов вашего NN. Я видел эту инициализацию, использованную во многих недавних работах (также с ReLU). На самом деле они показывают, как это начинает уменьшать частоту появления ошибок намного быстрее, чем (-1 / n, 1 / n), о котором вы упомянули. Для подробного объяснения см. Статью, но вот как быстро она сходится:источник
Идея заключается в том, что вы хотите инициализировать веса таким образом, чтобы обеспечить хороший прямой и обратный поток данных через сеть. То есть, вы не хотите, чтобы активация постоянно уменьшалась или увеличивалась по мере продвижения по сети.
На этом изображении показаны активации 5-уровневого многоуровневого персептрона ReLU при 3 различных стратегиях инициализации после одного прохождения MNIST по сети.
Во всех трех случаях веса взяты из нормального распределения с нулевым центром, которое определяется его стандартным отклонением. Вы можете видеть, что если начальные веса слишком малы (стандартное отклонение мало), активации активируются, а если они слишком велики, активация взрывается. Среднее значение, которое является приблизительно правильным, можно найти, установив веса таким образом, чтобы дисперсия активаций и обновлений градиента оставалась примерно такой же, как при прохождении через сеть.
Я написал пост в блоге об инициализации веса, который более подробно описан, но основная идея заключается в следующем.
источник
В результате пакетная нормализация обеспечивает более быстрое обучение благодаря гораздо более высокой скорости обучения и устраняет проблему плохой инициализации. BN также позволяет использовать насыщающие нелинейности, предотвращая застревание сети в режимах насыщения. Таким образом, пакетная нормализация является дифференцируемым преобразованием, которое вводит нормализованные активации в сеть. На практике слой BN может быть вставлен сразу после полностью связанного слоя.
источник