Chapter Content

Calculating...

Vale, vale, a ver, por dónde empiezo... Digamos que esto va un poco sobre... una forma diferente de solucionar problemas, ¿no? Y hay una idea ahí que me parece súper interesante, que es como... "Si lo ves, está mal". Raro, ¿verdad?

O sea, pensá en los guantes, el muñeco de nieve, el cubo de Rubik... Son problemas con diferentes niveles de dificultad, como vimos antes, ¿no? Pero, independientemente de eso, al final todos requieren, digamos, el mismo enfoque para encontrar la solución: un proceso general con heurísticas para moverte por ese espacio de posibilidades de forma más eficiente. Y claro, cuanto más difícil es el problema, más búsqueda se necesita para lidiar con toda esa complejidad que tiene dentro.

Acuérdate, una solución es el objeto físico que implementa el proceso interno para resolver un problema. Los guantes son una solución porque son objetos físicos hechos de piezas conectadas que producen el resultado que queremos: manos calentitas. Y las soluciones del cubo de Rubik que encuentra la gente, son... bueno, conjuntos de reglas escritas en un papel.

Pero... la solución que encuentra el *deep learning* para el cubo de Rubik es totalmente diferente. No es algo que puedas escribir, ¿me entendés? La solución humana es interpretable, mientras que la del *deep learning* es básicamente una caja negra. Da igual cuánto intentes mirar dentro, inspeccionar el modelo... no vas a poder descifrar lo que está haciendo el *deep learning* con certeza.

Y esto es lo raro, ¿no? El cerebro humano es lo más complejo que conocemos, y sin embargo produce una solución que se puede entender. En cambio, el *deep learning* roza la verdadera complejidad, pero sus soluciones son opacas, indescifrables. Uno pensaría que los humanos y el *deep learning* producirían soluciones más parecidas, pero no.

De hecho, el *deep learning* sí que produce soluciones parecidas a las humanas, pero solo si el problema es realmente, realmente difícil. El cubo de Rubik no lo es. Es un rompecabezas con un número fijo y manejable de estados y transiciones entre ellos. El espacio de posibilidades del cubo de Rubik solo es grande en comparación con problemas más sencillos.

Como el cubo de Rubik no es un problema ultra-complejo, podría tener una solución simple o una compleja. La simple sería la de las reglas que entendemos, mientras que la compleja sería la indescifrable que produce el *deep learning*. Entonces, ¿por qué el *deep learning* elige la compleja?

Pues porque el *deep learning* usa un proceso externo de variación, iteración y selección para construir sus modelos. Y eso, como ya vimos, es lo que genera complejidad. Se espera que este proceso dé una solución con una complejidad parecida a la del problema que intenta resolver. Y como el espacio de posibilidades del cubo de Rubik tiene cierta complejidad, la solución del *deep learning* la aprovecha.

Por eso, aunque la solución del *deep learning* sea opaca, es la mejor en cuanto a rendimiento. Pueden resolver el cubo de Rubik en menos de un segundo, más rápido que los mejores *speedcubers*. Y no es cuestión de robótica o máquinas que no se distraen. La velocidad viene de una capacidad de computación superior, que permite probar y equivocarse en vez de analizar y razonar deliberadamente. Y esto también lo vemos en los humanos. Los algoritmos más rápidos que encuentran los humanos se basan más en heurísticas y reconocimiento de patrones que en los algoritmos más lentos para principiantes. Los *cubers* avanzados usan mucha más intuición para resolver el cubo, aprovechando pistas sutiles y patrones recurrentes para anticipar los siguientes movimientos mientras ejecutan los actuales.

Los humanos buscamos un conjunto de reglas claras, ¿sabes? Como cuando horneás la mejor tarta de manzana por accidente y querés recordar cómo lo hiciste. Pero lo hacemos porque hoy en día se espera que demos explicaciones, que enseñemos a otros cómo hacer algo de forma determinista. Pero no hay ninguna razón para pensar que una solución explicable va a ser la mejor en rendimiento. De hecho, deberíamos esperar lo contrario, sobre todo cuando pasamos de los juegos a la vida real.

El *deep learning* aprovecha la complejidad que ya existe en el problema del cubo de Rubik. Captura patrones y relaciones complejas en los datos que representan las posiciones del cubo, incluyendo relaciones no lineales que no se pueden expresar con reglas simples. Descubre estrategias que explotan esa complejidad de formas que son imposibles de descifrar después. Y esto es lo que hace el cerebro humano cuando se enfrenta a desafíos reales. Podemos lanzar una lanza a un oponente en el campo de batalla y darle perfectamente, pero ser incapaces de explicar cómo lo hicimos. Si intentáramos descomponer el lanzamiento de lanza en una técnica, con movimientos aislados que se suman, seguramente tendríamos un enfoque mucho peor.

