Bom dia!. Tudo bem?
Eu gostaria de perguntar se eu apliquei corretamente a fórmula do gradiente numérico, me baseando na explicação da professora que recebi num tópico anterior: https://cursos.alura.com.br/forum/topico-duvida-como-calcular-o-gradiente-numerico-para-testar-se-uma-implantacao-do-backpropagation-esta-correta-445429
Exemplo de Rede Neural que criei para fazer essa pergunta:
Se eu quero calcular o gradiente numérico do peso W11, que está na primeira camada oculta
Eu faria assim?
EU TENTANDO APLICAR EM FORMA DE PSEUDO-CODIGO:
var valor_escolhido = 1e−5;
//Erro Quadrático Médio
var funcao_de_custo_MSE = function(valor_predito, valor_desejado){
return (valor_predito - valor_desejado)^2
}
var OBTER_SAIDAS_Y_REDE_NEURAL= function(pesos){
//Eu obteria as previsões Y da rede neural, usando os pesos atuais no feedforward
}
var pesos = {
W11: 0,
W12: 0,
W21: 0,
etc...
(todos os parametros da rede neural aqui)
}
/* APLICANDO A FÓRMULA */
/*
* Passo 1: Aumente o parâmetro pelo valor escolhido e calcule a função de custo.
* AUMENTANDO O W11 PELO VALOR ESCOLHIDO
*/
pesos.W11 = pesos.W11 + valor_escolhido
/* Calculando o custo( DEPOIS DE TER AUMENTADO O W11 ) */
MSE_W11_maisOValor = funcao_de_custo_MSE( OBTER_SAIDAS_Y_REDE_NEURAL( pesos ) )
/*
* Passo 2: Diminua o parâmetro pelo mesmo valor e calcule a função de custo novamente.
* DIMINUINDO O W11 PELO VALOR ESCOLHIDO
*/
pesos.W11 = pesos.W11 - valor_escolhido
/* Calculando o custo novamente( DEPOIS DE TER DIMINUIDO O W11 ) */
MSE_W11_menosOValor = funcao_de_custo_MSE( OBTER_SAIDAS_Y_REDE_NEURAL( pesos ) )
/*
* Passo 3: A diferença entre esses dois valores, dividida pelo dobro do valor pequeno escolhido, dá a aproximação do gradiente.
* CALCULANDO O GRADIENTE APROXIMADO
*/
gradienteAproximado = (MSE_W11_maisOValor - MSE_W11_menosOValor) / (valor_escolhido * 2)
Minha interpretação da fórmula que apliquei(que a professora explicou no outro tópico)
Parece que o objetivo disso é entender como a função de custo se comporta quando o peso especifico W11 é aumentado, e quando o peso W11 é diminuido. Ou seja, é por isso que eu mexo no peso W11 aumentando ele, e depois calculo o custo. E depois diminuio e calculo o custo novamente. Isso é pra obter esses insights.
Eu primeiro pego meu parametro W11 e aumento ele(somando) pelo valor escolhido 1e−5. Depois eu calculo o custo MSE(Erro Quadrático Médio), e pra calcular esse custo eu vou precisar usar a saída da minha rede neural com aquele parametro W11 aumentado. Porém eu só mexi nesse parametro W11, e os outros parametros eu deixei como estavam.. Depois eu peguei o peso W11 novamente, e diminui ele pelo valor escolhido. Calculei o custo novamente da mesma forma. Depois tirei a diferença e dividi pelo dobro do valor escolhido
PERGUNTAS:
(1) Eu apliquei corretamente a fórmula do gradiente númerico para o peso W11 ?
(2) Minha interpretação da fórmula está correta? Eu entendi corretamente a explicação do tópico mencionado?
Agradeço pela ajuda!