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^)=iylogy^i , é um vetor quente de rótulo realy

Então, pela regra da cadeia,

Jx=Jθθhhrrx

Os gradientes individuais são:

Jθ=(y^y)
θh=h[hW2+b2]=W2T
hr=h(1h)
rx=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.

Jx=(y^y)W2T[h(1h)]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.1DxJx

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

Obrigado!

amatsukawa
fonte
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.sLxRn×1s(x)Rn×1

Queremos

xL=(s(x)x)Ts(x)L

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

[s(x1)x1s(x1)xns(xn)x1s(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)Ts(x)L=Diag(s(x)x)s(x)L
user0
fonte
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(1h)δ2a

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

Logan
fonte