El *deep learning* está codificando un tipo de conocimiento implícito en sus parámetros. El conocimiento implícito siempre va a ser mejor en entornos complejos porque es latente. Las cosas latentes se materializan, no se construyen deliberadamente. Esta verdad es tan fundamental que la propia explicabilidad debería considerarse una señal de que estamos simplificando demasiado el mundo real.

Resolver problemas realmente difíciles exige soluciones realmente complejas. Lo que construyamos en esta era de la complejidad no puede ser un conjunto simplista (o sea, complicado) de piezas e interacciones bien pensadas. Sea cual sea el proceso interno que usen nuestros inventos, deberíamos esperar que sea indescifrable. Las explicaciones que intentan definir cómo funcionan internamente las cosas complejas son cuentos de hadas, y solo pueden limitar nuestra capacidad de innovación.

La naturaleza no es una aproximación...

A ver, los enfoques que se usan para resolver problemas difíciles siempre se han considerado aproximaciones. Decimos que hay una aproximación cuando el proceso para llegar a una respuesta no es tan bueno o exacto como lo sería si abordáramos el problema directamente. El *deep learning* se basa en heurísticas y optimización matemática para llegar a sus soluciones. Como dijimos antes, estos métodos son versiones más "suaves" de los enfoques más directos basados en reglas que se usan en la computación tradicional. Nos dicen que las formas más suaves de computación y razonamiento son más aproximadas, que lo que se encuentra a través de la aproximación debería considerarse subóptimo.

Esto se aplica tanto a humanos como a máquinas. En el caso de los humanos, las heurísticas se basan en nuestros juicios e intuiciones personales, lo que introduce sesgos, "errores" y variabilidad en el proceso de toma de decisiones. Diferentes personas pueden aplicar las heurísticas de forma diferente, y esto puede llevar a resultados diferentes en la misma situación. Las heurísticas priorizan la velocidad sobre la precisión. Buscan encontrar rápidamente una solución que sea suficientemente buena, en lugar de dedicar tiempo y recursos a encontrar la mejor. La versión en máquina de esto es básicamente la misma. El uso de heurísticas parece una forma de saltarse lo esencial para conseguir una solución más rápido.

Pensar en los enfoques "suaves" como aproximaciones refleja lo que creo que es una de las falacias centrales del paradigma científico y de ingeniería actual. La única forma de considerar el uso de heurísticas como una aproximación es si crees que la mejor forma de resolver un problema es de forma determinista. Que solo si llegas a los detalles del sistema y ves exactamente cómo las piezas individuales trabajan juntas para producir el resultado, estás siendo riguroso en tu enfoque.

Esto se aplica tanto al descubrimiento como a la aplicación de una solución. Encontrar una solución usando el razonamiento deductivo basado en reglas se considera más meticuloso y exacto que saltar por un espacio de posibilidades, basando las decisiones en patrones generales. Y desplegar un sistema ordenado basado en reglas parece más racional y prudente que un modelo opaco cuyos métodos internos no se pueden descifrar.

Pero así no funciona la complejidad. La complejidad no es una versión mejorada de lo que vemos en los sistemas simples. La complejidad es indescifrable, no porque haya demasiados detalles y reglas que ver con claridad, sino porque el mecanismo por el que los sistemas complejos procesan la materia y la información es totalmente diferente. La "mancha" estadística que se ve en los sistemas complejos no es una versión difusa de lo discreto, sino que es lo que se manifiesta para resolver el problema. Intentar mirar dentro y encontrar pequeñas piezas que funcionan de forma determinista es buscar algo que no está ahí. Sí, hay piezas pequeñas. Y sí, interactúan. Pero no como una cadena lineal de causa y efecto. Las interacciones dentro de los sistemas complejos manifiestan construcciones que no existen a escalas más pequeñas.

Las soluciones de la naturaleza no son soluciones aproximadas a problemas difíciles, son exactamente lo que computa la respuesta que se necesita. La naturaleza no son las piezas reducidas y aisladas que usamos para definir el conocimiento actual. El hecho de que podamos inspeccionar una molécula y definir sus átomos constituyentes no significa que la estructura y el comportamiento de una molécula se puedan explicar usando átomos. El hecho de que la célula tenga orgánulos que parecen asumir funciones específicas no significa que podamos explicar (correctamente) la función celular usando orgánulos.

