Почему опасно инициализировать веса нулями? Есть ли простой пример, который демонстрирует это?
neural-networks
backpropagation
user8078
источник
источник
Ответы:
изменить см. комментарий Альфы ниже. Я не эксперт по нейронным сетям, поэтому я буду подчиняться ему.
Мое понимание отличается от других ответов, которые были размещены здесь.
Я почти уверен, что обратное распространение подразумевает добавление к существующим весам, а не умножение. Сумма, которую вы добавляете, определяется дельта-правилом . Обратите внимание, что wij не отображается в правой части уравнения.
Насколько я понимаю, есть как минимум две веские причины не устанавливать начальные веса на ноль:
Во-первых, нейронные сети имеют тенденцию застрять в локальных минимумах, поэтому неплохо дать им много разных начальных значений. Вы не можете сделать это, если они все начинаются с нуля.
Во-вторых, если нейроны начинаются с одинаковых весов, то все нейроны будут следовать одному и тому же градиенту и всегда будут выполнять одно и то же.
источник
Если вы думали о весах как об априорах, как в байесовской сети, то вы исключили возможность того, что эти входные данные могут повлиять на систему. Другое объяснение состоит в том, что обратное распространение идентифицирует набор весов, который минимизирует взвешенную квадратичную разницу между целевым и наблюдаемым значениями (E). Тогда как можно было бы ориентировать любой алгоритм градиентного спуска с точки зрения определения направления системы? Вы помещаете себя в седловую точку пространства параметров.
источник
На каждой итерации вашего алгоритма обратного распространения вы будете обновлять веса, умножая существующий вес на дельту, определенную обратным распространением. Если начальное значение веса равно 0, умножение его на любое значение для дельты не изменит веса, что означает, что каждая итерация не влияет на веса, которые вы пытаетесь оптимизировать.
источник
Мне кажется, что одна из причин, по которой плохо инициализировать веса одинаковыми значениями (а не только нулем), заключается в том, что тогда для любого конкретного скрытого слоя все узлы в этом слое будут иметь абсолютно одинаковые входные данные и, следовательно, останутся такими же, как каждый Другие.
источник
Ответ на это не совсем "Местные минимумы / максимумы".
Если у вас есть более 1 скрытого слоя и каждый вес равен 0, то независимо от того, насколько велико / мало, изменение Weight_i не приведет к изменению выходных данных.
Это потому, что дельта Weight_i будет поглощена следующим скрытым слоем.
Когда нет изменений в выходе, нет градиента и, следовательно, нет направления.
Это имеет те же черты, что и локальные минимумы / максимумы, но на самом деле из-за 0, что технически отличается
источник
Основная проблема с инициализацией всех весов до нуля математически приводит к тому, что либо значения нейронов равны нулю (для многослойности), либо дельта будет равна нулю. В одном из комментариев @alfa в приведенных выше ответах уже есть подсказка, упоминается, что произведение весов и дельт должно быть равно нулю. Это по существу означало бы, что для градиентного спуска это находится на вершине холма прямо на его пике, и это не в состоянии нарушить симметрию. Случайность нарушит эту симметрию и достигнет локального минимума. Даже если мы немного нарушим вес, мы окажемся на трассе. Ссылка: Изучение данных Лекция 10.
источник
Это плохая идея по двум причинам:
Если у вас есть сигмовидная активация, или что-нибудь, гдег( 0 ) ≠ 0 тогда это приведет к тому, что веса будут перемещаться «вместе», ограничивая мощность обратного распространения для поиска во всем пространстве, чтобы найти оптимальные веса, которые снижают потери / затраты.
Если у вас естьTANH или активация ReLu, или что-нибудь, где г( 0 ) = 0 тогда все выходы будут равны 0, а градиенты для весов всегда будут равны 0. Следовательно, у вас не будет никакого обучения вообще.
Давайте продемонстрируем это (для простоты я предполагаю конечный выходной слой из 1 нейрона):
Прямая подача : если все веса равны нулю, то вход для 2-го слоя будет одинаковым для всех узлов. Выходы узлов будут одинаковыми, хотя они будут умножены на следующий набор весов, который будет равен 0, и поэтому входы для следующего слоя будут равны нулю и т. Д., И т. Д. Таким образом, все входы (кроме первого слой, который принимает фактические входы) будет 0, и все выходы будут одинаковыми (0,5 для активации сигмоида и 0 дляTANH и активация ReLu).
Обратное распространение : давайте рассмотрим только последний слой. Окончательная потеря (L ) зависит от конечного выхода сети (aL где L обозначает последний слой), который зависит от окончательного ввода перед активацией (ZL= WLaL - 1 ), который зависит от веса конечного слоя (WL ). Теперь мы хотим найти:
dWL:=∂L∂WL=∂L∂aL∂aL∂zL∂zL∂WL
∂L∂a is the derivative of the cost function, ∂a∂z is the derivative of the activation function. Regardless of what their (∂L∂a∂a∂Z ) значение есть, ∂Z∂W просто равняется выводам предыдущего уровня, т.е. aL - 1 , но так как они все одинаковы, вы получите тот конечный результат dWL вектор со всеми равными элементами Итак, когда вы будете обновлятьWL= WL- α dWL он будет двигаться в том же направлении. И то же самое касается предыдущих слоев.
Точка 2 может быть показана из того факта, чтоaL - 1 будет равен нулю. Отсюда твойdWL вектор будет полон нулей, и обучение не может быть достигнуто.
источник