Почему опасно инициализировать веса нулями? Есть ли простой пример, который демонстрирует это?
Почему опасно инициализировать веса нулями? Есть ли простой пример, который демонстрирует это?
Ответы:
изменить см. комментарий Альфы ниже. Я не эксперт по нейронным сетям, поэтому я буду подчиняться ему.
Мое понимание отличается от других ответов, которые были размещены здесь.
Я почти уверен, что обратное распространение подразумевает добавление к существующим весам, а не умножение. Сумма, которую вы добавляете, определяется дельта-правилом . Обратите внимание, что wij не отображается в правой части уравнения.
Насколько я понимаю, есть как минимум две веские причины не устанавливать начальные веса на ноль:
Во-первых, нейронные сети имеют тенденцию застрять в локальных минимумах, поэтому неплохо дать им много разных начальных значений. Вы не можете сделать это, если они все начинаются с нуля.
Во-вторых, если нейроны начинаются с одинаковых весов, то все нейроны будут следовать одному и тому же градиенту и всегда будут выполнять одно и то же.
Если вы думали о весах как об априорах, как в байесовской сети, то вы исключили возможность того, что эти входные данные могут повлиять на систему. Другое объяснение состоит в том, что обратное распространение идентифицирует набор весов, который минимизирует взвешенную квадратичную разницу между целевым и наблюдаемым значениями (E). Тогда как можно было бы ориентировать любой алгоритм градиентного спуска с точки зрения определения направления системы? Вы помещаете себя в седловую точку пространства параметров.
На каждой итерации вашего алгоритма обратного распространения вы будете обновлять веса, умножая существующий вес на дельту, определенную обратным распространением. Если начальное значение веса равно 0, умножение его на любое значение для дельты не изменит веса, что означает, что каждая итерация не влияет на веса, которые вы пытаетесь оптимизировать.
Мне кажется, что одна из причин, по которой плохо инициализировать веса одинаковыми значениями (а не только нулем), заключается в том, что тогда для любого конкретного скрытого слоя все узлы в этом слое будут иметь абсолютно одинаковые входные данные и, следовательно, останутся такими же, как каждый Другие.
Ответ на это не совсем "Местные минимумы / максимумы".
Если у вас есть более 1 скрытого слоя и каждый вес равен 0, то независимо от того, насколько велико / мало, изменение Weight_i не приведет к изменению выходных данных.
Это потому, что дельта Weight_i будет поглощена следующим скрытым слоем.
Когда нет изменений в выходе, нет градиента и, следовательно, нет направления.
Это имеет те же черты, что и локальные минимумы / максимумы, но на самом деле из-за 0, что технически отличается
Основная проблема с инициализацией всех весов до нуля математически приводит к тому, что либо значения нейронов равны нулю (для многослойности), либо дельта будет равна нулю. В одном из комментариев @alfa в приведенных выше ответах уже есть подсказка, упоминается, что произведение весов и дельт должно быть равно нулю. Это по существу означало бы, что для градиентного спуска это находится на вершине холма прямо на его пике, и это не в состоянии нарушить симметрию. Случайность нарушит эту симметрию и достигнет локального минимума. Даже если мы немного нарушим вес, мы окажемся на трассе. Ссылка: Изучение данных Лекция 10.
Это плохая идея по двум причинам:
Если у вас есть сигмовидная активация, или что-нибудь, где тогда это приведет к тому, что веса будут перемещаться «вместе», ограничивая мощность обратного распространения для поиска во всем пространстве, чтобы найти оптимальные веса, которые снижают потери / затраты.
Если у вас есть или активация ReLu, или что-нибудь, где тогда все выходы будут равны 0, а градиенты для весов всегда будут равны 0. Следовательно, у вас не будет никакого обучения вообще.
Давайте продемонстрируем это (для простоты я предполагаю конечный выходной слой из 1 нейрона):
Прямая подача : если все веса равны нулю, то вход для 2-го слоя будет одинаковым для всех узлов. Выходы узлов будут одинаковыми, хотя они будут умножены на следующий набор весов, который будет равен 0, и поэтому входы для следующего слоя будут равны нулю и т. Д., И т. Д. Таким образом, все входы (кроме первого слой, который принимает фактические входы) будет 0, и все выходы будут одинаковыми (0,5 для активации сигмоида и 0 для и активация ReLu).
Обратное распространение : давайте рассмотрим только последний слой. Окончательная потеря () зависит от конечного выхода сети (где L обозначает последний слой), который зависит от окончательного ввода перед активацией (), который зависит от веса конечного слоя (). Теперь мы хотим найти:
Точка 2 может быть показана из того факта, что будет равен нулю. Отсюда твой вектор будет полон нулей, и обучение не может быть достигнуто.