Por que é perigoso inicializar pesos com zeros? Existe algum exemplo simples que demonstre isso?
neural-networks
backpropagation
user8078
fonte
fonte
Respostas:
editar veja o comentário de alfa abaixo. Eu não sou especialista em redes neurais, então irei adiá-lo.
Meu entendimento é diferente das outras respostas que foram postadas aqui.
Tenho certeza de que a retropropagação envolve aumentar os pesos existentes, não multiplicar. A quantidade que você adiciona é especificada pela regra delta . Observe que wij não aparece no lado direito da equação.
Meu entendimento é que existem pelo menos duas boas razões para não definir os pesos iniciais como zero:
Primeiro, as redes neurais tendem a ficar presas nos mínimos locais, por isso é uma boa idéia fornecer a eles muitos valores iniciais diferentes. Você não pode fazer isso se todos começarem do zero.
Segundo, se os neurônios começam com os mesmos pesos, todos os neurônios seguem o mesmo gradiente e sempre acabam fazendo a mesma coisa que os outros.
fonte
Se você pensou nos pesos como anteriores, como em uma rede bayesiana, descartou qualquer possibilidade de que essas entradas possam afetar o sistema. Outra explicação é que a retropropagação identifica o conjunto de pesos que minimiza a diferença quadrada ponderada entre a meta e os valores observados (E). Então, como qualquer algoritmo de descida de gradiente poderia ser orientado em termos de determinação da direção do sistema? Você está se colocando em um ponto de sela do espaço de parâmetro.
fonte
Em cada iteração do seu algoritmo de retropropagação, você atualizará os pesos multiplicando o peso existente por um delta determinado pela retropropagação. Se o valor do peso inicial for 0, multiplicá-lo por qualquer valor para delta não mudará o peso, o que significa que cada iteração não afeta os pesos que você está tentando otimizar.
fonte
Parece-me que uma das razões pelas quais é ruim inicializar pesos com os mesmos valores (não apenas zero) é porque, para qualquer camada oculta em particular, todos os nós nessa camada teriam exatamente as mesmas entradas e, portanto, permaneceriam iguais a cada de outros.
fonte
A resposta para isso não é inteiramente "Local Minima / Maxima".
Quando você tem mais de 1 Camada oculta e todo peso tem 0, não importa quão grande / pequena uma alteração no Weight_i não cause uma alteração na saída.
Isso ocorre porque o delta Weight_i será absorvido pela próxima camada oculta.
Quando não há alteração na saída, não há gradiente e, portanto, nenhuma direção.
Ele compartilha as mesmas características de um Mínimo local / Máximo, mas na verdade é por causa dos 0s, que são tecnicamente diferentes
fonte
O principal problema com a inicialização de todos os pesos para zero leva matematicamente aos valores dos neurônios serem zero (para várias camadas) ou o delta seria zero. Em um dos comentários de @alfa nas respostas acima, já é fornecida uma dica, é mencionado que o produto de pesos e delta precisa ser zero. Isso significaria essencialmente que, para a descida do gradiente, ela fica no topo da colina, no auge, e é incapaz de quebrar a simetria. A aleatoriedade quebrará essa simetria e chegaria ao mínimo local. Mesmo se perturbássemos um pouco o peso, estaríamos na pista. Referência: Aprendendo com os dados Aula 10.
fonte
É uma má ideia por dois motivos:
Se você tiver ativação sigmóide, ou qualquer coisa em queg( 0 ) ≠ 0 então, fará com que os pesos se movam "juntos", limitando o poder da propagação traseira para pesquisar em todo o espaço e encontrar os pesos ideais que reduzem a perda / custo.
Se você temtanh ativação do ReLu ou qualquer coisa em que g( 0 ) = 0 todas as saídas serão 0 e os gradientes dos pesos serão sempre 0. Portanto, você não terá nenhum aprendizado.
Vamos demonstrar isso (por simplicidade, assumo uma camada final de saída de 1 neurônio):
Avanço de alimentação : se todos os pesos forem zeros, a entrada para a 2ª camada será a mesma para todos os nós. As saídas dos nós serão as mesmas, embora sejam multiplicadas pelo próximo conjunto de pesos, que será 0, e assim as entradas para a próxima camada serão zero, etc., etc. Portanto, todas as entradas (exceto a primeira camada que recebe as entradas reais) será 0 e todas as saídas serão as mesmas (0,5 para ativação sigmóide e 0 paratanh e ativação do ReLu).
Propagação traseira : Vamos examinar apenas a camada final. A perda final (eu ) depende da saída final da rede (umaeu , em que L denota a camada final), que depende da entrada final antes da ativação (zeu= WeuumaL - 1 ), que depende dos pesos da camada final (Weu ) Agora queremos encontrar:
dWeu: = ∂eu∂Weu= ∂eu∂umaeu∂umaeu∂zeu∂zeu∂Weu
∂eu∂uma é a derivada da função de custo, ∂uma∂z é a derivada da função de ativação. Independentemente do que eles (∂eu∂uma∂uma∂z ) o valor é, ∂z∂W é simplesmente igual às saídas da camada anterior, ou seja, umaL - 1 , mas como são todos iguais, você obtém o resultado final dWeu é um vetor com todos os elementos iguais. Então, quando você atualizarWeu= Weu- α dWeu ele se moverá na mesma direção. E o mesmo vale para as camadas anteriores.
O ponto 2 pode ser demonstrado pelo fato de queumaL - 1 será igual a zero. Daí o seudWeu O vetor estará cheio de zeros e nenhum aprendizado pode ser alcançado.
fonte