es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función de descenso de gradiente siempre devuelve un vector de parámetros con valores NaN.

Estoy intentando aplicar una optimización simple utilizando descenso de gradiente. En particular, quiero calcular el vector de parámetros (Theta) que minimiza la función de costo (Error Cuadrático Medio).

La función de descenso de gradiente se ve así:

Eta = 0,1 # tasa de aprendizaje
n_iteraciones = 1000
m = 100

Theta = np.random.randn(2,1) # inicialización aleatoria

for iteración in rango(n_iteraciones):
gradientes = 2/m * X_b.T.dot(X_b.dot(theta) – y) # esta es la derivada parcial de la función de costo
theta = theta – eta * gradientes

Donde X_b e y son respectivamente la matriz de entrada y el vector objetivo.

Ahora, si observo mi theta final, siempre es igual a [[nan],
[nan]], mientras que debería ser igual a [[85.4575313 ],
[ 0.11802224]] (obtenido utilizando tanto np.linalg como ScikitLearn LinearRegression).

Para obtener un resultado numérico, debo reducir la tasa de aprendizaje a 0,00001 y el número de iteraciones a 500. Al aplicar estos cambios, los resultados están muy lejos del theta real. Mis datos, tanto X_b como y, están escalados utilizando un StandardScaler.

Si intento imprimir theta en cada iteración, obtengo lo siguiente (estos son solo algunos resultados):

[[2.09755838e+297]
[7.26731496e+299]]
[[-3.54990719e+300]
[-1.22992017e+303]]
[[6.00786188e+303]
[ inf]]
[[-inf]
[ nan]]

¿Cómo resolver el problema? ¿Es debido al dominio de la función?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema que está experimentando con la función de descenso de gradiente probablemente se debe a que la tasa de aprendizaje es demasiado alta, lo que causa que el algoritmo no converja correctamente. Escalar los datos es una buena práctica para ayudar con esta convergencia, pero en este caso no parece estar ayudando.

    Reducir la tasa de aprendizaje puede ayudar a mitigar este problema, pero si la tasa es demasiado baja, puede hacer que el algoritmo tarde mucho tiempo en converger o no converger en absoluto. Además, ajustar el número de iteraciones puede ayudar a encontrar un mínimo mejor para la función de costo.

    Un enfoque para probar es usar una tasa de aprendizaje más baja y un mayor número de iteraciones, o implementar un programa de entrenamiento de tasa de aprendizaje que ajusta la tasa con el tiempo. Otro enfoque es probar con un algoritmo de optimización diferente, como el descenso de gradiente estocástico o un algoritmo de optimización de la biblioteca Scipy. Finalmente, también vale la pena investigar si hay algún problema con los propios datos, como valores faltantes o valores extremos atípicos que podrían estar causando que el algoritmo falle.

Comments are closed.