Como os gradientes se propagam em uma rede neural recorrente desenrolada?


8

Estou tentando entender como o rnn pode ser usado para prever sequências, trabalhando com um exemplo simples. Aqui está minha rede simples, consistindo em uma entrada, um neurônio oculto e uma saída:

insira a descrição da imagem aqui

O neurônio oculto é a função sigmóide e a saída é considerada uma saída linear simples. Então, eu acho que as obras de rede da seguinte forma: se o começa unidade escondida no estado s, e estamos processando um ponto de dados que é uma sequência de comprimento , , então:( x 1 , x 2 , x 3 )3(x1,x2,x3)

No momento 1, o valor previsto, , ép1

p1=u×σ(ws+vx1)

No momento 2, temos

p2=u×σ(w×σ(ws+vx1)+vx2)

No momento 3, temos

p3=u×σ(w×σ(w×σ(ws+vx1)+vx2)+vx3)

Por enquanto, tudo bem?

O rnn "desenrolado" é assim:

insira a descrição da imagem aqui

Se usarmos a soma do termo do erro quadrado para a função objetivo, como ela será definida? Em toda a sequência? Nesse caso, teríamos algo como ?E=(p1x1)2+(p2x2)2+(p3x3)2

Os pesos são atualizados somente depois que toda a sequência foi analisada (neste caso, a sequência de 3 pontos)?

Quanto ao gradiente em relação aos pesos, precisamos calcular , tentarei fazer isso simplesmente examinando as 3 equações para acima, se tudo estiver correto. Além de fazer dessa maneira, isso não me parece propagação traseira de baunilha, porque os mesmos parâmetros aparecem em diferentes camadas da rede. Como nos ajustamos para isso?dE/dw,dE/dv,dE/dupi

Se alguém puder me ajudar nesse exemplo de brinquedo, eu ficaria muito agradecido.


Eu acho que algo errado com a função de erro, você provavelmente obtém como termo do segundo elemento e deve compará-lo provavelmente com , no caso perfeito eles devem ser iguais. Na sua função de erro, basta comparar a entrada e a saída da rede. p1x2
itdxer

Eu pensei que poderia ser o caso. Mas então como é definido o erro para o último elemento previsto, ? p3
Fequish

Respostas:


1

Eu acho que você precisa de valores-alvo. Portanto, para a sequência , você precisa de destinos correspondentes . Como você deseja prever o próximo termo da sequência de entrada original, você precisará: (x1,x2,x3)(t1,t2,t3)

t1=x2, t2=x3, t3=x4

Você precisaria definir , portanto, se você tivesse uma sequência de entrada de comprimento para treinar o RNN, seria capaz de usar apenas os primeiros termos como valores de entrada e os últimos termos como destino valores.x4NN1N1

Se usarmos a soma do termo do erro quadrado para a função objetivo, como ela será definida?

Tanto quanto sei, você está certo - o erro é a soma de toda a sequência. Isso ocorre porque os pesos , e são os mesmos na RNN desdobrada.uvw

Então,

E=tEt=t(ttpt)2

Os pesos são atualizados somente depois que toda a sequência foi analisada (neste caso, a sequência de 3 pontos)?

Sim, se usando a propagação de volta ao longo do tempo, acredito que sim.

Quanto aos diferenciais, você não desejará expandir toda a expressão para e diferenciá-la quando se trata de RNNs maiores. Portanto, algumas notações podem torná-lo mais limpo:E

  • Seja denota a entrada para o neurônio oculto no tempo (ie )zttz1=ws+vx1
  • Seja denotar a saída do neurônio oculto no tempo (ie ytty1=σ(ws+vx1))
  • Sejay0=s
  • Sejaδt=Ezt

Então, os derivados são:

Eu=ytEv=tδtxtEw=tδtyt1

Onde para uma sequência de comprimento e:t[1, T]T

δt=σ(zt)(u+δt+1w)

Esta relação recorrente vem percebendo que o escondido atividade não só os efeitos do erro no saída, , mas também efeitos no resto do erro mais abaixo na RNN, :tthtthEtEEt

Ezt=Etytytzt+(EEt)zt+1zt+1ytytztEzt=ytzt(Etyt+(EEt)zt+1zt+1yt)Ezt=σ(zt)(u+(EEt)zt+1w)δt=Ezt=σ(zt)(u+δt+1w)

Além de fazer dessa maneira, isso não me parece propagação traseira de baunilha, porque os mesmos parâmetros aparecem em diferentes camadas da rede. Como nos ajustamos para isso?

Esse método é chamado de propagação de retorno ao longo do tempo (BPTT) e é semelhante à propagação de retorno no sentido em que utiliza a aplicação repetida da regra da cadeia.

Um exemplo trabalhado mais detalhado, porém complicado, para uma RNN pode ser encontrado no capítulo 3.2 do 'Rotulagem de sequência supervisionada com redes neurais recorrentes' de Alex Graves - leitura realmente interessante!


0

Erro que você descreveu acima (após a modificação que escrevi no comentário abaixo da pergunta), você pode usar apenas como um erro de previsão total, mas não pode usá-lo no processo de aprendizagem. Em cada iteração, você coloca um valor de entrada na rede e obtém uma saída. Ao obter a saída, você deve verificar o resultado da sua rede e propagar o erro para todos os pesos. Após a atualização, você colocará o próximo valor em sequência e fará uma previsão para esse valor, além de propagar o erro e assim por diante.

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.