¿Cómo realizar la optimización basada en gradientes usando Autograd?

Estás leyendo la publicación: ¿Cómo realizar la optimización basada en gradientes usando Autograd?

Probar un modelo predictivo juega un papel crucial en el aprendizaje automático. Normalmente evaluamos estos modelos optimizando algunas funciones de pérdida con respecto a los parámetros definidos por el modelo. En profundidad, podemos optimizar estas funciones de pérdida utilizando el descenso de gradiente. Autograd es un paquete de Python que puede ayudarnos a optimizar varias funciones, ya sea que estén relacionadas con modelos de aprendizaje automático o con matemáticas básicas. Este paquete también puede reemplazar la popular biblioteca NumPy en varios casos. En este artículo, discutiremos el paquete Autograd y entenderemos cómo podemos usarlo. Los puntos principales que se discutirán en este artículo se enumeran a continuación.

Tabla de contenido

  1. ¿Qué es Autograd?
  2. Implementación de Autograd
    1. Evaluación del gradiente de la función tangente hiperbólica
    2. Optimización de funciones de pérdida en regresión logística

Comencemos con una introducción a Autograd.

¿Qué es Autograd?

Autograd es un paquete de python que puede proporcionarnos una forma de diferenciar el código Numpy y Python. Es una biblioteca para la optimización basada en gradientes. Con este paquete, podemos trabajar con un gran subconjunto de funciones de Python, incluidos bucles, ifs, recursividad y cierres. Además, este paquete es capaz de tomar múltiples derivadas paso a paso de funciones. La mayoría de las veces encontramos que este paquete es compatible con los métodos de propagación hacia atrás y hacia adelante que también se pueden llamar diferenciación de modo inverso y diferenciación de modo directo en matemáticas, lo que significa que este paquete es capaz de seleccionar gradientes de una función con valores escalares.

🔥 Recomendado:  LUX: API de Python para análisis de datos exploratorios automatizados

Usando este paquete podemos componer estos dos métodos arbitrariamente. Básicamente, este paquete está destinado a proporcionarnos la facilidad de optimización basada en gradientes. Usando este paquete podemos utilizar gradientes para las siguientes operaciones y funciones:

  • Operaciones matemáticas: se implementan varios gradientes para optimizar la mayoría de las operaciones matemáticas.
  • Están disponibles gradientes para completar varias manipulaciones de matriz.
  • Los gradientes para completar varias manipulaciones de matriz están en el paquete.
  • Varios gradientes están en el paquete para algunas rutinas de álgebra lineal y transformada de Fourier.
  • Los módulos están ahí para circunvoluciones N-dimensionales.
  • Soporte completo para números complejos.

Podemos instalar este paquete usando las siguientes líneas de códigos:

!pip instalar autograduación

Después de instalar este paquete en el entorno, estamos listos para usar este paquete para nuestro trabajo.

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.

Implementaciones de Autograd

En esta sección del artículo, veremos algunas de las funciones que se pueden seguir con el paquete Autograd.

Evaluación del gradiente de la función tangente hiperbólica

En esta implementación, veremos cómo podemos evaluar el gradiente de la función Tanh. Definamos la función.

importar autograd.numpy como agnp def tanh(x): y = agnp.exp(-2.0 * x) return (1.0 – y) / (1.0 + y)

En los códigos anteriores, podemos ver que hemos utilizado el módulo autograd.numpy, que es un contenedor de NumPy en el paquete autograd. Además, hemos definido una función para tan. Evaluemos el gradiente de la función definida anteriormente.

from autograd import grad grad_tanh = grad(tanh) grad_tanh(1.0)

Producción:

Aquí, en los códigos anteriores, hemos iniciado una variable que puede contener la función tanh y, para su evaluación, hemos importado una función llamada grad del paquete autograd. Comparemos la diferencia de rango finito.

🔥 Recomendado:  Una guía para documentar incrustaciones utilizando el modelo Distributed Bag-of-Words (DBOW)

(tanh(1.0001) – tanh(0.9998)) / 0.0002

Producción:

También tenemos la facilidad de diferenciar las funciones tantas veces como queramos, para esto solo necesitamos llamar a un módulo llamado elementwise_grad.

desde autograd import elementwise_grad x = agnp.linspace(-10, 10, 100)

En los códigos anteriores, llamamos a nuestro módulo y definimos una matriz que tiene valores aleatorios entre -10 y 10. En esto, intentaremos dibujar derivadas para la función definida anteriormente.

plt.plot(x, agnp.tanh(x), x, elementwise_grad(agnp.tanh)(x), x, elementwise_grad(elementwise_grad(agnp.tanh))(x), x, elementwise_grad(elementwise_grad(elementwise_grad(agnp. tanh)))(x), x, elementwise_grad(elementwise_grad(elementwise_grad(elementwise_grad(agnp.tanh))))(x)) plt.show()

Producción:

Aquí podemos ver cómo varía la función para nuestra x definida.

Nota: al comienzo de la implementación, hemos definido una función de tanh y aquí, en la reciente, hemos utilizado la función proporcionada por autograd.

En el ejemplo anterior, hemos discutido cómo usar módulos de autograd. Veamos cómo podemos usarlo para la regresión logística.

Optimización de funciones de pérdida en regresión logística

Definamos una función sigmoidea.

def function1(x): return 0.5 * (agnp.tanh(x / 2.) + 1)

Definición de una función para predicciones:

def function2(w, i): return function1(agnp.dot(i, w))

Definición de la función de pérdida para el entrenamiento:

def loss_function(w): preds = function2(w, i) label_probabilidades = preds * objetivos + (1 – preds) * (1 – objetivos) return -agnp.sum(agnp.log(label_probabilidades))

Definición de los pesos y la entrada:

i = agnp.matriz([[0.52, 1.12, 0.77],
[0.88, -1.08, 0.15],
[0.52, 0.06, -1.30],
[0.74, -2.49, 1.39]]) w = agnp.matriz([0.0, 0.0, 0.0])

Definición del objetivo:

objetivos = agnp.array([True, True, False, True])

Definición de la función de gradiente para la pérdida de entrenamiento:

Gradiente_entrenamiento = Graduado(función_pérdida)

Optimización del peso mediante el descenso de gradientes:

w = np.matriz([0.0, 0.0, 0.0]) print(“pérdida en inicial:”, función_pérdida(w)) for i in range(100): pesos -= gradiente_entrenamiento(w) * 0.01 print(“pérdida después del entrenamiento:”, función_pérdida(w))

🔥 Recomendado:  6 técnicas para manejar datos desequilibrados

Producción:

Aquí hemos visto un ejemplo de regresión logística para la optimización de pesos que empujamos entre usar los módulos del paquete autograd.

Ultimas palabras

En este artículo, hemos discutido qué es Autograd, que es un paquete para la optimización basada en gradientes de varias funciones. Junto con esto, hemos repasado algunas de las implementaciones para optimizar funciones relacionadas con las matemáticas y el aprendizaje automático.

Referencias