El descenso de gradiente en Python

El descenso de gradiente en Python
El descenso de gradiente es un algoritmo que nos ayuda a encontrar el error mínimo o donde el valor de pérdida es menor. Elegimos cualquier punto en la función y luego nos movemos lentamente hacia la dirección negativa para que podamos lograr el error mínimo. Pero mientras nos movemos, también nos importa el valor de error, que es el valor que se resta del valor de predicción y verdad. Además, no debería volverse negativo.

Podemos entenderlo mejor a partir del siguiente ejemplo:

Supongamos que una máquina convierte los kilómetros en millas.

Pero no tenemos la fórmula para convertir los kilómetros en millas. Sabemos que ambos valores son lineales, lo que significa que si duplicamos las millas, entonces los kilómetros también se duplican.

La fórmula se presenta de esta manera:

Millas = kilómetros * c

Aquí, C es una constante, y no sabemos el valor exacto de la constante.

Tenemos algún valor de verdad universal como pista. La tabla de verdad se da a continuación:

Ahora vamos a usar algún valor aleatorio de C y determinar el resultado.

Entonces, estamos usando el valor de C como 0.5, y el valor de los kilómetros es 100. Que nos da 50 como la respuesta. Como sabemos muy bien, según la tabla de la verdad, el valor debe ser 62.137. Entonces, el error que tenemos que averiguar como se muestra a continuación:

Error = Verdad - Calculado

= 62.137 - 50

= 12.137

De la misma manera, podemos ver el resultado en la imagen a continuación:


Ahora tenemos un error de 12.137. Como se discutió anteriormente, la relación entre las millas y los kilómetros es lineal. Entonces, si aumentamos el valor de la constante aleatoria C, podríamos estar recibiendo menos error.

Esta vez, simplemente cambiamos el valor de C desde 0.5 a 0.6 y alcanzar el valor de error de 2.137, como se muestra en la imagen a continuación:

Ahora, nuestra tasa de error mejora las 12.317 a 2.137. Todavía podemos mejorar el error utilizando más suposiciones sobre el valor de C. Supongo que el valor de C será 0.6 a 0.7, y alcanzamos el error de salida de -7.863.

Esta vez el error cruza la tabla de verdad y el valor real. Luego, cruzamos el error mínimo. Entonces, por el error, podemos decir que nuestro resultado de 0.6 (error = 2.137) fue mejor que 0.7 (error = -7.863).

¿Por qué no intentamos con los pequeños cambios o la tasa de aprendizaje del valor constante de c?? Solo vamos a cambiar el valor C de 0.6 a 0.61, no a 0.7.

El valor de C = 0.61, nos da un error menor de 1.137 que es mejor que el 0.6 (error = 2.137).


Ahora tenemos el valor de C, que es 0.61, y da un error de 1.137 solo del valor correcto de 62.137.

Este es el algoritmo de descenso de gradiente que ayuda a descubrir el error mínimo.

Código de Python:

Convertimos el escenario anterior en programación de Python. Inicializamos todas las variables que requerimos para este programa de Python. También definimos el método kilo_mile, donde estamos pasando un parámetro C (constante).


En el siguiente código, definimos solo las condiciones de detención y la máxima iteración. Como mencionamos, el código se detendrá cuando se haya logrado la iteración máxima o el valor de error mayor que la precisión. Como resultado, el valor constante logra automáticamente el valor de 0.6213, que tiene un error menor. Entonces nuestro descenso de gradiente también funcionará así.

Descenso de gradiente en Python

Importamos los paquetes requeridos y junto con los conjuntos de datos incorporados de Sklearn. Luego establecemos la tasa de aprendizaje y varias iteraciones como se muestra a continuación en la imagen:

Hemos mostrado la función sigmoidea en la imagen de arriba. Ahora, lo convertimos en una forma matemática, como se muestra en la imagen a continuación. También importamos el conjunto de datos incorporado Sklearn, que tiene dos características y dos centros.

Ahora podemos ver los valores de X y forma. La forma muestra que el número total de filas es de 1000 y las dos columnas como establecemos antes.

Agregamos una columna al final de cada fila X para usar el sesgo como valor entrenable, como se muestra a continuación. Ahora, la forma de x es 1000 filas y tres columnas.

También remodelamos la Y, y ahora tiene 1000 filas y una columna como se muestra a continuación:

Definimos la matriz de peso también con la ayuda de la forma de la X como se muestra a continuación:

Ahora, creamos la derivada del sigmoide y asumimos que el valor de X sería después de pasar por la función de activación sigmoidea, que hemos mostrado antes.

Luego buceamos hasta que se ha alcanzado el número de iteraciones que ya establecemos. Descubrimos las predicciones después de pasar por las funciones de activación sigmoidea. Calculamos el error y calculamos el gradiente para actualizar los pesos como se muestra a continuación en el código. También guardamos la pérdida en cada época en la lista de historial para mostrar el gráfico de pérdidas.

Ahora podemos verlos en cada época. El error está disminuyendo.

Ahora, podemos ver que el valor de error se está reduciendo continuamente. Entonces este es un algoritmo de descenso de gradiente.