Como derivar erros na rede neural com o algoritmo de retropropagação?


10

Deste vídeo por Andrew Ng por volta das 5:00

insira a descrição da imagem aqui

Como são e ? De fato, o que significa? é obtido comparando com y, essa comparação não é possível para a saída de uma camada oculta, certo?δ3δ2δ3δ4


O link do vídeo não está funcionando. Atualize-o ou forneça um link para o curso. Obrigado.
— MadHatter

Respostas:


15

Vou responder sua pergunta sobre o , mas lembre-se de que sua pergunta é uma subquestão de uma pergunta maior e é por isso que:δi(l)

∇ij(l)=∑kθki(l+1)δk(l+1)∗(ai(l)(1−ai(l)))∗aj(l−1)

Lembrete sobre as etapas nas redes neurais:

  • Etapa 1: propagação direta (cálculo de )ai(l)

  • Etapa 2a: propagação reversa: cálculo dos errosδi(l)

  • Etapa 2b: propagação para trás: cálculo do gradiente de J ( ) usando os erros e ,∇ij(l)Θδi(l+1)ai(l)

  • Etapa 3: descida do gradiente: calcule o novo usando os gradientesθij(l)∇ij(l)

Primeiro, para entender o que o sãoδi(l) , o que eles representam e por Andrew NG-lo falando sobre eles , você precisa entender o que Andrew está realmente fazendo naquele pointand porque nós fazemos todos esses cálculos: ele está calculando o gradiente de∇ij(l)θij(l) a ser usado no algoritmo de descida Gradiente.

O gradiente é definido como:

∇ij(l)=∂C∂θij(l)

Como não podemos realmente resolver essa fórmula diretamente, vamos modificá-la usando DOIS TRUQUES MÁGICOS para chegar a uma fórmula que realmente podemos calcular. Esta fórmula final utilizável é:

∇ij(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))∗aj(l−1)

Para chegar a esse resultado, o PRIMEIRO TRUQUE MÁGICO é que podemos escrever o gradiente de usando :∇ij(l)θij(l)δi(l)

∇ij(l)=δi(l)∗aj(l−1)
Com definido (apenas para o índice L) como:δi(L)

δi(L)=∂C∂zi(l)

E então o SEGUNDO TRUQUE MÁGICO usando a relação entre e , para definir os outros índices,δi(l)δi(l+1)

δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

E como eu disse, finalmente podemos escrever uma fórmula para a qual conhecemos todos os termos:

∇ij(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))∗aj(l−1)

DEMONSTRAÇÃO DO PRIMEIRO TRUQUE MÁGICO: ∇ij(l)=δi(l)∗aj(l−1)

Definimos:

∇ij(l)=∂C∂θij(l)

A regra Chain para dimensões mais altas (você REALMENTE deve ler esta propriedade da regra Chain) nos permite escrever:

∇ij(l)=∑k∂C∂zk(l)∗∂zk(l)∂θij(l)

No entanto, como:

zk(l)=∑mθkm(l)∗am(l−1)

Podemos então escrever:

∂zk(l)∂θij(l)=∂∂θij(l)∑mθkm(l)∗am(l−1)

Devido à linearidade da diferenciação [(u + v) '= u' + v '], podemos escrever:

∂zk(l)∂θij(l)=∑m∂θkm(l)∂θij(l)∗am(l−1)

com:

ifk,m≠i,j,  ∂θkm(l)∂θij(l)∗am(l−1)=0

ifk,m=i,j,  ∂θkm(l)∂θij(l)∗am(l−1)=∂θij(l)∂θij(l)∗aj(l−1)=aj(l−1)

Então, para k = i (caso contrário, é claramente igual a zero):

∂zi(l)∂θij(l)=∂θij(l)∂θij(l)∗aj(l−1)+∑m≠j∂θim(l)∂θij(l)∗aj(l−1)=aj(l−1)+0

Finalmente, para k = i:

∂zi(l)∂θij(l)=aj(l−1)

Como resultado, podemos escrever nossa primeira expressão do gradiente :∇ij(l)

∇ij(l)=∂C∂zi(l)∗∂zi(l)∂θij(l)

O que equivale a:

∇ij(l)=∂C∂zi(l)∗aj(l−1)

Ou:

∇ij(l)=δi(l)∗aj(l−1)

DEMONSTRAÇÃO DO SEGUNDO TRUQUE MÁGICO : ou:δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

δ(l)=θ(l+1)Tδ(l+1).∗(a(l)(1−a(l)))

Lembre-se de que colocamos:

δ(l)=∂C∂z(l)   and   δi(l)=∂C∂zi(l)

Novamente, a regra Cadeia para dimensões mais altas nos permite escrever:

δi(l)=∑k∂C∂zk(l+1)∂zk(l+1)∂zi(l)

Substituindo por , temos:∂C∂zk(l+1)δk(l+1)

δi(l)=∑kδk(l+1)∂zk(l+1)∂zi(l)

Agora, vamos nos concentrar em . Nós temos:∂zk(l+1)∂zi(l)

zk(l+1)=∑jθkj(l+1)∗aj(l)=∑jθkj(l+1)∗g(zj(l))

Em seguida, derivamos essa expressão em relação a :zk(i)

∂zk(l+1)∂zi(l)=∂∑jθkj(l)∗g(zj(l))∂zi(l)

Devido à linearidade da derivação, podemos escrever:

∂zk(l+1)∂zi(l)=∑jθkj(l)∗∂g(zj(l))∂zi(l)

Se j i, então≠∂θkj(l)∗g(zj(l))∂zi(l)=0

Como consequência:

∂zk(l+1)∂zi(l)=θki(l)∗∂g(zi(l))∂zi(l)

E depois:

δi(l)=∑kδk(l+1)θki(l)∗∂g(zi(l))∂zi(l)

Como g '(z) = g (z) (1-g (z)), temos:

δi(l)=∑kδk(l+1)θki(l)∗g(zi(l))(1−g(zi(l))

E como , temos:g(zi(l)=ai(l)

δi(l)=∑kδk(l+1)θki(l+1)∗ai(l)(1−ai(l))

E, finalmente, usando a notação vetorizada:

∇ij(l)=[θ(l+1)Tδ(l+1)∗(ai(l)(1−ai(l)))]∗[aj(l−1)]

1
Obrigado pela sua resposta. Eu votei em você !! Você poderia, por favor, citar as fontes que
— indicou

@tmangin: Após a conversa de Andrew Ng, temos é o erro do nó j na camada l. Como você conseguiu a definição de . δj(i)δj(i)=∂C∂Zj(l)
— Phương

@phuong Na verdade, você está certo em perguntar: apenas o com o maior índice "l" L é definido como Enquanto os deltas com índices "l" inferiores são definidos pela seguinte fórmula:
δi(L)
δi(L)=∂C∂zi(l)
δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))
— tmangin

3
Eu recomendo a leitura da notação vetorial backprop de cálculo dos gradientes.
— CKM 26/03

Sua fórmula final utilizável não é a que Andrew Ng possuía, o que torna realmente frustrante seguir sua prova. Ele tinha ∇ (l) ij = θ (l) Tδ (l + 1). ∗ (a (l) i (1-a (l) i)) ∗ a (l − 1) j, não θ (l + 1) Tδ (l + 1)
— Aziz Javed

0

Este cálculo ajuda. A única diferença deste resultado para o resultado de Andrew é por causa da definição de teta. Na definição de Andrew, z (l + 1) = teta (l) * a (l). Neste cálculo, z (l + 1) = teta (l + 1) * a (l). Então, na verdade, não há diferença.

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.