Каковы хорошие начальные веса в нейронной сети?


68

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

Почему это хорошая идея?


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

Ответы:


47

Я предполагаю, что вы используете логистические нейроны и тренируетесь по градиентному спуску / обратному распространению.

Логистическая функция близка к плоской для больших положительных или отрицательных входов. Производная на входе составляет около , но при производная составляет около . Это означает, что если вход логистического нейрона равен то для данного обучающего сигнала нейрон будет учиться примерно в раз медленнее, чем если бы вход был равен .1 / 10 10 1 / 22000 10 2200 221/10101/220001022002

Если вы хотите, чтобы нейрон учился быстро, вам нужно либо создать огромный обучающий сигнал (например, с функцией кросс-энтропийной потери), либо вы хотите, чтобы производная была большой. Чтобы сделать производную большой, вы устанавливаете начальные веса так, чтобы вы часто получали входные данные в диапазоне .[4,4]

Начальные веса, которые вы даете, могут или не могут работать. Это зависит от того, как нормируются входы. Если входные значения нормализованы, чтобы иметь среднее значение и стандартное отклонение , то случайная сумма членов с равномерно распределенными весами будет иметь среднее значение и дисперсию , независимо от . Вероятность того, что вы получите сумму за пределами , мала. Это означает, что, увеличивая , вы не заставляете нейроны начинать насыщенными, чтобы они не учились.1 д ( - 101d01(1d,1d)0 д[-4,4]д13d[4,4]d

С входами, которые не нормированы, эти веса могут быть неэффективными для предотвращения насыщения.


1
Так что, в принципе, всегда следует хотя бы рассмотреть вопрос о нормализации данных. Не могли бы вы объяснить, почему стандартное отклонение будет 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
Дуглас Заре

Кстати, я просчитался. Дисперсия равна поэтому стандартное отклонение равно . 1313
Дуглас Заре

1
«Логистическая функция близка к плоской для больших положительных или отрицательных входов. Производная на входе ...» Разве соответствующий субъект не должен быть производной функции затрат логистической регрессии? При этом входные данные для производной функции стоимости уже масштабируются логистической функцией до (0,1) независимо от размера весов и сигналов?
Муби

28

[1] отвечает на вопрос:

Во-первых, веса не должны быть установлены в нули, чтобы нарушить симметрию при обратном программировании:

Смещения, как правило, можно инициализировать до нуля, но необходимо аккуратно инициализировать веса, чтобы нарушить симметрию между скрытыми единицами одного и того же слоя. Поскольку разные выходные блоки получают разные сигналы градиента, эта проблема нарушения симметрии не касается выходных весов (в выходные блоки), которые поэтому также могут быть установлены на ноль.

Некоторые стратегии инициализации:

  • [2] и [3] рекомендуют масштабировать с помощью обратного корня квадратного из веерного входа
  • Glorot и Bengio (2010) и учебные пособия по глубокому обучению используют сочетание разветвления и разветвления:
    • для гиперболических тангенциальных единиц: выборка униформы (-r, r) с (fan-in - это число входов блока).r=6fan-in+fan-out
    • для сигмовидных единиц: образец униформы (-r, r) с (fan-in - это число входов блока).r=46fan-in+fan-out
  • в случае с RBM, гауссиану с нулевым средним с небольшим стандартным отклонением около 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.


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

1
Редактор предлагает, чтобы инициализация сигмоиды и гиперболического тангенса была переключена в соответствии с оригинальной статьей.
gung - Восстановить Монику

2
Вы хотели оставить это редактирование, Фрэнк? Если нет, вы можете откатиться назад.
gung - Восстановить Монику

Я должен что-то упустить. Где говорится в статье Glorot and Bengio (2010), что они рекомендуют использовать значение, в 4 раза превышающее значение 16, при использовании функций активации логистической сигмоиды? Уравнение 16 следует из использования Уравнения 12 и дисперсии равномерного распределения, но Уравнение 16 получено, предполагая симметричную активацию с единичной производной в 0. Таким образом, например, функция танха активации, но не логистическая функция активации (несимметричная). Кроме того, они даже не проверяют эту предложенную инициализацию с помощью логистической сигмоиды; они только проверяют это с помощью tanh и softsign.
Томми Л

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 от He et al представила инициализацию специально с инициализацией w = U([0,n]) * sqrt(2.0/n)где nчисло входов вашего NN. Я видел эту инициализацию, использованную во многих недавних работах (также с ReLU). На самом деле они показывают, как это начинает уменьшать частоту появления ошибок намного быстрее, чем (-1 / n, 1 / n), о котором вы упомянули. Для подробного объяснения см. Статью, но вот как быстро она сходится: Сходимость 22-слойной большой модели


Вау! Значительное улучшение для меня.
Томас W

Не для большого количества входов, хотя ... терпит неудачу с MNIST.
Томас В.

Обратите внимание, что He-инициализация специально разработана для (P) ReLU и учитывает тот факт, что она не является симметричной (что является одним из предположений в Xavier-инициализации). Не обманывайтесь этим графиком вне контекста!
г-н Цжолдер

5

Идея заключается в том, что вы хотите инициализировать веса таким образом, чтобы обеспечить хороший прямой и обратный поток данных через сеть. То есть, вы не хотите, чтобы активация постоянно уменьшалась или увеличивалась по мере продвижения по сети.

На этом изображении показаны активации 5-уровневого многоуровневого персептрона 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βγво время тренировки. Таким образом, Пакетная нормализация стабилизирует обучение.

В результате пакетная нормализация обеспечивает более быстрое обучение благодаря гораздо более высокой скорости обучения и устраняет проблему плохой инициализации. BN также позволяет использовать насыщающие нелинейности, предотвращая застревание сети в режимах насыщения. Таким образом, пакетная нормализация является дифференцируемым преобразованием, которое вводит нормализованные активации в сеть. На практике слой BN может быть вставлен сразу после полностью связанного слоя.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.