Las construcciones computacionales de la naturaleza emergen como algo propio, en todas las escalas en las que existe una solución. A los humanos les cuesta imaginar el procesamiento como algo que no sea una serie de operaciones mecánicas realizadas para cambiar las entradas en salidas. Pero el procesamiento solo significa que la materia y/o la información se están transformando, no que tenga que ocurrir por medios mecánicos o causales.

Determinismo flexible...

En el capítulo uno vimos la diferencia entre procesos deterministas y no deterministas. Los procesos deterministas son aquellos en los que el resultado es predecible, de forma que las mismas entradas siempre producen las mismas salidas. Los procesos no deterministas son aquellos en los que el resultado no es totalmente predecible, de forma que las mismas entradas pueden producir resultados diferentes cada vez. Los procesos deterministas no permiten la aleatoriedad en su funcionamiento normal, mientras que los procesos no deterministas la aprovechan.

Pero las cosas no son tan claras cuando se trata de las soluciones de la naturaleza. Las soluciones de la naturaleza tienen tanto determinismo como no determinismo. Las soluciones de la naturaleza tienen lo que yo llamo determinismo flexible. Las cosas son flexiblemente deterministas cuando tienen un comportamiento tanto reproducible como no reproducible. Pensemos en el castor. Obviamente hay mucha reproducibilidad en este organismo, ya que siempre sabemos cuándo vemos un castor. Un castor tiene un aspecto y un conjunto de comportamientos bien definidos. El castor no produce salidas totalmente diferentes para sus entradas.

Pero el castor también es muy no determinista. Tiene que serlo, ya que su serie de desafíos nunca podría resolverse con un determinismo estricto. Imagínate intentar convertir las entradas de depredadores, comida, territorio, fluctuaciones de temperatura, sequías y parásitos usando un motor de reglas que siempre hace lo mismo. Los depredadores pueden acercarse desde incontables ángulos, las fluctuaciones de temperatura son muy impredecibles y los parásitos pueden infectar en cualquier momento. Un sistema determinista nunca podría tener en cuenta la pluralidad de factores en un número casi infinito de escenarios posibles.

Y, sin embargo, el castor sobrevive. A pesar de la convolución de entradas arbitrarias, incidentales, irregulares y no planificadas, el castor convierte de forma fiable las mismas pocas salidas cada vez. Este tipo de transformaciones de muchos a pocos solo son posibles a través de la abstracción. Las estructuras de la montaña, el lecho del río y el castor funcionan porque son abstracciones físicas que abrevian la materia, la energía y la información en unas pocas salidas fiables; como hacen las abstracciones. Las abstracciones físicas son la construcción central de la computación de la naturaleza porque es la única forma de conseguir su característico determinismo flexible.

El reconocimiento facial lo realizan los humanos, no a través de un análisis detallado y un procedimiento rutinario, sino detectando patrones invariantes de alto nivel que son robustos a los cambios de ángulo y de iluminación. Si la persona que estamos mirando mueve la cabeza, tiene sombras en la cara o está empapada por la lluvia, podemos seguir reconociéndola. Esto es la abstracción en acción. La esencia de una cara no se puede articular usando el análisis o descripciones detalladas porque no hay mecanismos deterministas exactos que puedan identificar las caras. Solo si la mente se ancla en algo mucho más abstracto se puede resolver el problema del reconocimiento facial.

Para poder notar patrones de alto nivel, como una cara, debe existir un nivel formidable de compresión de información. Detalles como la distancia entre los ojos, la anchura de la nariz, etc., deben comprimirse en unas pocas señales de alto nivel que la mente pueda usar para asignar la identidad de alguien. Esto es exactamente lo que es la abstracción. La compresión de la información en unos pocos anclajes sobre los que se puede actuar.

Todos los problemas de la naturaleza son difíciles. No son situaciones que se resuelvan con un análisis lento. Los problemas difíciles se resuelven rápidamente porque se basan en abstracciones de alto nivel en forma de heurísticas y reconocimiento de patrones. Un problema que tarda mucho en resolverse es, de hecho, un problema sencillo. Esto suena contradictorio a la forma en que usamos el término "difícil" en el lenguaje cotidiano, pero en términos computacionales es cierto. Solo los problemas sencillos se pueden desmenuzar y analizar en el sentido reduccionista. Los problemas realmente difíciles no se pueden resolver por esos medios. Los problemas difíciles requieren construcciones de alto nivel para resolverse. Solo abstrayendo los detalles internos en cosas de orden superior se pueden gestionar los problemas difíciles. Para que quede claro, no estamos hablando de encontrar una solución por primera vez. Aquí estamos hablando de la implementación de la solución ya encontrada (por ejemplo, un modelo desplegado o un cerebro humano que identifica caras). Encontrar la solución a un problema difícil lleva mucho tiempo, pero implementar la solución encontrada no.

Tenemos ejemplos de determinismo flexible hechos por humanos. Las soluciones producidas por los modelos de *deep learning* son lo suficientemente fiables como para considerarse efectivamente deterministas, pero lo suficientemente flexibles como para resolver problemas difíciles cuando se implementan. No se trata de la diferencia entre la fase de entrenamiento y la fase de despliegue del *deep learning*, sino solo de la solución desplegada. El tipo de determinismo que se ve en los modelos de *deep learning* operacionales no tiene nada en común con el determinismo de la ingeniería tradicional. La ingeniería tradicional produce soluciones cuyas salidas son totalmente predecibles. Aunque los errores y los factores ambientales incontrolables pueden mitigar la pura predictibilidad, el funcionamiento interno de los sistemas sencillos está diseñado para ser máquinas totalmente deterministas.

Pero el *deep learning* es flexible en su forma estática. La configuración de los parámetros que convierten las entradas en salidas está fija, pero aporta una flexibilidad extrema al mapear mucha información en mucha menos información. Este es el tipo de determinismo que se encuentra en la naturaleza; el tipo que no se consigue con el comportamiento de las reglas.

Las reglas pueden seguir participando en el nivel inferior. Las hormigas y las termitas tienen reglas de interacción locales que dictan cómo interactúan. Pero, de forma crucial, no hay una línea directa desde estas interacciones hasta el comportamiento que emerge. Las reglas de interacción locales solo establecen la interdependencia que aprovechan los sistemas complejos. No son lo que lleva a las salidas que resuelven el problema de nivel superior. No son las reglas las que convierten las entradas en salidas; esa transformación está ocurriendo en el nivel superior de abstracción física.

Por eso cualquier intento de explicar explícitamente el funcionamiento interno de los modelos de *deep learning* es totalmente irracional. El mecanismo por el que el *deep learning* computa no se puede explicar en el sentido causal interno. Sin embargo, esta verdad se pierde para muchos científicos e ingenieros. No faltan investigadores que intentan dar una explicación más "científica" de lo que están haciendo los modelos de *deep learning*. Su concreción mal entendida proviene de nuestro paradigma científico y de ingeniería reduccionista. Si alguna vez se proporciona una descripción sobre cómo funciona internamente el *deep learning*, solo podría ser porque 1) es falsa o 2) el *deep learning* no es, de hecho, complejo. Todo apunta a que la opción #1 es la correcta.

Los sistemas de *deep learning* nunca se diseñarán en el sentido determinista porque cualquier nivel de determinismo que alberguen no se ha colocado allí explícitamente. No hay un camino de la entrada a la salida en el *deep learning*, porque lo que manifiesta un modelo de *deep learning* es un mecanismo emergente que transforma la información de formas que las reglas no pueden.

Por supuesto, esto no es solo el *deep learning*. El *deep learning* es la versión hecha por el hombre de lo que vemos en la naturaleza. Esto no quiere decir que el *deep learning* sea tan capaz como la naturaleza, sino que nos muestra indicios del tipo de complejidad necesaria para lograr el determinismo flexible que se ve en las soluciones de la naturaleza. El cerebro humano es, por supuesto, el mejor ejemplo de todos. El cerebro humano es el objeto más complejo que conocemos, dado su número de neuronas, conexiones y propiedades emergentes. El cerebro humano es un objeto con un determinismo flexible extremo, que nos permite maniobrar a través de nuestra complejidad ambiental con gran generalidad.

Muchos científicos e ingenieros hablan como si la incertidumbre que surge en los sistemas complejos se debiera a cosas como perturbaciones externas, ruido o aleatoriedad inherente a la dinámica del sistema. Esto es cierto para los sistemas deterministas, pero no para los complejos. De nuevo, la complejidad no es una versión desordenada del determinismo, sino que opera de una forma fundamentalmente diferente. Hay una transición abrupta cuando un sistema pasa de ser simple a complejo. Veremos lo que está pasando durante esta transición en la segunda parte.

Necesitamos diseñar la emergencia...

Ya no podemos diseñar soluciones de la misma forma en que lo hemos hecho a lo largo de nuestra historia. Las salidas que se necesitan deben llegar a través de la emergencia, y solo los objetos complejos pueden lograr la emergencia. No podemos tomar decisiones específicas sobre las piezas y las conexiones que producen resultados conocidos, sino que debemos salir de los aspectos internos de los sistemas que creamos, como hace la naturaleza.

Construir en la era de la complejidad exige que nuestros procesos compartan profundas similitudes con la selección natural, en la que la variación, la iteración y la selección son las principales preocupaciones, mientras que las configuraciones internas de nuestras soluciones emergen por sí solas.

Construir tecnología es resolver problemas con cosas tangibles. Esto siempre ha dependido del diseño, para elaborar el siguiente nivel de abstracción física. Pero el número de piezas e interacciones que ahora deben estar dentro de las cosas que construimos erradica la noción de diseño por completo. Los parámetros dentro de las entrañas de nuestras creaciones no se pueden establecer explícitamente. No hay acceso al tipo de información interna necesaria para establecer esos detalles, e incluso si lo hubiera, así no funciona la naturaleza. Los enfoques basados en el diseño están arraigados en el pensamiento reduccionista, y no puede haber una filosofía reduccionista que conduzca a creaciones viables que funcionen bajo la complejidad.

Pero construir cosas sigue requiriendo conocimiento sobre los principios, los materiales y los procesos involucrados en la construcción. Diferentes cosas se comportan de forma diferente en diversas condiciones, y este tipo de conocimiento es necesario para tomar decisiones racionales sobre cómo proceder. Al igual que en la ingeniería tradicional, construir cosas complejas que funcionen sigue exigiendo una apreciación de cómo la integridad estructural, la seguridad, la funcionalidad y la eficiencia se desarrollan en los entornos en los que colocamos las cosas que creamos.

La diferencia ahora es que ese conocimiento no puede basarse en los detalles internos de nuestras creaciones. Esto va en contra de cómo operan la ciencia y la ingeniería hoy en día. Para construir una torre de oficinas con integridad estructural, hay que usar el conocimiento de cómo se distribuyen las cargas dentro del edificio. Las interacciones causales entre componentes estructurales específicos como vigas, columnas y cimientos se utilizan para diseñar y elaborar una estructura viable.

Crear objetos que cumplan las normas de seguridad significa comprender cómo interactúan los distintos elementos dentro de las estructuras y cómo podrían fallar en diferentes situaciones. Para prever los posibles peligros y mitigar los riesgos, hay que tomar decisiones conscientes sobre qué piezas utilizar y cómo conectarlas. Pensemos en las paredes resistentes al fuego, los sistemas de rociadores y las rutas de evacuación dentro de los edificios actuales. Nuestras creaciones se han hecho eficientes optimizando el funcionamiento interno de las estructuras que diseñamos. Para identificar las áreas de mejora, tuvimos que razonar sobre las conexiones causales entre las piezas y usar ese conocimiento para agilizar los procesos, minimizar los residuos y reducir los costes. Cuando se trata de que nuestras creaciones funcionen según lo previsto, esa funcionalidad siempre ha sido posible comprendiendo los mecanismos y procesos internos por los que se producen las salidas.

Todos estos ejemplos se basan en el conocimiento interno de cómo funcionan las cosas. A medida que avanzamos hacia la era de la complejidad, no podemos simplemente desechar el conocimiento sobre los principios, los materiales y los procesos. La diferencia es que ahora debemos reformular ese conocimiento en términos de propiedades externas relativas a los materiales y los procesos que hacen que las cosas funcionen. Al igual que la selección natural llega a la verdadera sofisticación sin depender del conocimiento interno, nosotros también debemos salir de los sistemas que creamos y colocar nuestros estándares allí.

Para ello debemos asegurarnos de que entendemos qué es la emergencia. No usando una historia reduccionista fragmentada que intente conectar las escalas pequeñas y grandes a través de conexiones causales, sino usando el conocimiento de las propiedades universales de la información, la computación y la evolución.

Solo retrocediendo y mirando lo que la naturaleza está haciendo para lograr sus estructuras y comportamientos emergentes podemos entender cómo computa la naturaleza. Esto no se encuentra en los anales de la ciencia. No porque otros no lo hayan intentado, sino porque sus intentos todavía huelen al viejo reduccionismo que frustra los intentos intelectualmente honestos de comprender la complejidad. Lo que se necesita es una mirada objetiva a lo que la naturaleza está haciendo con la información, la computación y la evolución para crear sus soluciones. Solo saliendo del paradigma actual y viendo la naturaleza por lo que es podemos despojarnos de nuestra lente reduccionista anticuada y sacar a la luz verdades innegables sobre cómo funciona la naturaleza.

Go Back Print Chapter