2
respostas

[Dúvida] Na regressão linear multi variaveis, qual é a formula matematica do Gradiente Descedente ?

Na regressão linear tenho uma duvida. Fiquei sabendo que o método do Gradiente Descedente pode ser utilizado para ajustar os coeficientes. Mais fico na duvida: qual é a formula padrão(mais conhecida) do Gradiente Descedente que é usada na regressão linear multi variaveis para atualizar os coeficientes?

Eu gostaria de saber a formula pra eu conseguir aplicar ela na mão, no papel e caneta. Por favor, voces poderiam me ajudar?

Tenho algumas perguntas:

1 - Qual é a formula matematica do Gradiente Descedente ?

2 - Para atualizar cada um dos coeficientes eu posso aplicar essa mesma formula para cada um deles, individualmente?

2 respostas

Olá, William, tudo bem?

Para você entender mais profundamente, sobre o algoritmo Gradient Descent. Deixo um artigo explicando direitinho sobre como ele funciona, explicando através da evolução das fórmulas matemáticas, você poderá reproduzi-las. Ele está em inglês, mas você poderá utilizar o tradutor do navegador, caso se sinta mais confortável.

E respondendo à sua segunda pergunta, sim, você pode aplicar essa fórmula para cada um dos coeficientes individualmente. Na prática, isso significa que você atualiza todos os coeficientes simultaneamente, mas cada um deles é ajustado com base em sua contribuição específica para o erro do modelo.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Boa noite Monalisa. Obrigado por responder

Tenho algumas duvidas sobre o artigo. Por favor, poderia me ajudar a responder essas perguntas em cima do artigo?

https://towardsdatascience.com/gradient-descent-algorithm-a-deep-dive-cf04e8115f21

Primeiro tenho duvidas sobre o código mostrado no artigo

def func1(x:float):
    return x**2-4*x+1

def gradient_func1(x:float):
    return 2*x - 4

def gradient_descent(start: float, gradient: Callable[[float], float],
                     learn_rate: float, max_iter: int, tol: float = 0.01):
    x = start
    steps = [start]  # history tracking

    for _ in range(max_iter):
        diff = learn_rate*gradient(x)
        if np.abs(diff) < tol:
            break
        x = x - diff
        steps.append(x)  # history tracing
  
    return steps, x

DUVIDAS SOBRE O CÒDIGO:

(1) Por que no código a variavel "diff" não possui subtração do valor Y estimado e do valor Y real pra obter a diferença(erro) ? por que ele apenas usa a derivada da função quadratica? Eu achei confuso de entender ao ver que não possui subtração para calcular o erro.

O método usado na Descida de Gradiente desse artigo é diferente ?

(2) - no código do artigo, onde estão os coeficientes e as entradas X? **Não entendi muito bem a parte onde ele faz "x = x - diff". Tipo ele está atualizando o valor da entrada? ou do coeficiente da entrada? **

OUTRAS DUVIDAS SOBRE O ARTIGO:

(3) - Nessa parte da explicação:

   
   Esta função leva 5 parâmetros:

   1. ponto inicial [float] - no nosso caso, definimos manualmente, mas na prática, muitas vezes é uma inicialização aleatória

   2. função gradiente [objeto] - função que calcula o gradiente que deve ser especificada previamente e passada para a função GD

   3. taxa de aprendizagem [float] - fator de escala para tamanhos de passo

   4. número máximo de iterações [int]

   5. tolerância [float] para interromper condicionalmente o algoritmo (neste caso, o valor padrão é 0,01)

SUB PERGUNTAS DESSA PARTE DO ARTIGO: Não entendi duas coisas:

(1) o que é o ponto inicial mencionado nessa parte do artigo? ele é um coeficiente ou uma variavel de entrada X da amostra ?

(2) - o que é a função gradiente [objeto] ? ela retorna uma diferença entre o valor desejado e o valor estimado ? ou ela é apenas a derivada da função de reta(ou função de ativação) usada ?

MAIS ALGUMAS DUVIDAS SOBRE A ATUALIZAÇÂO DOS PARAMETROS DESCRITA NO ARTIGO:

(4) - Nessa parte do artigo: "4. Algoritmo de gradiente descendente" Onde cita essa formula aqui:

Formula de atualizar parametros que fiquei com duvida

fiquei com duvida na formula que ele usou: "Pn+1 = Pn - learningRate * o gradiente da função de Pn".

Duvida: Pn+1 aqui é o proximo elemento de um vetor P? ou ele simplismente significa que um parametro atualizado é igual ao parametro antigo (- subtraindo) tal valor? e não tem nada a ver com indice de vetor?

(5) - Nessa outra parte do artigo

Duvida sobre as derivadas

Por que no inicio do artigo ele diz que para a função quadratica tem a primeira e segunda derivada? qual dessas derivadas é usada? e por que existe essa primeira e segunda derivada? o que cada uma significa?

(6) por que a primeira derivada é outra função, e a segunda derivada é apenas um numero fixo? e para que isso é usado no código?

São algumas duvidas sobre o artigo que eu fiquei no momento. Por favor, poderia me ajudar a entender?