A última camada oculta produz valores de saída formando um vetor . A camada neuronal de saída destina-se a classificar entre as categorias com uma função de ativação SoftMax atribuindo probabilidades condicionais (dadas ) a cada uma das categoriasEm cada nó na camada final (ou saída), os valores pré-ativados (valores de logit) consistirão nos produtos escalares , em que . Em outras palavras, cada categoria,x⃗ =xK=1,…,kxKw⊤jxwj∈{w1,w2,…,wk}která um vetor diferente de pesos apontando para ele, determinando a contribuição de cada elemento na saída da camada anterior (incluindo um viés), encapsulado em . Entretanto, a ativação dessa camada final não ocorrerá em elementos (como por exemplo, com uma função sigmóide em cada neurônio), mas através da aplicação de uma função SoftMax, que mapeará um vetor em para um vetor de elementos em [0,1]. Aqui está um NN inventado para classificar as cores:xRkK
Definindo o softmax como
σ(j)=exp(w⊤jx)∑Kk=1exp(w⊤kx)=exp(zj)∑Kk=1exp(zk)
Queremos obter a derivada parcial em relação a um vetor de pesos , mas podemos primeiro obter a derivada de em relação ao logit, ou seja, :(wi)σ(j)zi=w⊤i⋅x
∂∂(w⊤ix)σ(j)=∂∂(w⊤ix)exp(w⊤jx)∑Kk=1exp(w⊤kx)=∗∂∂(wi⊤x)exp(w⊤jx)∑Kk=1exp(w⊤kx)−exp(w⊤jx)(∑Kk=1exp(w⊤kx))2∂∂(w⊤ix)∑k=1Kexp(w⊤kx)=δijexp(w⊤jx)∑Kk=1exp(w⊤kx)−exp(w⊤jx)∑Kk=1exp(w⊤kx)exp(w⊤ix)∑Kk=1exp(w⊤kx)=σ(j)(δij−σ(i))
∗- quotient rule
Obrigado e (+1) a Yuntai Kyong por apontar que havia um índice esquecido na versão anterior do post, e as alterações no denominador do softmax foram deixadas de fora da seguinte regra da cadeia ...
Pela regra da cadeia,
∂∂wiσ(j)=∑k=1K∂∂(w⊤kx)σ(j)∂∂wiw⊤kx=∑k=1K∂∂(w⊤kx)σ(j)δikx=∑k=1Kσ(j)(δkj−σ(k))δikx
Combinando este resultado com a equação anterior:
∂∂wiσ(j)=σ(j)(δij−σ(i))x