Programación diferenciable, una evolución del deep learning

En este blog hemos descritos multitud de modelos de deep learning en los que varias capas de redes neuronales procesan la información de la entrada produciendo representaciones cada vez más abstractas y apropiadas para resolver una tarea. Estos modelos podían tener recurrencia como las RNN, filtros usando redes convoluciones o word embeddings para poder reflejar mejor cómo se estructura la información en la entrada.

Para aprender los parámetros del modelo se usa descenso por gradiente, que va realizando sobre los parámetros iteraciones proporcionales al valor negativo del gradiente de la función objetivo en el punto actual. Los gradientes se calculan mediante diferenciación automática usando backpropagation como describimos en este post.

La combinación de la capacidad expresiva de las redes neuronales (son aproximadores universales), la flexibilidad de la diferenciación automática y el incremento de la capacidad de cómputo han posibilitado este éxito del deep learning.

Pero ¿Y si el deep learning fuera una parte o un ejemplo de un paradigma más general de programación, dónde los programas consisten en bloques funcionales parametrizables usando diferenciación automática?

Esto es lo que parece estar pasando según la evolución de los últimos años y según apuntó Yan LeCun en su famoso mensaje “Deep Learning est mort. Vive Differentiable Programming!”

La programación diferenciable (Differentiable Programming) es una extensión del deep learning en la que los modelos se componen de bloques parametrizables que se customizan en función de los datos usando diferenciación automática. Estos nuevos bloques diferenciables añaden nuevas capacidades como razonamiento, atención, memoria, modelos físicos, etc. y permiten que el modelo se adapte a cada situación y tarea concreta.

Es una evolución del software tradicional, donde se programa una secuencia concreta de instrucciones para resolver una tarea.

Programación diferenciable

Este enfoque, que ya se ha venido usando con las redes neuronales, es el que permite que en las RNN sea un bloque parametrizable el que decide el peso que tiene el estado anterior en el procesamiento actual. Esta misma filosofía ha llevado a profundos avances en los últimos años:

  • Los mecanismos de atención, que como vimos en un post anterior, permiten centrarse en una parte de la entrada (imagen, texto) y darle menos importancia a otras.
  • Las memory networks, donde este mecanismo de atención se usa para seleccionar qué partes de una memoria externa son más importantes para realizar una predicción. Sería como un ordenador clásico con una memoria externa de lectura y escritura pero donde se aprende en función de los datos de entrada-salida qué parte de la memoria seleccionar en cada paso.
  • Differentiable proving, donde usando descenso por gradiente, una red neuronal se entrena para inferir hechos a partir de una base de conocimiento incompleta. Sería un sistema de inferencia lógica diferenciable.

El cambio de perspectiva es que mientras en el deep learning usamos capas de redes neuronales de manera tradicional, en la programación diferenciable ampliamos las capacidades de percepción usando cualquier componente diferenciable que aporte atención, razonamiento, etc.

Estos nuevos componentes pueden ser desde elementos de lectura/escritura diferenciables, unidades aritméticas neuronales, componentes de razonamiento lógico diferenciables, bucles diferenciables, condicionales, etc.

Pensemos por ejemplo en un condicional clásico que decide si realizar una función f o g en función de si se cumple una condición b. Para hacer este condicional diferenciable, b debería ser un parámetro variable y diferenciable. Esto se podría conseguir si la condición b fuese la salida de una red neuronal aplicando una función de activación. De esta forma, en lugar de elegir una de las dos funciones, el condicional sería una combinación parametrizable c=b·f+(1-b)·g, siendo b la salida de una red neuronal.

Por lo tanto, en los próximos años muchos avances en machine learning seguirán viniendo de incluir componentes diferenciables que implementen funciones interesantes de razonamiento, atención, planificación… en los modelos de deep learning. En definitiva, de generalizar el deep learning mediante la programación diferenciable.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Orgullosamente ofrecido por WordPress | Tema: Baskerville 2 por Anders Noren.

Subir ↑

A %d blogueros les gusta esto: