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:
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
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?