Подтвердить что ты не робот

Почему весы нейронных сетей должны быть инициализированы случайными числами?

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

Но почему исходные веса нейронных сетей инициализируются как случайные числа?

Я где-то читал, что это делается для "разрыва симметрии", и это ускоряет работу нейронной сети. Как нарушение симметрии заставляет его быстрее учиться?

Не будет ли инициализация весов 0 лучше? Таким образом, весы смогут быстрее найти свои значения (положительные или отрицательные)?

Есть ли какая-то другая основополагающая философия для рандомизации весов, не надеясь, что они будут близки к их оптимальным значениям при инициализации?

4b9b3361

Ответ 1

Здесь важна разрывная симметрия, а не причина производительности. Представьте себе первые 2 слоя многослойного персептрона (входные и скрытые слои):

enter image description here

При прямом распространении каждый блок в скрытом слое получает сигнал:

enter image description here

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

Теперь представьте, что вы инициализируете все веса до одного значения (например, ноль или один). В этом случае каждый скрытый блок получит точно такой же сигнал. Например. если все веса инициализированы до 1, каждый блок получает сигнал, равный сумме входов (и выходов sigmoid(sum(inputs))). Если все веса - это нули, что еще хуже, каждая скрытая единица получит нулевой сигнал. Независимо от того, что было вводом - если все веса одинаковы, все единицы в скрытом слое будут одинаковыми..

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

Ответ 2

Аналогия:

Надеюсь это хорошая аналогия. Я пытался объяснить это как можно проще.

Представьте, что кто-то сбросил вас с вертолета на неизвестную вершину горы, и вы оказались там в ловушке. Везде туман. Единственное, что вы знаете, это то, что вы должны как-то спуститься на уровень моря. Какое направление вы должны предпринять, чтобы спуститься до самой низкой точки?

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

Тем не менее, каждый раз, когда вертолет сбрасывает вас куда-то случайно на гору, вы делаете разные указания и шаги. Таким образом, у вас будет больше шансов достичь самой низкой точки.

Это то, что подразумевается под нарушением симметрии. Инициализация является асимметричной (которая отличается), поэтому вы можете найти разные решения для одной и той же проблемы.

В этой аналогии, где вы приземляетесь, это веса. Таким образом, с разными весами, больше шансов достичь нижней (или нижней) точки.

Кроме того, это увеличивает энтропию в системе, поэтому система может создавать больше информации, чтобы помочь вам найти нижние точки (локальные или глобальные минимумы).

enter image description here

Ответ 3

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

Тот же аргумент применяется к другим алгоритмам, которые не могут найти глобальный оптимум (k-mean, EM и т.д.) и не применяются к глобальным методам оптимизации (например, SMO-алгоритму для SVM).

Ответ 4

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

Ответ 5

  1. Разве инициализация весов в 0 не будет лучшей идеей? Таким образом, веса смогут быстрее найти свои значения (положительные или отрицательные)?

  2. Как нарушение симметрии делает обучение быстрее?

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

Узлы, расположенные рядом в скрытом слое, подключенном к одним и тем же входам, должны иметь разные весовые коэффициенты, чтобы алгоритм обучения мог обновлять весовые коэффициенты.

Делая веса ненулевыми (но близкими к 0, как 0,1 и т.д.), Алгоритм будет изучать веса в следующих итерациях и не будет зависать. Таким образом, происходит нарушение симметрии.

  1. Есть ли какая-то другая основная философия, стоящая за рандомизацией весов, кроме надежды на то, что они будут близки к оптимальным значениям при инициализации?

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

Процесс поиска или обучения нейронной сети известен как конвергенция. Обнаружение неоптимального решения или локальных оптимумов приводит к преждевременной конвергенции.

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

После 2015 года в связи с достижениями в области исследований в области машинного обучения введена He-et-al Initialization вместо случайной инициализации

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Веса все еще случайны, но различаются по дальности в зависимости от размера предыдущего слоя нейронов.

Таким образом, ненулевые случайные веса помогают нам

  1. Выходи из местной оптимы
  2. Нарушение симметрии
  3. Достигните глобальной оптимальности в дальнейших итерациях

Рекомендации:

machinelearningmastery

towardsdatascience