Como hemos visto en varios posts, en un algoritmo de machine learning tenemos varios tipos de parámetros que es necesario configurar para realizar una tarea óptima. Por un lado tenemos los parámetros (p.e. los pesos de una red neuronal) que se aprenden directamente usando un algoritmo de optimización como descenso por gradiente y los metaparámetros, que son el resto de parámetros que configuran la estructura del algoritmo, como el número de capas, las neuronas por capa, los bloques adicionales como max pooling, etc.
Tradicionalmente, los metaparámetros los determinaba el ingeniero usando el conocimiento y las mejoras prácticas del momento pero en los últimos años se ha hecho un gran esfuerzo para automatizar la búsqueda de meta-parámetros.
Como vimos en nuestro post sobre el teorema de NFL (no free lunch) y meta-learning, el teorema NFL implica que los algoritmos deben tener una estructura previa adecuada a los tipos de tareas a abordar. El meta-learning es una forma adecuada de aprender de manera automática esta meta-estructura (meta-parámetros) y poder tener algoritmos capaces de adaptarse a diferentes tareas.
En los últimos años, los ejemplos de esta automatización se han centrado de manera independiente en cada uno de los aspectos de la estructura de un algoritmo como la arquitectura a usar (CNNs, RNNs, …), el número de capas o la función de optimización. Pero este espacio de meta-parámetros ha venido prefijado de antemano por los ingenieros y esto restringe la libertad para automatizar la búsqueda del algoritmo.
Recientemente, ha surgido AutoML-Zero, un marco que tiene como objetivo buscar nuevos algoritmos de machine learning usando pocas restricciones y empleando únicamente operaciones matemáticas simples como bloques para construirlo.
En AutoML-Zero representan un algoritmo como una secuencia de instrucciones, donde cada instrucción tiene una operación que representa su función sobre un escalar, un vector o una matriz (e.g. multiplicar un vector por otro escalar).
Cada algoritmo tiene tres componentes: setup, predict y learn. Cada uno de estos componentes está comprendido por una secuencia de instrucciones u operaciones. Estos tres componentes son evaluados produciendo una pérdida media para cada tarea.
¿De qué forma se descubren nuevos algoritmos que funcionen bien para un conjunto de tareas?
Para generar nuevos algoritmos se modifican las instrucciones de cada componente (setup, predict, learn) y se sigue un método de selección evolutivo para mejorarlo. Se parte de una población de algoritmos vacíos que se va mejorando en cada ciclo.
En cada ciclo se selecciona un conjunto de la población inicial de manera aleatoria y se selecciona el mejor como el padre. El algoritmo padre se copia y sufre una mutación para producir un hijo que añade a la población inicial, sustituyendo al algoritmo más antiguo. Las mutaciones son por ejemplo inserciones o eliminaciones de instrucciones de maneara aleatoria o sustituciones del valor de un argumento de una instrucción por un valor aleatorio.
Esta técnica, incluso usando un espacio de estructura tan general para mejorar los algoritmos, permite descubrir desde redes neuronales básicas hasta técnicas como técnicas avanzadas similares a dropout o gradientes normalizados.
Por lo tanto, la automatización del diseño de modelos de machine learning a partir de bloques básicos es un campo prometedor que permitirá descubrir innovadores técnicas para adaptarse mejor a ciertas tareas.
Deja una respuesta