El sistema de inteligencia artificial diseña las primeras optimizaciones para clasificar el código en más de una década


Cualquiera que haya tomado una clase básica de informática sin duda ha dedicado tiempo a diseñar un algoritmo de clasificación, un código que tomará una lista desordenada de elementos y los pondrá en orden ascendente o descendente. Es un desafío interesante porque hay muchas formas de hacerlo y porque la gente ha dedicado mucho tiempo a descubrir cómo hacer esta clasificación de la manera más eficiente posible.

La clasificación es tan básica que los algoritmos están integrados en la mayoría de las bibliotecas estándar para lenguajes de programación. Y, en el caso de la biblioteca C++ utilizada con el compilador LLVM, el código no se ha tocado en más de una década.

Pero el grupo DeepMind AI de Google ahora ha desarrollado una herramienta de aprendizaje de refuerzo que puede desarrollar algoritmos extremadamente optimizados sin ser entrenado primero en ejemplos de código humano. El truco estaba en configurarlo para tratar la programación como un juego.

es todo un juego

DeepMind, entre otras cosas, se destaca por haber desarrollado un software que enseña a sí mismo cómo jugar. Ese enfoque ha probado ser altamente efectivo, conquistando juegos tan variados como el ajedrez, Iry Barco de estrellas. Si bien los detalles varían según el juego al que se enfrente, el software aprende jugando solo y descubre opciones que le permiten maximizar la puntuación.

Debido a que no está entrenado en juegos que juegan los humanos, el sistema DeepMind puede descubrir enfoques de los juegos en los que los humanos no han pensado. Por supuesto, dado que siempre juega contra sí mismo, hay casos en los que ha desarrollado puntos ciegos que los humanos pueden explotar.

Este enfoque es muy relevante para la programación. Los grandes modelos de lenguaje escriben código efectivo porque han visto muchos ejemplos humanos. Pero debido a eso, es poco probable que desarrollen algo que los humanos no hayan hecho antes. Si estamos buscando optimizar algoritmos bien entendidos, como funciones de clasificación, entonces basar algo en el código humano existente es, en el mejor de los casos, obtener un rendimiento equivalente. Pero, ¿cómo se logra que una IA identifique un enfoque verdaderamente nuevo?

La gente de DeepMind tomó el mismo enfoque que tenían con el ajedrez y Ir: Convirtieron la optimización de código en un juego. El sistema AlphaDev desarrolló algoritmos de ensamblaje x86 que trataban la latencia del código como una puntuación y trataban de minimizar esa puntuación al tiempo que garantizaban que el código se ejecutaba sin errores hasta el final. A través del aprendizaje por refuerzo, AlphaDev desarrolla gradualmente la capacidad de escribir código ajustado y altamente eficiente.

Dentro de AlphaDev

Decir que el sistema se optimiza para la latencia es muy diferente a explicar cómo funciona. Como la mayoría de los otros sistemas complejos de IA, AlphaDev consta de varios componentes distintos. Una de ellas es una función de representación, que realiza un seguimiento del rendimiento general del código a medida que se desarrolla. Esto incluye la estructura general del algoritmo, así como el uso de registros y memoria x86.

El sistema agrega instrucciones de ensamblaje individualmente, elegidas por una búsqueda de árbol de Monte Carlo, nuevamente, un enfoque tomado de los sistemas de juego. El aspecto de «árbol» de este enfoque permite que el sistema se reduzca rápidamente a un área limitada de la amplia gama de instrucciones potenciales, mientras que Monte Carlo agrega un grado de aleatoriedad a la instrucción precisa que se elige de esa rama. (Tenga en cuenta que «instrucción» en este contexto incluye cosas como los registros específicos elegidos para crear un conjunto válido y completo).

Luego, el sistema evalúa el estado del código ensamblador en cuanto a latencia y validez, y le asigna una puntuación, comparándola con la puntuación del anterior. Y, a través del aprendizaje por refuerzo, se aferra a la información sobre cómo funcionan las diferentes ramas del árbol, dado el estado del programa. Con el tiempo, «aprende» cómo lograr un estado de juego ganador (una clasificación completa) con una puntuación máxima, lo que significa una latencia mínima.

El principal beneficio de este sistema es que su entrenamiento no tiene que involucrar ningún ejemplo de código. En su lugar, el sistema genera sus propios ejemplos de código y luego los evalúa. En el proceso, se aferra a la información sobre combinaciones de instrucciones que son efectivas en la clasificación.



Source link-49