Implementación del Descenso de Gradiente en Python
El descenso por gradiente sigue una idea simple pero poderosa: moverse en la dirección del descenso más pronunciado para minimizar una función.
La regla matemática es:
theta = theta - alpha * gradient(theta)
Donde:
thetaes el parámetro que estamos optimizando;alphaes la tasa de aprendizaje (tamaño del paso);gradient(theta)es el gradiente de la función entheta.
1. Definir la Función y su Derivada
Comenzamos con una función cuadrática simple:
def f(theta):
return theta**2 # Function we want to minimize
Su derivada (gradiente) es:
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta): esta es nuestra función, y queremos encontrar el valor de theta que la minimiza;gradient(theta): esto nos indica la pendiente en cualquier puntotheta, que usamos para determinar la dirección de actualización.
2. Inicializar los Parámetros del Descenso por Gradiente
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha(tasa de aprendizaje): controla el tamaño de cada paso;theta(estimación inicial): el punto de partida para el descenso;tolerance: cuando las actualizaciones se vuelven muy pequeñas, detenemos el proceso;max_iterations: asegura que no entremos en un bucle infinito.
3. Realizar descenso por gradiente
for i in range(max_iterations):
grad = gradient(theta) # Compute gradient
new_theta = theta - alpha * grad # Update rule
if abs(new_theta - theta) < tolerance:
print("Converged!")
break
theta = new_theta
- Calcular el gradiente en
theta; - Actualizar
thetausando la fórmula de descenso por gradiente; - Detener cuando las actualizaciones sean muy pequeñas (convergencia);
- Imprimir cada paso para monitorear el progreso.
4. Visualización del descenso por gradiente
123456789101112131415161718192021222324252627282930313233343536373839import matplotlib.pyplot as plt import numpy as np def f(theta): return theta**2 # Function we want to minimize def gradient(theta): return 2 * theta # Derivative: f'(theta) = 2*theta alpha = 0.3 # Learning rate theta = 3.0 # Initial starting point tolerance = 1e-5 # Convergence threshold max_iterations = 20 # Maximum number of updates theta_values = [theta] # Track parameter values output_values = [f(theta)] # Track function values for i in range(max_iterations): grad = gradient(theta) # Compute gradient new_theta = theta - alpha * grad # Update rule if abs(new_theta - theta) < tolerance: break theta = new_theta theta_values.append(theta) output_values.append(f(theta)) # Prepare data for plotting the full function curve theta_range = np.linspace(-4, 4, 100) output_range = f(theta_range) # Plot plt.plot(theta_range, output_range, label="f(θ) = θ²", color='black') plt.scatter(theta_values, output_values, color='red', label="Gradient Descent Steps") plt.title("Gradient Descent Visualization") plt.xlabel("θ") plt.ylabel("f(θ)") plt.legend() plt.grid(True) plt.show()
Este gráfico muestra:
- La curva de la función f(θ)=θ2;
- Puntos rojos que representan cada paso del descenso por gradiente hasta la convergencia.
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 3. Capítulo 10
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Genial!
Completion tasa mejorada a 1.96
Implementación del Descenso de Gradiente en Python
Desliza para mostrar el menú
El descenso por gradiente sigue una idea simple pero poderosa: moverse en la dirección del descenso más pronunciado para minimizar una función.
La regla matemática es:
theta = theta - alpha * gradient(theta)
Donde:
thetaes el parámetro que estamos optimizando;alphaes la tasa de aprendizaje (tamaño del paso);gradient(theta)es el gradiente de la función entheta.
1. Definir la Función y su Derivada
Comenzamos con una función cuadrática simple:
def f(theta):
return theta**2 # Function we want to minimize
Su derivada (gradiente) es:
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta): esta es nuestra función, y queremos encontrar el valor de theta que la minimiza;gradient(theta): esto nos indica la pendiente en cualquier puntotheta, que usamos para determinar la dirección de actualización.
2. Inicializar los Parámetros del Descenso por Gradiente
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha(tasa de aprendizaje): controla el tamaño de cada paso;theta(estimación inicial): el punto de partida para el descenso;tolerance: cuando las actualizaciones se vuelven muy pequeñas, detenemos el proceso;max_iterations: asegura que no entremos en un bucle infinito.
3. Realizar descenso por gradiente
for i in range(max_iterations):
grad = gradient(theta) # Compute gradient
new_theta = theta - alpha * grad # Update rule
if abs(new_theta - theta) < tolerance:
print("Converged!")
break
theta = new_theta
- Calcular el gradiente en
theta; - Actualizar
thetausando la fórmula de descenso por gradiente; - Detener cuando las actualizaciones sean muy pequeñas (convergencia);
- Imprimir cada paso para monitorear el progreso.
4. Visualización del descenso por gradiente
123456789101112131415161718192021222324252627282930313233343536373839import matplotlib.pyplot as plt import numpy as np def f(theta): return theta**2 # Function we want to minimize def gradient(theta): return 2 * theta # Derivative: f'(theta) = 2*theta alpha = 0.3 # Learning rate theta = 3.0 # Initial starting point tolerance = 1e-5 # Convergence threshold max_iterations = 20 # Maximum number of updates theta_values = [theta] # Track parameter values output_values = [f(theta)] # Track function values for i in range(max_iterations): grad = gradient(theta) # Compute gradient new_theta = theta - alpha * grad # Update rule if abs(new_theta - theta) < tolerance: break theta = new_theta theta_values.append(theta) output_values.append(f(theta)) # Prepare data for plotting the full function curve theta_range = np.linspace(-4, 4, 100) output_range = f(theta_range) # Plot plt.plot(theta_range, output_range, label="f(θ) = θ²", color='black') plt.scatter(theta_values, output_values, color='red', label="Gradient Descent Steps") plt.title("Gradient Descent Visualization") plt.xlabel("θ") plt.ylabel("f(θ)") plt.legend() plt.grid(True) plt.show()
Este gráfico muestra:
- La curva de la función f(θ)=θ2;
- Puntos rojos que representan cada paso del descenso por gradiente hasta la convergencia.
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 3. Capítulo 10