Derivando o gradiente de uma rede neural de camada única com suas entradas, qual é o operador na regra da cadeia?


9

O problema é:

Derive o gradiente em relação à camada de entrada para uma rede neural de camada única oculta usando sigmoid para entrada -> oculta, softmax para oculta -> saída, com perda de entropia cruzada.

Eu posso passar a maior parte da derivação usando a regra de cadeia, mas não tenho certeza de como realmente "encadear" elas.

Definir algumas notações

r=xW1+b1

h=σ(r) , é função sigmóideσ

θ=hW2+b2 ,

y^=S(θ) , é a função softmaxS

J(y^)=∑iylog⁡y^i , é um vetor quente de rótulo realy

Então, pela regra da cadeia,

∂J∂x=∂J∂θ⋅∂θ∂h⋅∂h∂r⋅∂r∂x

Os gradientes individuais são:

∂J∂θ=(y^−y)
∂θ∂h=∂∂h[hW2+b2]=W2T
∂h∂r=h⋅(1−h)
∂r∂x=∂∂x[xW1+b1]=W1T

Agora temos que encadear as definições. Na variável única, isso é fácil, apenas multiplicamos tudo juntos. Nos vetores, não tenho certeza se usaremos a multiplicação por elementos ou por matriz.

∂J∂x=(y^−y)∗W2T⋅[h⋅(1−h)]∗W1T

Onde é a multiplicação de vetores por elementos e é uma multiplicação de matrizes. Essa combinação de operações é a única maneira em que eu consigo las para obter um vetor de dimensão , que eu sei que deve ser.⋅∗1⋅Dx∂J∂x

Minha pergunta é: qual é a maneira correta de descobrir qual operador usar? Estou especificamente confuso com a necessidade do elemento entre e .W2Th

Obrigado!


Sei que encontrar o gradiente wrt nas entradas nem sempre é feito. Acredito que essa é uma vantagem na computação de incorporação de palavras, na qual você tem a opção de otimizar os vetores de palavras "de entrada".
— amatsukawa

Como você dervie dJ / dTheta
— raaj 11/11

Respostas:


4

Acredito que a chave para responder a essa pergunta é apontar que a multiplicação por elementos é realmente uma abreviação e, portanto, quando você deriva das equações, nunca a usa realmente.

A operação real não é uma multiplicação por elementos, mas uma multiplicação por matriz padrão de um gradiente com um jacobiano , sempre .

No caso da não linearidade, o jacobiano da saída do vetor da não linearidade em relação à entrada do vetor da não linearidade passa a ser uma matriz diagonal. Portanto, é verdade que o gradiente multiplicado por essa matriz é equivalente ao gradiente da saída da não linearidade em relação ao elemento de perda multiplicado por um vetor que contém todas as derivadas parciais da não linearidade em relação à entrada da não linearidade, mas isso decorre do jacobiano ser diagonal. Você deve passar pelo passo jacobiano para chegar à multiplicação por elementos, o que pode explicar sua confusão.

Em matemática, temos algumas não linearidades , uma perda e uma entrada para a não linearidade (pode ser qualquer tensor). A saída da não linearidade tem a mesma dimensão --- como @Logan diz, a função de ativação é definida como elemento.sLx∈Rn×1s(x)∈Rn×1

Queremos

∇xL=(∂s(x)∂x)T∇s(x)L

Onde é o jacobiano de . Expandindo esse jacobiano, obtemos ∂s(x)∂xs

[∂s(x1)∂x1…∂s(x1)∂xn⋮⋱⋮∂s(xn)x1…∂s(xn)∂xn]

Vemos que está em todo lugar zero, exceto na diagonal. Podemos criar um vetor de todos os seus elementos diagonais

Diag(∂s(x)∂x)

E então use o operador elemento a elemento.

∇xL=(∂s(x)∂x)T∇s(x)L=Diag(∂s(x)∂x)∘∇s(x)L

0

Sempre que houver uma proporção proporcional a uma função de ativação, as operações tornam-se elementos. Especificamente, usando o seu exemplo, é um derivado de retropropagação e é um derivado de ativação, e seu produto é um elemento elementar, . Isso ocorre porque as funções de ativação são definidas como operações entre elementos na rede neural.δ2=(y^−y)W2Ta′=h∘(1−h)δ2∘a′

Consulte os slides da palestra do cs224d página 30, também pode ajudar.

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.