Perigo de definir todos os pesos iniciais para zero na retropropagação


30

Por que é perigoso inicializar pesos com zeros? Existe algum exemplo simples que demonstre isso?


Parece que a rede clássica XOR 2-1 é um bom exemplo, mas eu apreciaria algum raciocínio teórico.
user8078

1
Uma resposta altamente geral, que pode ou não ser aplicável aqui, é que sempre que novos pesos são múltiplos de pesos antigos, os pesos zero não podem ser alterados. Isso é fatal para o aprendizado.
Nick Cox

Já existem boas respostas disponíveis para por que não inicializar pesos para zero. O link a seguir lança mais luz sobre 'como os pesos iniciais devem ser selecionados?' staff.itee.uq.edu.au/janetw/cmc/chapters/BackProp/index2.html Espero que ajude outros leitores.
Doer_uvc

@NickCox, os pesos aqui são múltiplos da próxima camada de pesos e a última camada não é um múltiplo de outros pesos - portanto, isso não é aplicável aqui.
David Refaeli

Respostas:


21

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.


6
"A quantidade que você adiciona é especificada pela regra delta. Observe que wij não aparece no lado direito da equação." - Isso é verdade apenas para redes neurais sem camadas ocultas! Mas você mencionou outros dois pontos, que são bons argumentos contra a inicialização de uma RNA com pesos iguais .
Alfa28 /

1
Eu acho que é principalmente a segunda razão - por exemplo, em uma rede feed-forward básica totalmente conectada, se cada camada é inicializada com os mesmos pesos, como você sugere, todos os nós seguem o mesmo caminho e são redundantes. Minha impressão é que a maioria das redes com mais de um punhado de recursos não terá problemas com os mínimos locais. Além disso, a inicialização aleatória sozinha não impede que a rede fique travada, mas o uso repetido de inicializações aleatórias diferentes induzirá você a saber se uma iteração específica teve um problema de mínimos locais (acho que isso foi implícito, mas não explícito).
Tahlor 5/02

a segunda razão é falsa? open.wolframcloud.com/env/…
user3180

entradas diferentes quebram a simetria do peso
user3180 em 25/08

você adiciona as derivadas e as derivadas são multiplicação usada através da regra da cadeia.
David Refaeli 20/09

7

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.


1
Esta é a melhor resposta. É um ponto de sela. Os algoritmos de otimização baseados em retropropagação geralmente param imediatamente. Para calcular o gradiente multiplicamos deltas por pesos e o resultado será sempre zero.
Alfa28 /

Eu acho que essa é uma boa resposta para que qualquer peso específico não deva ser inicializado em 0. Mas os deltas provavelmente ainda se propagam de volta - os pesos na camada de saída não dependem dos pesos, portanto, teremos pesos diferentes de zero aqui após a primeira atualização. Após a próxima atualização, esses pesos diferentes de zero serão usados ​​com um delta para ajustar os pesos da camada anterior e assim por diante. Acho que o maior problema em inicializar uma rede com todos os 0s é o mesmo peso, que na sua rede básica de alimentação direta totalmente conectada é equivalente a ter 1 nó por camada.
Tahlor 5/02

6

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.


2
> você atualizará os pesos multiplicando o peso existente por um valor determinado pela retropropagação - acho que não, não é apenas multiplicação.
usar o seguinte comando

1
Meu argumento geral é que, se os pesos iniciais forem zero, eles permanecerão em zero após cada iteração de propagação reversa.
Idr

O 'valor determinado pela retropropagação' é um delta (veja, por exemplo, o artigo original "Aprendendo representações por erros de propagação traseira", equação 7). A resposta é mal formulada, mas não está completamente errada.
Alfa

1
Esta é apenas uma resposta errada. Os pesos mudarão, mas eles mudarão juntos. Isso é ruim porque todas as unidades ocultas serão idênticas ao longo do treinamento e nenhum aprendizado poderá ocorrer.
Amin Sammara

θ(0 0)=0,5

2

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.


1

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


0

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.


0

É uma má ideia por dois motivos:

  1. Se você tiver ativação sigmóide, ou qualquer coisa em que g(0 0)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.

  2. Se você tem tanh ativação do ReLu ou qualquer coisa em que g(0 0)=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=Weuumaeu-1), que depende dos pesos da camada final (Weu) Agora queremos encontrar:

dWeu: =euWeu=euumaeuumaeuzeuzeuWeu
euuma é a derivada da função de custo, umazé a derivada da função de ativação. Independentemente do que eles (euumaumaz) o valor é, zW é simplesmente igual às saídas da camada anterior, ou seja, umaeu-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-αdWeuele se moverá na mesma direção. E o mesmo vale para as camadas anteriores.

O ponto 2 pode ser demonstrado pelo fato de que umaeu-1será igual a zero. Daí o seudWeu O vetor estará cheio de zeros e nenhum aprendizado pode ser alcançado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.