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)(1ai(l)))aj(l1)

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 deij(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)(1ai(l)))aj(l1)

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(l1)
Com definido (apenas para o índice L) como:δi(L)

δi(L)=Czi(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)(1ai(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)(1ai(l)))aj(l1)

DEMONSTRAÇÃO DO PRIMEIRO TRUQUE MÁGICO: ij(l)=δi(l)aj(l1)

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)=kCzk(l)zk(l)θij(l)

No entanto, como:

zk(l)=mθkm(l)am(l1)

Podemos então escrever:

zk(l)θij(l)=θij(l)mθkm(l)am(l1)

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

zk(l)θij(l)=mθkm(l)θij(l)am(l1)

com:

ifk,mi,j,  θkm(l)θij(l)am(l1)=0

ifk,m=i,j,  θkm(l)θij(l)am(l1)=θij(l)θij(l)aj(l1)=aj(l1)

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

zi(l)θij(l)=θij(l)θij(l)aj(l1)+mjθim(l)θij(l)aj(l1)=aj(l1)+0

Finalmente, para k = i:

zi(l)θij(l)=aj(l1)

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

ij(l)=Czi(l)zi(l)θij(l)

O que equivale a:

ij(l)=Czi(l)aj(l1)

Ou:

ij(l)=δi(l)aj(l1)

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

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

Lembre-se de que colocamos:

δ(l)=Cz(l)   and   δi(l)=Czi(l)

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

δi(l)=kCzk(l+1)zk(l+1)zi(l)

Substituindo por , temos:Czk(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))(1g(zi(l))

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

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

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

ij(l)=[θ(l+1)Tδ(l+1)(ai(l)(1ai(l)))][aj(l1)]

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)=CZj(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)=Czi(l)
δi(l)=θ(l+1)Tδ(l+1).(ai(l)(1ai(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.