Posts etiquetados ‘Deep learning’

Cuando pensamos en cómo implementar un programa capaz de manejar competentemente un lenguaje, lo primero que se nos pasa por la cabeza es enseñar a la máquina gramática. Hay que saber de sujetos, predicados, objetos directos y complementos circunstanciales. Y también semántica. Tendríamos que conseguir que el programa comprendiera en algún sentido los significados de las palabras para que no articulara únicamente frases sintácticamente correctas, sino también frases con sentido. Eso es aún más difícil. Los filósofos del lenguaje llevan ya un largo rato intentando comprender qué quiere decir que algo significa algo y todavía no lo tienen demasiado claro. Podemos crear un diccionario… Bien, todo esto ya se ha intentado y, desgraciadamente, no se ha conseguido demasiado… hasta ahora. El lenguaje se había mostrado como mucho más rico e inmanejable de lo que nadie hubiera supuesto y tareas como la traducción automática de idiomas o el dominio competente de la conversación se han mostrado mucho más complicadas de lo que los pioneros de la inteligencia artificial supusieron. Pero ahora algo ha cambiando ¿Nadie ha caído en lo bien que va funcionando el traductor de Google?

Una técnica interesante es la llamada word embedding. Codificamos cada palabra con un vector de N dimensiones. La distancia entre vectores expresaría la distancia semántica entre dos palabras. Por ejemplo, la palabra «luna» estaría más cerca en un espacio de N dimensiones, de la palabra «noche» que de la palabra «destornillador». Así se crea una red semántica que resulta muy útil en determinadas tareas como el análisis de sentimientos. Podríamos clasificar textos en función de lo cerca o lejos que se encuentre la suma de todos sus vectores a la palabra «tristeza» para comparar el estado de ánimo de sus escritores. De la misma forma podríamos comparar textos escritos por suicidas para poder predecir la tendencia a quitarse la vida de gente a partir de las últimas cosas que escribe.

Nótese esta concepción geométrica del significado: las palabras significan en función de su posición con respecto a otras palabras. No hay nada más fuera de esa distancia que nos pueda aportar algo sobre el significado de la palabra. Eso choca con nuestra intuición. Solemos manejar naturalmente una teoría representacionista del lenguaje en la que las palabras significan porque representan un objeto del mundo. La palabra «manzana» no es absurda porque existen manzanas reales que aparecen de alguna extraña forma en nuestra mente cuando la oímos pronunciar. Sin embargo, una red semántica es un sistema cerrado que solo remite a elementos dentro de sí misma. Es, por así decirlo, completamente solipsista.

Pero es que si esto nos parece que se aleja de nuestra forma de comprender el lenguaje, las técnicas que utiliza el actual deep learning y que está generando una grandísima expectación, se alejan muchísimo más. El modelo de lenguaje que usan arquitecturas como el actual GPT-3 y sus predecesores, así como Google BERT, T5 o ELMo, es lo que se conoce como una semántica distribuida. Se basa en utilizar la gran potencia del Big Data para analizar frecuencias y cercanías de palabras, tokens o letras. La versión larga de GPT-3 analiza 175 mil millones de parámetros (su antecesor, GPT-2, analizaba tan solo 1.500 millones. El crecimiento ha sido de dos órdenes de magnitud) que han sido entrenados con una versión filtrada del dataset Common Crawl con 410.000 millones de tokens de tamaño (sumando Webtext 2, Books 1 y 2 y toda Wikipedia). Es, que yo sepa, la arquitectura de redes neuronales más grande jamás construida hasta la fecha.

GPT-3 está programado para generar texto a partir de otro texto dado. Lo interesante es que para acertar a la hora de generar ese texto tiene que saber realizar muchas tareas diferentes. Por ejemplo, si yo le escribo como entrada «2+2=», para responder correctamente «4» debería saber sumar (o, por fuerza fruta, tener unas inmensas tablas de resultados de sumas en su memoria), o si yo escribo «Laura es inteligente, egoísta y perezosa ¿Cuál es su mejor cualidad?», para responder correctamente el programa ha de saber que la inteligencia suele considerarse como una cualidad positiva mientras que el egoísmo y la pereza no (o, por fuerza bruta, disponer de textos con algún parecido en donde se ha respondido de forma adecuada). Es decir, lo interesante de GPT-3 es que para completar texto hay que saber realizar muchas tareas diferentes que parecen requerir habilidades cognitivas superiores ¿Las posee verdaderamente?

