Опасность установки всех начальных весов в ноль при обратном распространении


30

Почему опасно инициализировать веса нулями? Есть ли простой пример, который демонстрирует это?


Кажется, классическая сеть XOR 2-1 - хороший пример, но я был бы признателен за некоторые теоретические рассуждения.
user8078

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

Уже есть хорошие ответы, почему бы не инициализировать веса до нуля. Следующая ссылка проливает свет на то, «как следует выбирать начальные веса?» staff.itee.uq.edu.au/janetw/cmc/chapters/BackProp/index2.html Надеюсь, это поможет другим читателям.
doer_uvc

@NickCox веса здесь кратны следующему слою весов, а последний слой не кратен другим весам - так что здесь это не применимо.
Дэвид Рафаэли

Ответы:


21

изменить см. комментарий Альфы ниже. Я не эксперт по нейронным сетям, поэтому я буду подчиняться ему.

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

Я почти уверен, что обратное распространение подразумевает добавление к существующим весам, а не умножение. Сумма, которую вы добавляете, определяется дельта-правилом . Обратите внимание, что wij не отображается в правой части уравнения.

Насколько я понимаю, есть как минимум две веские причины не устанавливать начальные веса на ноль:

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

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


6
«Сумма, которую вы добавляете, определяется дельта-правилом. Обратите внимание, что wij не отображается в правой части уравнения». - Это верно только для нейронных сетей без скрытых слоев! Но вы упомянули два других момента, которые являются хорошими аргументами против инициализации ANN с равными весами.
Alfa

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

2-я причина неверна? open.wolframcloud.com/env/...
user3180

различные входы нарушают симметрию веса
user3180

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

7

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


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

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

6

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


2
> вы будете обновлять веса, умножая существующий вес на значение, определяемое обратным распространением - я так не думаю, это не просто умножение.
user8078

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

«Значение, определяемое обратным распространением», является дельтой (см., Например, оригинальную статью «Изучение представлений по ошибкам, распространяющимся обратно», уравнение 7). Ответ плохо сформулирован, но не совсем неверен.
Alfa

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

θ(0)знак равно0,5

2

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


1

Ответ на это не совсем "Местные минимумы / максимумы".

Если у вас есть более 1 скрытого слоя и каждый вес равен 0, то независимо от того, насколько велико / мало, изменение Weight_i не приведет к изменению выходных данных.

Это потому, что дельта Weight_i будет поглощена следующим скрытым слоем.

Когда нет изменений в выходе, нет градиента и, следовательно, нет направления.

Это имеет те же черты, что и локальные минимумы / максимумы, но на самом деле из-за 0, что технически отличается


0

Основная проблема с инициализацией всех весов до нуля математически приводит к тому, что либо значения нейронов равны нулю (для многослойности), либо дельта будет равна нулю. В одном из комментариев @alfa в приведенных выше ответах уже есть подсказка, упоминается, что произведение весов и дельт должно быть равно нулю. Это по существу означало бы, что для градиентного спуска это находится на вершине холма прямо на его пике, и это не в состоянии нарушить симметрию. Случайность нарушит эту симметрию и достигнет локального минимума. Даже если мы немного нарушим вес, мы окажемся на трассе. Ссылка: Изучение данных Лекция 10.


0

Это плохая идея по двум причинам:

  1. Если у вас есть сигмовидная активация, или что-нибудь, где г(0)0 тогда это приведет к тому, что веса будут перемещаться «вместе», ограничивая мощность обратного распространения для поиска во всем пространстве, чтобы найти оптимальные веса, которые снижают потери / затраты.

  2. Если у вас есть TANH или активация ReLu, или что-нибудь, где г(0)знак равно0 тогда все выходы будут равны 0, а градиенты для весов всегда будут равны 0. Следовательно, у вас не будет никакого обучения вообще.

Давайте продемонстрируем это (для простоты я предполагаю конечный выходной слой из 1 нейрона):

Прямая подача : если все веса равны нулю, то вход для 2-го слоя будет одинаковым для всех узлов. Выходы узлов будут одинаковыми, хотя они будут умножены на следующий набор весов, который будет равен 0, и поэтому входы для следующего слоя будут равны нулю и т. Д., И т. Д. Таким образом, все входы (кроме первого слой, который принимает фактические входы) будет 0, и все выходы будут одинаковыми (0,5 для активации сигмоида и 0 дляTANH и активация ReLu).

Обратное распространение : давайте рассмотрим только последний слой. Окончательная потеря (L) зависит от конечного выхода сети (aLгде L обозначает последний слой), который зависит от окончательного ввода перед активацией (ZLзнак равноWLaL-1), который зависит от веса конечного слоя (WL). Теперь мы хотим найти:

dWL:=LWL=LaLaLzLzLWL
La is the derivative of the cost function, az is the derivative of the activation function. Regardless of what their (LaaZ) значение есть, ZW просто равняется выводам предыдущего уровня, т.е. aL-1, но так как они все одинаковы, вы получите тот конечный результат dWLвектор со всеми равными элементами Итак, когда вы будете обновлятьWLзнак равноWL-αdWLон будет двигаться в том же направлении. И то же самое касается предыдущих слоев.

Точка 2 может быть показана из того факта, что aL-1будет равен нулю. Отсюда твойdWL вектор будет полон нулей, и обучение не может быть достигнуто.

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