Vetorização de perda de entropia cruzada

9

Estou lidando com um problema relacionado à localização do gradiente da função de perda de entropia cruzada no parâmetro que:θ

CE(θ)=iyilog(y^i)

Onde, e é uma entrada de vetor.y^i=softmax(θi)θi

Além disso, é um vetor quente da classe correta e é a previsão para cada classe usando a função softmax.yyy^

Portanto, por exemplo, vamos ter ey i = ( 0,10 0,20 0,10 0,40 0,20 )yi=(00010)y^i=(0.100.200.100.400.20)

Para encontrar a derivada parcialCE(θ)θik=yiky^ik

A partir daí, para cada os gradientes parciais individuais serão C E ( θ )iCE(θ)θi=(yi1y^i1yi2y^i2yi3y^i3yi4y^i4yi5y^i5)

Mas isso não é verdade porque os gradientes devem ser 0 para todas as outras linhas, exceto para a quarta linha, porque usamos a propriedade do vetor quente. Portanto, o gradiente real deve ser CE(θ)θi=(000yi4y^i40)

E, portanto, os gradientes para tudo o que deveria ser C E ( θ )iCE(θ)θ=(000yi4y^i4000yi3y^i300...0yi2y^i2000)

Mas isso não é igual a . Portanto, não devemos chamar o gradiente da função de entropia cruzada uma diferença de vetor entre o previsto e o original.y^y

Alguém pode esclarecer isso?

UPDATE: Corrigida minha derivação

θ=(θ1θ2θ3θ4θ5)

CE(θ)=iyilog(y^i)

Onde, e é uma entrada de vetor.θiy^i=softmax(θi)θi

Além disso, é um vetor quente da classe correta e é a previsão para cada classe usando a função softmax.yyy^

CE(θ)θi=(log(y^k))

UPDATE: Removido o índice de eyyy^ Portanto, por exemplo, vamos ter ey = ( 0,10 0,20 0,10 0,40 0,20 )y=(00010)y^=(0.100.200.100.400.20)

UPDATE: Corrigido: eu estava usando derivada wrt , deveria ser apenas wrt . θ iθikθi Para encontrar a derivada parcialCE(θ)θi=yky^k

A partir daí, para cada os gradientes parciais individuais serão C E ( θ )iCE(θ)θ=(y1y^1y2y^2y3y^3y4y^4y5y^5)

O que aconteceu acima acontece porque E Tomando a derivada parcial de wrt , obtemos:CE(θ)=(yklog(y^k))y^k=log(softmax(θk))=θklog(jexp(θj))CE(θ)θi

CE(θ)θi=(θkθisoftmax(θi))

PASSO PRINCIPAL: O facto de e cria o vetor que completa a prova.θkθi=0,ikθkθi=1,i=kCE(θ)θ=y^y

Shubhanshu Mishra
fonte

Respostas:

2

Não, os gradientes não devem ser zero para os outros componentes. Se sua previsão é para alguns e sua observação , você previu demais por .y^iji,jyij=0y^ij

Neil G
fonte
Mas sempre será um valor e a observação real. E porque usamos o fato de ser um vetor quente, portanto, a derivada parcial , dado Estou cometendo um erro na diferenciação? y^ijyijyiCE(θ)θij=0,jkyik=1
Shubhanshu Mishra
1
Obrigado pela sua contribuição @ neil-g. Consegui corrigir minha derivação do gradiente.
Shubhanshu Mishra 01/05/19
15

O seguinte é o mesmo conteúdo da edição, mas no formato passo a passo (para mim) um pouco mais claro:

Estamos tentando provar que:

CEθ=y^y

dado

CE(θ)=iyilog(y^i)

e

y^i=exp(θi)jexp(θj)

Sabemos que para e , então:yj=0jkyk=1

CE(θ)= log(y^k)

= log(exp(θk)jexp(θj))

= θk+log(jexp(θj))

CEθ=θkθ+θlog(jexp(θj))

Use o fato de que e para , para mostrar isso.θkθk=1θkθq=0qk

θkθ=y

Para a segunda parte, escrevemos a derivada para cada elemento individual de e usamos a regra da cadeia para obter:θ

θilog(jexp(θj))=exp(θi)jexp(θj)=y^i

Conseqüentemente,

CEθ=θlog(jexp(θj))θkθ=y^ - y

Maarten
fonte