Con la temporada de bolos universitarios a la vuelta de la esquina, los fanáticos del fútbol de todo el país quedarán deslumbrados, no sólo por la acción en el campo, sino también por las intrincadas “trucos con cartas” realizadas por los miembros de la audiencia del estadio. El trabajo colectivo altamente coordinado es capaz de producir imágenes detalladas que se asemejan a las imágenes pixeladas en las pantallas de computadora, y que están codificadas de manera muy similar.
El nuevo libro de Michael Littman, Code to Joy: por qué todos deberían aprender un poco de programación, está lleno de ejemplos similares de cómo operan las máquinas que nos rodean y cómo no debemos desconfiar de un futuro lleno de autómatas mientras aprendamos a hablar su idioma (al menos hasta que ellos terminen de aprender el nuestro). Desde secuenciar comandos hasta almacenar variables, Código para la alegría proporciona una guía accesible y entretenida sobre los conceptos básicos de la programación para programadores novatos de todas las edades.
Extraído de Code to Joy: por qué todos deberían aprender un poco de programación por Michael L. Littman. Publicado por MIT Press. Copyright © 2023 por Michael L Littman. Reservados todos los derechos.
“¡DAME UN AZUL!”
Los trucos con cartas, en los que el público del estadio levanta carteles de colores para formar un cartel gigante temporal, son como flashmobs en los que los participantes no necesitan ninguna habilidad especial y ni siquiera tienen que practicar con antelación. Todo lo que tienen que hacer es presentarse y seguir instrucciones en forma de una breve secuencia de comandos. Las instrucciones guían al público del estadio para que sostenga en alto las tarjetas de colores del tamaño de un póster en el momento adecuado, según lo anuncia un líder de especialistas. Un conjunto típico de instrucciones de acrobacias con cartas comienza con instrucciones para seguir las instrucciones:
-
escuche las instrucciones atentamente
-
sostenga la parte superior de la tarjeta al nivel de los ojos (no por encima de su cabeza)
-
mantenga el color indicado hacia el campo (sin mirar hacia usted)
-
pasar las cartas al pasillo al finalizar las acrobacias (no romper las cartas)
Estas instrucciones pueden parecer obvias, pero no decirlas seguramente conducirá al desastre. Aun así, sabes que tiene que haber algún sabelotodo que pregunte después: “Lo siento, ¿cuál fue el primero?”. Definitivamente es lo que haría.
Luego viene el evento principal, que, para una persona específica entre la multitud, podría ser la secuencia de órdenes:
-
Azul
-
Azul
-
Azul
Impresionante, ¿no? Bueno, tal vez tengas que ver el panorama más amplio. La idea general de los trucos con cartas aprovecha el hecho de que los miembros de la multitud del estadio se sientan en asientos dispuestos en cuadrícula. Al sostener carteles rectangulares de colores, se transforman en algo así como una gran pantalla de computadora. Cada participante actúa como un único elemento de imagen: ¡píxeles de persona! Los cambios en los que se sostienen las tarjetas cambian la imagen o incluso hacen que se transforme como un gif animado de gran tamaño.
Las acrobacias con cartas comenzaron como una actividad de participación multitudinaria en los deportes universitarios en la década de 1920. Se volvieron mucho menos populares en la década de 1970, cuando en general se acordó que cada uno debería hacer lo suyo. Sin embargo, en la década de 1950 había un hambre real por crear exhibiciones cada vez más elaboradas. Los equipos de porristas diseñarían las acrobacias a mano y luego prepararían instrucciones individuales para cada uno de los mil asientos. Tienes que amar realmente a tu equipo para dedicar ese tipo de energía. En la década de 1960, algunas escuelas pensaron que esos novedosos equipos informáticos podrían ser útiles para aliviar parte del trabajo pesado de la preparación de la instrucción y diseñaron programas para convertir secuencias de imágenes dibujadas a mano en instrucciones individualizadas para cada uno de los participantes. Con la ayuda de las computadoras, las personas podrían producir secuencias individualizadas mucho más ricas para cada píxel de persona que dijeran cuándo levantar una tarjeta, qué color levantar y cuándo dejarla o cambiar a otra tarjeta. Entonces, mientras que el ejemplo del cuestionario de la sección anterior trataba sobre personas que creaban secuencias de comandos para que las siguiera la computadora, este ejemplo trata sobre la computadora que crea secuencias de comandos para gente seguir. Y el soporte informático para automatizar el proceso de creación de secuencias de comandos permite crear acrobacias más elaboradas. Eso resultó en que la secuencia de comandos de un participante se viera así:
-
arriba en 001 blanco
-
003 azul
-
005 blanco
-
006 rojo
-
008 blanco
-
013 azul
-
015 blanco
-
021 abajo
-
arriba en 022 blanco
-
035 abajo
-
arriba en 036 blanco
-
043 azul
-
044 abajo
-
arriba en 045 blanco
-
057 rojo metalizado
-
070 abajo
Vale, todavía no es tan divertido leer las instrucciones como ver el producto final; en este ejemplo real, es parte de una “S” animada de Stanford. Para ejecutar estos comandos de manera sincronizada, un locutor en el estadio dice el número del paso (“¡Cuarenta y uno!”) y cada participante puede decir a partir de sus instrucciones qué hacer (“Aún estoy sosteniendo la tarjeta blanca en la mano”). Levanté el 36, pero me estoy preparando para cambiarla por una tarjeta azul cuando la cuenta llegue a 43”).
Como dije, no es tan complicado para las personas ser parte de un truco con cartas, pero es un ejemplo bastante bueno de crear y seguir secuencias de comandos donde la computadora nos dice qué hacer y no al revés. Y, por muy fácil que parezca, a veces las cosas siguen saliendo mal. En la Convención Nacional Demócrata de 2016, los partidarios de Hillary Clinton planearon un truco de cartas en todo el estadio. Aunque pretendía ser una muestra patriótica de unidad, algunos asistentes no quisieron participar. El resultado fue un lío ilegible que, de manera deprimente, se suponía que deletrearía “Juntos somos más fuertes”.
Hoy en día, las computadoras hacen que sea sencillo convertir una fotografía en instrucciones sobre qué colores colocar y dónde. Básicamente, cualquier imagen digitalizada ya es un conjunto de instrucciones sobre qué combinación de rojo, azul y verde mostrar en cada posición de la imagen. Un desafío interesante al traducir una imagen en instrucciones de acrobacias con cartas es que las imágenes típicas constan de millones de puntos de colores (megapíxeles), mientras que una sección de acrobacias con cartas de un estadio tiene quizás mil asientos. En lugar de pedir a cada persona que muestre mil tarjetas diminutas, tiene más sentido calcular un promedio de los colores de esa parte de la imagen. Luego, de la colección de colores disponibles (digamos, las clásicas sesenta y cuatro opciones de Crayola), la computadora simplemente elige el que más se acerca al promedio.
Si lo piensas bien, no es obvio cómo una computadora puede promediar los colores. Podrías mezclar verde y amarillo y decidir que el resultado se parece al crayón verde primaveral, pero ¿cómo se le enseña a una máquina a hacer eso? Veamos esta pregunta un poco más profundamente. Le ayudará a tener una idea de cómo las computadoras pueden ayudarnos a instruirlos mejor. Además, será nuestra entrada al apasionante mundo del aprendizaje automático.
En realidad, hay muchas, muchas formas de promediar los colores. Una sencilla es aprovechar el hecho de que cada punto de color en un archivo de imagen se almacena como la cantidad de color rojo, verde y azul que contiene. Cada color componente se representa como un número entero entre 0 y 255, donde se eligió 255 porque es el valor más grande que se puede obtener con ocho dígitos binarios o bits. Usar cantidades de rojo, azul y verde funciona bien porque los receptores de color del ojo humano traducen los colores del mundo real en esta misma representación. Es decir, aunque el violeta corresponde a una longitud de onda de luz específica, nuestros ojos lo ven como una combinación particular de verde, azul y rojo. Muéstrale a alguien esa misma combinación y verá púrpura. Entonces, para resumir un gran grupo de píxeles, simplemente promedie la cantidad de azul en esos píxeles, la cantidad de rojo en esos píxeles y la cantidad de verde en esos píxeles. Eso básicamente funciona. Ahora resulta que, por una combinación de razones físicas, perceptuales y de ingeniería, se obtienen mejores resultados elevando al cuadrado los valores antes de promediar y aplicando la raíz cuadrada de los valores después de promediar. Pero eso no es importante ahora. Lo importante es que existe una forma mecánica de promediar un montón de puntos de colores para obtener un solo punto cuyo color resuma el grupo.
Una vez que se produce ese color promedio, la computadora necesita una forma de encontrar el color más cercano a las tarjetas que tenemos disponibles. ¿Es más bien un siena tostado o un rojo anaranjado? Una forma típica (aunque imperfecta) de aproximar qué tan similares son dos colores usando sus valores rojo-azul-verde es lo que se conoce como fórmula de distancia euclidiana. Así es como se ve como una secuencia de comandos:
-
saca la diferencia entre la cantidad de rojo en los dos colores y eleva al cuadrado
-
saca la diferencia entre la cantidad de azul en los dos colores y eleva al cuadrado
-
toma la diferencia entre la cantidad de verde en el cuadrado de dos colores y suma los tres cuadrados
-
sacar la raíz cuadrada
Entonces, para determinar qué tarjeta se debe sostener para capturar mejor el promedio de los colores en la parte correspondiente de la imagen, simplemente determine cuál de los colores disponibles (azul, amarillo, verde, albaricoque, lobo de madera, caoba, bígaro, etc.) ) tiene la distancia más pequeña a ese color promedio en esa ubicación. Ese es el color de la tarjeta que se le debe dar a la persona del píxel sentada en ese lugar de la cuadrícula.
La similitud entre este cálculo de distancia y la operación de promedio de color es, estoy bastante seguro, sólo una coincidencia. A veces una raíz cuadrada es sólo una raíz cuadrada.
Dando un paso atrás, podemos usar estas operaciones (promedio de colores y encontrar el color más cercano al promedio) para conseguir que una computadora nos ayude a construir la secuencia de comandos para un truco con cartas. La computadora toma como entrada una imagen de destino, un plano de asientos y un conjunto de tarjetas de colores disponibles, y luego crea un mapa de qué tarjeta debe sostenerse en cada asiento para reproducir mejor la imagen. En este ejemplo, la computadora se encarga principalmente de la contabilidad y no tiene mucho que hacer en términos de toma de decisiones más allá de la selección del color más cercano. Pero el resultado aquí es que la computadora está asumiendo parte del esfuerzo de escribir secuencias de comandos. Hemos pasado de tener que seleccionar cada comando para cada píxel de persona en cada momento en el truco de la tarjeta a seleccionar imágenes y hacer que la computadora genere los comandos necesarios.
Este cambio de perspectiva abre la posibilidad de entregar más control del proceso de generación de secuencias de comandos a la máquina. En términos de nuestra cuadrícula de 2 × 2 del capítulo 1, podemos pasar de decir (proporcionar instrucciones explícitas) a explicar (proporcionar incentivos explícitos). Por ejemplo, existe una variación de este problema de selección de color que es mucho más difícil y le da a la computadora un trabajo más interesante que hacer. Imagine que pudiéramos imprimir tarjetas de cualquier color que necesitáramos pero nuestra imprenta insiste en que ordenemos las tarjetas al por mayor. Sólo pueden proporcionarnos ocho colores de cartas diferentes, pero podemos elegir los colores que queramos para formar esos ocho. (Ocho es el número de valores diferentes que podemos hacer con 3 bits; los bits aparecen mucho en informática). Entonces, podríamos elegir azul, verde, azul verdoso, azul violeta, cerúleo, índigo, azul cadete y azul cielo. y representa una hermosa ola del océano en ocho tonos de azul. ¡Excelente!
Pero entonces no habría rojo ni amarillo para hacer otros cuadros. Limitar la paleta de colores a ocho puede parecer una restricción extraña, pero resulta que los primeros monitores de computadora funcionaban exactamente así. Podían mostrar millones de colores, pero sólo ocho distintos en la pantalla a la vez.
Con esta restricción en mente, renderizar una imagen en tarjetas de colores se vuelve mucho más complicado. No sólo tienes que decidir qué color de nuestro conjunto de opciones de color quieres hacer en cada tarjeta, como antes, sino que también tienes que elegir qué ocho colores constituirán ese conjunto de opciones de color. Si estamos haciendo una cara, una variedad de tonos de piel será mucho más útil que las distinciones entre tonos de verde o azul. ¿Cómo pasamos de una lista de los colores que desearíamos poder usar porque están en la imagen de destino a la lista mucho más corta de colores que conformarán nuestro conjunto de opciones de color?
El aprendizaje automático, y específicamente un enfoque conocido como agrupamiento o aprendizaje no supervisado, puede resolvernos este problema de elección de color. Te dire como. Pero primero profundicemos en un problema relacionado que surge al convertir una cara en un rompecabezas. Como en el ejemplo del truco con cartas, haremos que la computadora diseñe una secuencia de comandos para representar una imagen. Pero hay un giro: las piezas del rompecabezas disponibles para construir la imagen están fijadas de antemano. De manera similar al ejemplo del paso de baile, utilizará el mismo conjunto de comandos y considerará qué secuencia produce la imagen deseada.
Este artículo apareció originalmente en Engadget en https://www.engadget.com/hitting-the-books-code-to-joy-michael-l-littman-mit-press-153036241.html?src=rss