La programación diferenciada permite que los programas se optimicen a sí mismos y es parte de los esfuerzos más amplios de la Inteligencia Artificial de Facebook para construir herramientas adicionales de programación de aprendizaje de máquinas avanzadas. La IA de Facebook está desarrollando un sistema de diferenciación automática para el lenguaje de programación Kotlin.
Los investigadores han declarado que este trabajo explorará más a fondo el Software 2.0, donde el software se escribe a sí mismo de manera efectiva. Los desarrolladores están ahora autorizados a crear programas robustos al permitir una programación diferenciada intuitiva y eficiente en Kotlin.
Estos programas son flexibles, aprovechando la estructura de los problemas mientras mantienen la seguridad del tipo y mantienen la depuración simple, según la propia Facebook sacando el máximo provecho de la tecnología aplicada al marketing (si le interesa, estas han sido las tendencias en Inteligencia Artificial en 2020).
Kotlin es un lenguaje de programación estático y de propósito general que tiene inferencia de tipos para JVM, Android y desarrollo web. Fue desarrollado por JetBrains, una compañía checa de software, y fue lanzado por primera vez en 2011. Google ha hecho de Kotlin su lenguaje de programación preferido para los desarrolladores de aplicaciones para Android.
Programación diferencial y diferenciación automática
La mayoría del código está escrito usando bibliotecas restrictivas de aprendizaje de máquinas o programado explícitamente usando paradigmas de codificación tradicionales. La falta de compatibilidad real entre estos dos métodos es una barrera significativa para lograr el Software 2.0. Esta cuestión se aborda mediante la programación diferencial.
La mayoría de los marcos de programación diferencial construyen un gráfico que consiste en el flujo de control del programa y las estructuras de datos. Los códigos arbitrarios de usuario y de biblioteca se incorporan a otros modelos más completos. Los desarrolladores y profesionales pueden aprovechar las calificaciones para optimizar automáticamente los programas parametrizados que no están escritos con las bibliotecas ML.
La diferenciación automática (AD) se produce en el momento de la compilación, manteniendo la estructura del programa como el flujo de control y las llamadas a funciones. Permite optimizaciones del compilador que serían inviables con AD en tiempo de ejecución.
El equipo de la IA de Facebook ha construido un marco de trabajo para determinar los tipos de datos diferenciables personalizados y aprovecharlo para proporcionar una clase de Tensor diferenciable. Este marco está construido para extender el compilador Kotlin, haciendo de la diferenciación una característica de primera clase del lenguaje Kotlin. El equipo afirma que esto permitirá a los usuarios diferenciarse a través de los modelos ML tradicionales expresados en Kotlin y a través de un código Kotlin arbitrario.
Tipografía Tensorial de la IA de Facebook
Las convoluciones y muchos otros operadores de aprendizaje profundo implican complejas manipulaciones de conjuntos multidimensionales llamados tensores. Los tensores de diferentes formas se confunden fácilmente sin información de formas estáticas, lo que lleva a errores de ejecución difíciles de depurar.
El sistema de tipificación de tensores proporciona a los desarrolladores la inferencia y comprobación de formas en tiempo de compilación. La tipificación tensorial también permite una mejor documentación y claridad del código. Los desarrolladores pueden utilizar las anotaciones de tipos como documentación para documentar los tipos de entradas de tensor que son aceptables y esperadas. Los alias de tipos y los genéricos pueden ser utilizados para expandir la comprensibilidad del código, compartirlo y reutilizarlo.
El equipo afirma que para promover aún más los esfuerzos de programación diferenciada, la IA de Facebook lanzará una biblioteca de usuarios que aproveche al máximo la EA y los sistemas de tipografía tensorial. También permite a los profesionales de la ingeniería y a los desarrolladores hacer la transición de cualquier marco ML al sistema Kotlin con facilidad.