Electrónica
Desde que comenzamos a trabajar con la electrónica, allá por los 1940’s, los seres humanos hemos comenzado a crear máquinas que están por fuera de nuestra comprensión… al menos, en términos generales.
Por ejemplo: ustedes están leyendo este artículo en una pantalla, quizás de un celular, quizás de un computador. Estoy seguro que la mayor parte (al igual que yo) no tiene idea del funcionamiento del aparato en cuestión, y simplemente ha aprendido a usarlo.
Pero en cualquier caso, el tema aquí es que aunque nosotros no entendamos, hay personas que si lo hacen. En últimas, un computador es poco más que un conjunto gigante de “switches” que pueden estar encendidos o apagados, y a un nivel lo suficientemente básico cualquiera de nosotros podría fabricar uno con algunas horas de entrenamiento. Lo mismo ocurre con un procesador: si bien se basa en conceptos extremadamente complejos, e incluso bebe de la física cuántica, no es sino la iteración más reciente de un sistema que en su momento fue comprensible y se podía incluso fabricar a mano (con herramientas de gran precisión, sí, pero a mano).
En este sentido, aún las más complejas máquinas jamás fabricadas por nuestra civilización, por incomprensibles que parezcan, son poco más que el incremento de fenómenos que en su momento fueron casi artesanales, y que nosotros (como sociedad, digo, no como personas) conocemos y entendemos bien.
Pero recientemente ocurrió el primer cambio tecnológico verdaderamente incomprensible. Las llamadas “redes neuronales”, mecanismos electrónicos que imitan la evolución, han terminado por crear sistemas cuyo funcionamiento simplemente no entendemos.
Evolución digital
Bueno, como muchos de ustedes sabrán, la evolución es un proceso por el que una serie de objetos que se replican con algunos cambios van modificándose y terminan incluso por incrementar su complejidad a niveles impresionantes. En el caso natural, el criterio es la supervivencia: esto significa que los seres que sobreviven pasan sus genes a la siguiente generación, y los que mueren, pues no.
En sistemas, se ideó un concepto algo parecido. Se creaba un programa con una serie de variables que se modificaban de manera aleatoria y unos indicadores. Se generaban, por decir algo, 1.000 programas que simplemente movían sus variables de manera aleatoria, y se seleccionaban los 100 que mejor desempeño habían tenido.
Pongamos por ejemplo un juego de video (digamos, Mario). En este caso, las variables sería presionar los botones arriba, abajo, derecha, izquierda X y Y en momentos determinados, y el único indicador importante sería la distancia recorrida (es decir, qué tan lejos llega en el juego).
Entonces, en esta “primera generación” la mayor parte de los programas creados al azar a duras penas se moverán, o simplemente morirán cuando se choquen con el primer obstáculo. Pero al ser al azar, algunos podrán seguir adelante y llegar apenas un poco más lejos que sus predecesores.
Y con ellos se fabricará la segunda generación.
Esto que les estoy contando no es un chiste. Hay un youtuber que ha publicado varios videos haciendo precisamente esto, que con un lenguaje de programación moderno le toma apenas unos pocos minutos programar. Por supuesto, para problemas más complejos tenemos más variables e indicadores, y el asunto se torna un poco más complejo, pero la idea esencial es la misma. A estos programas se les conoce como “redes neuronales”.
Tecnología incomprensible
Entonces, ¿por qué decimos que las redes neuronales son una tecnología que no entendemos?
Simple, porque los códigos generados aleatoriamente son tan complejos y enredados que muchas veces usan mecanismos desconocidos para obtener una respuesta.
Por ejemplo, usando una red neuronal puedes “educar” un programa para que reconozca un perro. Una vez lo hace, sin embargo, la manera como este mecanismo funciona es desconocida. Incluso, puedes jugar con el programa y confundirlo con algunos detalles, sin aún saber qué es exactamente lo que él “ve”.
Pero existen algunos ejemplos más interesantes. Uno de los más dramáticos ocurrió cuando un grupo de ingenieros estaban tratando de crear un programa capaz de diseñar un circuito capaz de detectar los cambios en una señal. Los circuitos usados para esto tienen unas “puertas” que dejan pasar la señal o la bloquean y se usan para dirigir el sistema.
La idea era usar menos puertas. Hasta ahora, ingenieros humanos habían diseñado circuitos con 1.000 puertas, pero se sabía que era posible mejorar. Entonces, usando un circuito grande como base, pusieron a una red neuronal a desarrollar sistemas más y más eficientes hasta que en el circuito quedaron únicamente 37 puertas que bastaban para detectar el cambio el 100% de las veces.
Luego probaron este diseño en otro circuito (con las mismas 37 puertas)… y falló. Realizaron una copia original del circuito… y falló. Y así, creyendo que algo estaba mal, volvieron a probarlo en el circuito original… y funcionó perfectamente.
Todo indica que en sus múltiples iteraciones, el sistema dio con alguna particularidad del circuito. Quizás la aleación de cobre en una de las puertas era ligeramente más densa, lo cual lleva a un resultado diferente. Quizás los cables tienen pequeñas rupturas que disminuyen de manera imperceptible (para nosotros) la corriente. Basándose en esta imperfección del circuito, el sistema generó un mecanismo para detectar los cambios en la señal, uno con un 100% de eficacia.
Y nosotros no tenemos cómo saber qué fue lo que sucedió. Entendemos el proceso por el que creamos el sistema, pero la naturaleza de su funcionamiento nos es ininteligible. Por primera vez en la Historia hemos construido máquinas que funcionan… y no tenemos idea cómo.
Quizás, es así como comienza la revolución de las máquinas. ¿No creen?
Fuentes:
- https://www.damninteresting.com/on-the-origin-of-circuits/
- https://www.quora.com/Is-it-true-that-code-works-but-no-one-knows-why-in-some-cases/answer/Jeffrey-Naujok
Imágenes: 1: analyticsvidhya.com, 2: youtube.com, 3: ecraft2learn.github.io