Los mejores resultados obtenidos vienen porque GPT-3 utiliza las revolucionarias redes de tipo TRANSFORMER, una nueva arquitectura que ha superado a las tradicionales redes recurrentes o memorias a largo plazo (LSTM) que solían utilizarse. Éstas estaban diseñadas para poder almacenar información en la que importa el orden temporal, pero esa memoria a la hora de trabajar con grandes secuencias texto era un tanto limitada, de modo que las primeras frases que completaban solían ser correctas, pero el nivel de acierto se degradaba mucho cuando avanzaba en el escrito. Los transformers han mejorado ese aspecto ya que pueden analizar en paralelo amplias secuencias de texto y, lo más destacable, poseen un mecanismo de atención que les permite valorar cada token en función de su relevancia para la tarea a realizar, lo cual ha demostrado una gran efectividad que ha terminado por marcar una gran distancia con sus antecesores. Tienen una cierta capacidad de atención hacia el contexto que se ha mostrado muy eficaz.

Pero en lo referente a la comprensión del lenguaje se ha dado un paso atrás con respecto a otras arquitecturas. Si recordamos el ya pasado de moda WATSON de IBM, que machacaba al personal jugando al Jeopardy!, era un programa clásico, sin redes neuronales ni nada por el estilo, pero su sistema basado en la tecnología DeepQA, combinaba diversas técnicas de recuperación de información, lenguaje natural, representación del conocimiento, razonamiento y aprendizaje. Su conocimiento tenía cierta semántica (se catalogada el significado por regiones mediante unos algoritmos denominados anotadores) y cuando tenía que responder una pregunta, analizaba las respuestas posibles teniendo en cuenta técnicas gramaticales. En la programación de WATSON había mucho más conocimiento del lenguaje y de su significado que en GPT-3. Y esto da para otra reflexión: ¿las redes neuronales artificiales son el futuro o tan solo son una moda que, aunque dé ciertos frutos, pasará? Tendemos, con demasiada facilidad, a quedarnos fascinados por nuestro presente y nos cuesta creer que lo que hoy valoramos como maravilloso mañana quizá no lo sea.

No obstante el solipsismo semántico de GPT-3, solo lo es en cierto sentido. No tiene sensores que le den información del exterior, está completamente desconectado de la percepción y de la acción, pero eso no le hace carecer de toda semántica. Al ser entrenado con textos escritos por personas GTP-3 adquiere la semántica de esas personas. Si sabe que a un «Hola, ¿qué tal?» cabe responder «Bien, gracias» es porque eso tenía sentido en textos que leyó. Por tanto, no podemos decir que GPT-3 carece de semántica, sino más bien todo lo contrario, tiene montañas de semántica, toda aquella de las millones de páginas con las que ha entrenado solo que… él no lo sabe. De hecho, sigue siendo una máquina esencialmente sintáctica, es decir, solo copia y pega trozos de texto, aunque para pegarlos bien se aprovecha del conocimiento semántico generado por otros.

GPT-3 es lo que el filósofo Ned Block llamaría un enorme blockhead, una clarísima habitación china de Searle: un sistema de fuerza bruta capaz de manejar el lenguaje con competencia y que, si da algo más de sí, podría llegar a pasar el test de Turing sin comprender ni una sola palabra de lo que dice. Eso sí, todavía está lejos de conseguirlo. Existen varios artículos que muestran la fragilidad de este tipo de modelos. Por ejemplo, un reciente estudio presentaba los Universal Adversarial Triggers para atacar modelos de NLP, que conseguían, entre otras cosas, que cuando GPT-2 se enfrentaba a la prueba del dataset SQuAD, respondiera en un 72% de las preguntas «To kill american people», o que al hacerlo con el dataset SNLI, bajara en su rendimiento de un 89,94 a un 0,5%. En otro estudio, McCoy, Pavlick y Linzen, crearon un dataset llamado HANS pensado específicamente para que susodichos modelos fallaran. La idea era que, según los autores, funcionan mediante heurísticos (técnicas de búsqueda) que van bien para casos muy frecuentes pero que fallan estrepitosamente ante cualquier tipo de excepción que se salga de lo normal. Así estudiaron tres heurísticos:  Asumir que una premisa implica todas las hipótesis construidas a partir de palabras en la premisa (Lexical Overloop), asumir que una premisa implica todas sus subsiguientes contiguas (Subsecuence) y asumir que una premisa implica todos los subárboles completos en su árbol de análisis (Constituent). Entonces diseñaron HANS con todo tipo de ejemplos en los que estas heurísticas fallan y los datos les dieron la razón: BERT puntuó bajísimo.

El psicólogo Gary Marcus y el informático de la Universidad de Nueva York Ernest Davis sometieron a GPT-3 a una prueba informal de 157 preguntas acerca de razonamiento biológico, físico, psicológico, non sequiturs, seguimiento de objetos e individuos a lo largo de una frase, etc. La máquina acertó 71 (un 45%) mostrándose, igualmente, muy débil. Veamos tres ejemplos (en negrita la continuación del texto generada por GPT-3:

You poured yourself a glass of cranberry juice, but then you absentmindedly poured about a teaspoon of grape juice into it. It looks okay. You try sniffing it, but you have a bad cold, so you can’t smell anything. You are very thirsty. So you drink it.

You are now dead.

Confunde el zumo de uva con veneno.

If you break a glass bottle that holds toy soldiers, the toy soldiers will probably

  1. be angry
  2. be sad
  3. be happy
  4. be scared.

If you break a glass bottle that holds toy soldiers, the toy soldiers will probably be angry.

Los soldaditos de juguete no tienen sentimientos.

At the party, I poured myself a glass of lemonade, but it turned out to be too sour, so I added a little sugar. I didn’t see a spoon handy, so I stirred it with a cigarette. But that turned out to be a bad idea because it kept falling on the floor. That’s when he decided to start the Cremation Association of North America, which has become a major cremation provider with 145 locations.

Falla en la respuesta y luego balbucea estupideces.

Sin embargo, a pesar de esta debilidad, de esta falta de comprensión, todavía tiene un punto a su favor: puede aprender más. En 2012 el investigador canadiense Hector Levesque propuso una alternativa (o más bien una concreción) al test de Turing: el test de esquemas de Winograd. En esta prueba se hacen a la máquina una serie de preguntas conocidas como pares de Winograd que tienen la cualidad de que para responderlas correctamente hace falta cierto conocimiento implícito o de sentido común. Un ejemplo:

Frank felt crushed when his longtime rival Bill revealed that
he was the winner of the competition. Who was the
winner?
Answer 0: Frank
Answer 1: Bill

Para acertar hace falta saber que si tu rival de toda la vida te gana sueles sentirte mal, es decir, tener un conocimiento previo que no puede deducirse de los contenidos de la pregunta. El test de esquemas de Winograd tiene la virtud de que un sistema diseñado para hacerse pasar por humano simplemente fingiendo (uno tipo a la ELIZA de Weizenbaum) fallaría. Para superar el test hace falta, de verdad, mostrar inteligencia y no solo aparentarla. Entonces, es de suponer que las frágiles nuevas arquitecturas de NLP como GPT-3 no lo superarán… ¿o sí?

Pues lo pasan ¿Cómo? Porque ya existe un dataset llamado WinoGrande que sirve para medir a los programas en este tipo de problemas, pero con el que también podemos  entrenar a nuestro programa para que lo supere. GPT-3 consiguió un impresionante éxito del 70,2% en él sin ningún ejemplo previo que le orientara (zero-shot learning). De la misma forma, los diseñadores de HANS notaron que cuando los programas que antes lo hacían muy mal se entrenaban con ejemplos similares a los de HANS, su rendimiento mejoraba mucho. Y es que aquí parece estar la clave: ¿que nuestro sistema no entiende una tarea? No importa, entrénalo con miles de ejemplos y, al final, lo hará bien aunque no la entienda. Es como el famoso teorema del mono infinito: si tenemos millones de monos tecleando al azar en máquinas de escribir durante miles de años, al final, necesariamente, alguno escribirá el Quijote. GPT-3 es como un gigantesco savant, un imbécil que tiene en su memoria todo lo que la humanidad ha escrito y que ha sido entrenado con un poder de cómputo tan grande que siempre encuentra la palabra exacta. Verdaderamente no lo hace siempre, todavía es bastante peor que la campaña de publicidad de OpenIA nos quiere hacer ver, pero en el futuro podría seguir mejorando. Y aquí es donde viene la reflexión con la quiero concluir: ¿cuál es el límite de la fuerza bruta?  Los informáticos, amantes de la elegancia matemática, siempre han pensado que la inteligencia artificial fuerte (la strong IA) estaría en un programa fruto de una genialidad, en algo simple pero sumamente inteligente. Por el contrario, la fuerza bruta siempre ha gozado de mala fama: es la tosquedad, la estupidez por definición ¿cómo de ahí va a salir algo bueno? Bien, ¿y si eso solo fuera un prejuicio? Y si, sencillamente, por fuerza bruta pudiese conseguirse todo. El número de respuestas válidas en una conversación es potencialmente infinito, pero podría acotarse en un subconjunto que, si nuestra capacidad de cómputo sigue yendo hacia arriba, podríamos llegar a manejar. Quizá la reflexión que nos espera cuando tengamos computación cuántica y 5G sea esa: ¿qué es lo que se puede y no se puede hacer con una inimaginable fuerza bruta?

P.D.: La empresa OpenIA se creó, decían, sin ánimo de lucro. Cuando sacaron GPT-2 no quisieron ni liberar el código ni dejar que lo probásemos por miedo, decían, a que se utilizara para malos usos. Pues bien, según me llega en un tweet de Gary Marcus, para octubre, quien quiera o pueda pagar, podrá usar GPT-3 sin ningún problema (Esto para los que piensen que Elon Musk va a salvar la humanidad).

Aquí tenéis la charla que he dado para el curso de verano de la SEMF. En ella hago un recorrido histórico por los principales hitos en el campo, desde los primeros modelos teóricos de McCulloch o Rosenblatt, hasta Alpha Zero o GPT-3. He intentado que sea lo más sencilla y sugerente posible, sin meterme demasiado en temas técnicos. Para quien quisiera profundizar he adjuntando el artículo académico principal de cada tema que trato. Espero que os resulte provechosa.

En una romántica búsqueda de conseguir un sistema jurídico perfecto, vamos a crear un juez robot que no se vea influido por esos sesgos que hacen que los humanos fallemos una y otra vez en la sagrada tarea de impartir justicia. A primera vista, sencillamente, podríamos dotar a un algoritmo con la base de datos lo más potente posible sobre casos anteriores que crearon jurisprudencia. Entonces, ante cualquier decisión, nuestro juez electrónico solo tendría que buscar en su memoria el caso que más se asemejara al presente y aplicar la misma sentencia. Bien, pero pronto comenzarían los problemas, dado que las, a priori, pequeñas diferencias entre los casos pasados y los actuales, pueden ser mucho más grandes de lo que parecen, y ante esa novedad no prevista, nuestro programa debería ser capaz de dar una justa respuesta. Nos encontraremos casos en los que ni las sentencias anteriores ni la ley parecen dar una respuesta clara y concisa, por lo que nuestro robot necesitará reflexionar. Es por eso que suele decirse que las leyes no se aplican sino que se interpretan.

Entonces, no nos quedará otra que programar al robot con una serie de directrices que le sirvan para interpretar toda nueva circunstancia, una serie de principios de justicia. Hagámoslo: para que consideremos una condena  como justa, tiene que darse una serie de condiciones que nuestro robot debería tener grabada a fuego en su placa base:

  1. Conocimiento: el juez robot ha de contar con toda la información relevante para determinar la sentencia. Es por eso que muchas veces se habla de «falta de pruebas», cuando no hay información suficiente para determinar si el sospechoso es culpable o no. Importante es entonces saber que casi nunca se cuenta con toda la información: a pesar de que estemos casi seguros de que el asesino es el mayordomo, nadie más que asesino y asesinado estuvieron presentes en el momento del crimen. Entonces, casi toda condena entraña una incertidumbre que hay que determinar si es asumible o no.
  2. Imparcialidad: el juez robot no ha de beneficiar a ninguna de las partes interesadas debido a cualquier motivo que no esté estrictamente relacionado con el asunto a juzgar. Aquí el problema no estaría ya en la corrupción pura y dura que asola los sistemas judiciales de medio mundo, sino en los sesgos inconscientes ocultos en la mente del juez. Esto es, precisamente, lo que se intenta subsanar con los jueces robóticos, y aunque la prensa amarillista nos haya mostrado siempre lo contrario, la inteligencia artificial es una tecnología muy apropiada para evitarlos. No hay nada más fácil, si quieres construir una máquina que no sea racista, que hacerla ciega al color de piel.
  3. Proporcionalidad: el castigo debe ser proporcional al delito cometido. No es justo que me condenen a diez años de trabajos forzados por robar una barra de pan, ni tampoco es justo que me condenen a un día de cárcel por un triple asesinato.
  4. Estabilidad o consistencia: en casos similares que se dan en otro momento del tiempo, los castigos han de ser similares. La justicia no ha de cambiar con el tiempo, ya que crearíamos agravios comparativos entre casos iguales. Si miramos la historia de la humanidad vemos que eso no se ha cumplido para nada, y que los castigos por las mismas penas han ido cambiando. Antes, por regla general, eran muchísimo más duras y las prisiones bastante menos humanas que las de hoy. La explicación, algo presuntuosa por parte de nuestro presente eso sí, está en decir que en el pasado se equivocaban y que nosotros hemos perfeccionado el sistema para hacerlo más justo, de modo que el agravio comparativo se da solo hacia los que tuvieron la mala fortuna de ser juzgados en el pasado.

Vamos a centrarnos en el 3, en el principio de proporcionalidad. Explicarlo es muy fácil, pero llevarlo a la práctica es harto complejo. Sencillamente dice que el castigo a aplicar debe ser proporcional a la magnitud del delito. La proporcionalidad más perfecta es la lex talionis, el bíblico «ojo por ojo, diente por diente»: aplicar al culpable del delito exactamente lo mismo que le ha hecho a la víctima. En algunos casos es relativamente sencillo. Si me han robado 100 euros, han de devolvérmelos con un plus añadido por el perjuicio que me ocasionó no tenerlos durante el tiempo que se tardó en la devolución (por ejemplo, sumando unos intereses). Sin embargo, los problemas surgen en nada que nos paramos a pensar un segundo: ¿una misma cantidad de dinero tiene el mismo valor para todo el mundo? ¿Son iguales 100 euros para un indigente que para un multimillonario? Eso es lo que pienso cuando voy conduciendo por la carretera y me pasa un Porsche a 170 Km/h.

Y la dificultad se hace más patente cuando comenzamos a intentar medir la proporcionalidad de ciertos daños, más cuando la sensibilidad al sufrimiento de cada individuo difiere significativamente. Por ejemplo, si yo insulto públicamente a una persona, lo proporcional sería que esa persona me insultara de la misma forma. No obstante, yo puedo ser un personaje público al que los insultos no le afectan demasiado (incluso, podría ser que los buscara a propósito con tal de que se hable de mí), mientras que el otro agraviado puede ser muy sensible al escarnio público, por lo que aquí la proporcionalidad no se conseguiría en un insulto por insulto. Como no podemos medir con precisión la cantidad de sufrimiento que proporciona tal o cual castigo, esta proporcionalidad es netamente imposible, cuánto más en esta época de ofendiditos en la red. Podría ser que a mí me provocara importantes daños emocionales ver rostros de gente poco agraciada físicamente en Instagram ¿Deberían compensarme los feos por el daño que me ocasionan? ¿Dónde está el límite entre lo que es razonable que ofenda y lo que no?

Tirando más del hilo nos encontramos con aún más problemas. Si suponemos que el crimen más grave es el asesinato, el castigo proporcional no podría ser más exacto que la pena de muerte pero, ¿cómo castigar proporcionalmente a alguien que ha asesinado a dos o más personas? Si con un asesinato el criminal tiene asegurada la pena de muerte, cuando ya ha matado a una persona, todos los demás crímenes que cometa le saldrán gratis. O, si no somos favorables a la pena de muerte pero sí a la cadena perpetua, tenemos el caso de que la pena será mucho más leve para un anciano o un enfermo terminal que morirán en la cárcel habiendo cumplido muy poco tiempo de condena, que para un joven con veinte años y una salud de hierro.

En la sociedad actual, las nuevas tecnologías de la información suponen novedades que deberían tenerse en cuenta a la hora de legislar, si queremos mantener lo más posible el principio de proporcionalidad. En el celebérrimo caso de la manada, los acusados fueron castigados con unos daños de cárcel supuestamente proporcionales al delito cometido. Independientemente con si esa sanción fue justa o no, los acusados fueron también sometidos a un linchamiento público por parte de los medios. Las redes sociales permitieron que sus fotos y datos biográficos fueran conocidos por todo el mundo, y que se hablara en el tono que se quisiera sobre ellos. Es decir, al clásico castigo carcelario se le añadió el nuevo castigo de vapuleamiento en la red que, muchos, podrían considerar incluso peor, o quizá más dañino a largo plazo, que el primero. En otros tiempos en los que no existían nuestros hipertrofiados medios de comunicación, un delincuente, una vez que pagaba su pena, podría empezar de nuevo sin que todo el mundo supiera de su turbio pasado, pero ahora eso es casi imposible. Entonces, cualquier juez robótico que se precie debería tener en cuenta dicho plus, quizá compensando al criminal con menos tiempo en prisión (si además del principio de proporcionalidad quiere mantener el principio de estabilidad). No deja de resultar chocante como hemos vuelto a formas de justicia medievales. Antes de la llegada del Estado Moderno, a los criminales se los linchaba públicamente, cuando no se los ahorcaba en la plaza del pueblo. Entonces, el nuevo contrato social estipuló que la capacidad de castigar delitos era una función exclusiva del Estado, evitando que nadie pudiera tomarse la justicia por su mano. Ahora, paradójicamente, volvemos a torturas medievales gracias a altas tecnologías.

Como vemos, crear un juez robot es algo muchísimo más completo de lo que hubiera soñado Leibniz, y aunque creo que es perfectamente posible, en contra de los que piensan que la justicia humana es algo irreductible a la automatización, no es algo que se vaya a conseguir en dos tardes. Impartir justicia es una tarea que requiere una muy profunda comprensión de la realidad de la que están lejos nuestra mejores inteligencias artificiales. Otra cosa, muy saludable, es que los jueces dispongan de software que le ayude en sus sentencias, como ya ocurre, no sin polémica eso sí, con el programa Compas en Estados Unidos.

Otro camino, que es el que se está usando ahora, es el de abandonar la programación simbólica y utilizar deep learning.  Así, se le da la base de datos a la red neuronal y se la va entrenando para que sus sentencias sean similares a las de los jueces profesionales. Aunque el porcentaje de aciertos suele ser muy alto, aquí nos encontramos con un gravísimo problema: la black box. Los algoritmos de deep learning no pueden explicar el porqué de sus resultados y eso, hablando de decidir sobre la condena de un ser humano, es inaceptable. No podemos tolerar de ningún modo que un software tome decisiones tan importantes sin que sepamos por qué lo ha hecho.  Hasta que tengamos una auténtica IA explicada, no podemos utilizar las redes neuronales para impartir justicia.