viernes, 20 de diciembre de 2024

Computación afectiva y voz: detección de estados anímicos en la cara y en la voz

Un campo de la computación, y muy especialmente de la que tiene que ver con la inteligencia artificial, que recibe gran interés, aunque al tiempo resulta polémico o desafiante desde el punto de vista ético y regulatorio, es la detección de emociones por las máquinas, por algoritmos y robots.


Computación afectiva


Aunque últimamente quizá no se utilice mucho este nombre, existe un subconjunto de la inteligencia artificial denominado computación afectiva ('affective computing') que se concentra en ello, una disciplina a la que hace un tiempo dediqué bastante espació en este blog a propósito de la lectura del libro 'The Oxford handbook for affective computing' y una disciplina que su creadora, Rosalind Pickard definía como 


computing that relates to, arises from, and deliberately influences emotion.


una definición compacta y clara y no exenta de ambición e incluso polémica puesto que declara la intención, no sólo de detectar emociones sino de, deliberadamente, influir en ellas.


Modelos de emociones. 


Una de las tareas de la computación afectiva es, claro, detectar las emociones de los humanos. Y el resultado de esa detección podría ser, simplemente, una etiqueta que clasifique la emoción. En esa labor es frecuente acudir al campo de la psicología para que nos defina y clasifique de alguna manera las emociones humanas.

Un muy famoso, aunque no completamente aceptado, modelo de emociones es el de las seis emociones básicas definidas por Paul Ekman, que identificaba seis emociones que, además, se daban en todas las culturas: alegría, ira, miedo, asco, sorpresa, tristeza.


Las seis emociones fundamentales de Ekman

Hay que decir que este modelo ha sido discutido y que el propio Ekman amplió este modelo para llegar hasta las quince emociones, en lugar de 6.


Detección visual de emociones 


No es del todo difícil imaginar cómo trabajar en la detección visual de emociones. Más o menos, la idea podría ser: partimos de un sensor (típicamente una webcam) que captura la imagen y se le da como entrada a un algoritmo (típicamente una red neuronal, probablemente con unas primeras capas de convolución para 'entender la imagen' y otras capas densas finales para realizar la clasificación con una función de actividad final de tipo softmax). A este algoritmo, evidentemente se le ha entrenado previamente, seguramente mediante aprendizaje supervisado, para que aprenda a hacer la clasificación.

El mismo Ekman planteó también otra forma de trabajar, no pensando en machine learning, pero sí orientada a la detección visual de las emociones, mediante el desarrollo de FACS ('Facial Action Coding System') en que se definen una serie de unidades de acción ('action units') que eran como elementos de la expresión facial anatómicamente observables y que luego se relacionan con emociones.


FACS y action units

Lo que no cabe duda es de que, con mayor o menor acierto, es viable la detección de emociones humanas mediante la expresión facial


Análisis de sentimiento


Pero hay otros mecanismos. Es muy conocido en el campo de la inteligencia artificial el denominado análisis de sentimiento ('sentiment analysis'), que trabaja con un texto (texto que lo puede haber tecleado un usuario, que puede proceder de un tuit, un correo electrónico, una noticia, un documento, o que puede provenir de la conversión a texto de lo dicho vocalmente por una persona) y se le asigna una etiqueta que representa la actitud del emisor/emisora de ese texto hacia lo que allí expresa.

Es una tarea propia del procesamiento de lenguaje natural y que da buenos resultados en el estado actual de la tecnología.


Detección acústica de emociones


Pero lo que, en el fondo, me ha animado a escribir este post es otra forma de detectar emociones humanas, en este caso, con base en la voz y las propiedades físicas del sonido emitido por el humano.

Se trata de una forma de trabajo que me encuentro descrito en el libro 'The Oxford Handbook of Computational Linguistics' editado por Ruslan Mitkov y, en concreto, en el capítulo 'Text-to.Speech synthesis' de Thierry Dutoit y Yannis Stylianou.

En este caso, se trabaja con el propio sonido, con la onda del sonido, no con el texto que se expresa, enlazando un poco, aunque creo que no exactamente, con la idea de la prosodia.

Se trata de la exposición de un trabajo ya antiguo, realizado por la propia Rosalind Pickard de la que hablábamos más arriba, y que relaciona las propiedades del sonido de la voz con las seis emociones de Ekman, que mencionábamos antes.

En la tabla se pueden observar esas correspondencias.



Como se puede ver en esa tabla, Pickard se fijaba en cuatro propiedades:

  • La velocidad del hablante, es decir la tasa a la que va emitiendo elementos léxicos

  • El tono ('pitch') es decir, si es más agudo o más grave, (medido a partir de la frecuencia fundamental del sonido de la voz) y del cual evalúa tanto su valor medio como el rango de tonos empleados.

  • La intensidad de la voz 


Aunque parece un estudio algo preliminar y no del todo operativo, da buenas pistas de cómo las propiedades físicas de la voz correlan con las emociones y estados anímicos.


Combinaciones


No me resulta difícil imaginar que un mecanismo avanzado de detección de emociones, como podría incluir un robot social avanzado, probablemente reuniría percepción multisensorial y ejecutaría un análisis multimodal que combinaría los elementos visuales, textuales, acústicos e incluso alguno más, para proporcionar un mecanismo de detección de emociones altamente sofisticado y efectivo.


Conclusiones


Por si alguien lo duda a estas alturas, las máquinas, combinando sensores y procesamiento mediante inteligencia artificial, están bien preparadas para detectar emociones en los humanos, unas emociones que pueden detectar, al menos, mediante la imagen facial, el texto expresado por la persona y, además, por el propio sonido de la voz.

lunes, 16 de diciembre de 2024

Notas sobre aprendizaje por refuerzo (XIII): sistemas multi-agente

Casi todo lo que he comentado en esta larga serie de artículos dedicados al aprendizaje por refuerzo ('reinforcement learning'), se refería a problemas o situaciones en que nos centrábamos en un único agente, del cual queríamos maximizar su política.

En el último post, introdujimos ya el caso de dos agentes.

En este artículo damos un paso más para abordar los escenarios o sistemas multi-agente.

Como en toda esta serie, me guiaré por las enseñanzas recogidas en el libro 'Deep reinforcement learning' de Aske Plaat y, como anuncié en el post anterior, en los últimos artículos de esta serie profundizaré poco en los algoritmos propiamente dichos, delineando sólo las ideas principales.

Vamos, allá, pues, con los sistemas multi-agente.


Recordatorio: lo que hemos visto de aprendizaje por refuerzo


Pero antes, y como en toda esta serie, recordemos brevemente lo que hemos visto hasta ahora.


Mientras nos mantuvimos, en los primeros posts, en el caso de sistemas mono-agente, nos ocupábamos de la situación de un agente que interactúa con un entorno que se encuentra en un estado s. Sobre ese entorno, el agente aplica unas acciones, a, como consecuencia de las cuales, el entorno puede experimentar una transición y cambiar de estado, pasando del estado s al s', y el agente recibe una recompensa r. El agente decide la acción a aplicar en cada momento, siguiendo una política π y su objetivo es maximizar la recompensa obtenida lo largo de una secuencia o trayectoria.

Los métodos más básicos, aquellos en que el espacio de estado es reducido, siguen un enfoque tabular, en que se tabulan, de ahí el nombre, los posibles estados y para ellos se calculan unas funciones que nos dan el valor, Q, de la recompensa esperada. Cuando la dimensión del espacio de estados es muy alta, como sucede habitualmente en problemas reales, dejan de tener sentido estos métodos tabulares así que renunciamos a representar la situación del entorno mediante su estado, y a cambio lo representamos mediante unas características ('features') y la obtención de valores o acciones vienen a ser unas funciones con base en esas características e implementadas mediante redes neuronales profundas, dando lugar al 'deep reinforcement learning'.

Cuando tratamos problemas ya no de alta dimensionalidad, sino continuos, como es la locomoción de robots, se adoptan los denominados métodos basados en políticas en que se prescinde de la visión de valores, y se trabaja directamente en optimizar las políticas, que pasan a considerarse como estocásticas, es decir, como distribuciones de probabilidad. 

También aparecía como opción el denominado aprendizaje basado en modelos ('model-based'), en que el agente primero consigue un modelo del entorno y luego ya prescinde del entorno propiamente dicho par a trabajar con ese modelo local durante todo el entrenamiento.

Y, en el último post, ya introdujimos brevemente las situaciones en que tenemos dos agentes, exactamente dos. Dos agentes que se encontraban en una situación competitiva, en uno de los denominados juegos de suma cero en que la ganancia de un agente supone la perdida del otro. En esa situación, una opción habitual es trabajar con el aprendizaje basado en modelos, dado que, para un agente, el entorno está constituido por el otro agente, y se adopta la hipótesis razonable de que su política, la del otro agente, es igual a la nuestra, por lo que modelamos el entorno con el modelo de nuestra propia política. 

Eso, además, conduce a la posibilidad del autoaprendizaje o auto-juego ('self-play'), en que un agente aprende jugando, en el fondo, contra sí mismo (contra otro agente con la misma política, en realidad).

Mediante los problemas mono-agente, se pueden tratar problemas como la locomoción de robots, la búsqueda de rutas o videojuegos. Y mediante los problemas de dos agentes, se ha conseguido tratar casos de juegos de mesa, por ejemplo. 


Sistemas multi-agente


Pues bien, ahora damos un nuevo salto de complejidad, abordando los escenarios o sistemas multi-agente, es decir, ya no nos limitamos a uno o dos agentes, sino que el número es mayor e indefinido.

Siendo un poquito formales, los problemas o sistemas multi-agente se podrían definir como problemas de decisión secuencial de múltiples agente autónomos que operan en un entorno estocástico compartido y donde cada uno de los agentes busca optimizar su recompensa a largo plazo mediante la interacción con el entorno y con los otros agentes.

El entrar en sistemas multi-agente, nos introduce además la idea de la colaboración entre agentes. En los casos mono-agente, no tiene sentido ni siquiera plantearlo y, en el caso de dos agentes, el foco ha estado en la competencia entre ellos, en los juegos de suma cero.

Sin embargo en los sistemas multi-agente una situación habitual es que los agentes colaboren para conseguir un objetivo común. Pero tampoco es extraño que los agentes compitan entre sí. Es decir, en los sistemas multi-agente, en general tenemos que contemplar tanto la competición como la colaboración.

Por eso, a la hora de trabajar con ellos, se suele dividir los problemas multi-agente en tres situaciones:


  • Comportamiento competitivo
  • Comportamiento cooperativo
  • Comportamiento mixto


Algunos retos de los sistemas multi-agente


Los sistemas multi-agente se enfrentan a varios retos. En concreto, en la obra citada, Plaat se concentra en tres:


  • Observabilidad parcial
  • Entornos no estacionarios
  • Espacios de estado grandes


El problema de la observabilidad parcial hace referencia que se trata de problemas en que no podemos suponer que el agente disponga de información perfecta sino que, bien al contrario, ésta es incompleta e imperfecta. Así, por ejemplo, un agente puede trabajar con información privada que no pone a disposición del resto de agentes, como se podría ejemplificar con las cartas propias de los jugadores de póker. Esto nos lleva a tener que considerar todos los posibles 'estados del mundo' lo que incrementa enormemente el número de variantes a considerar.

El problema de los entornos no estacionarios se refiere al hecho de que el entorno no permanece estable, dado que los agentes (que, en el fondo, forman parte del entorno para un agente dado) van mejorando sus propias políticas y, por tanto, el entorno para un agente dado, se modifica de manera continuada. De alguna forma, todos los agentes están aprendiendo de manera concurrente. El encontrarnos ante entornos no estacionarios hace que los agentes deban de tener en cuenta una suerte de espacio de acciones conjunto que, no sólo tenga en cuenta sus propias acciones, sino también las del resto de agentes. Esto, de nuevo, incrementa muchísimo, de manera exponencial, el espacio de acciones a considerar.

El tercer reto, espacio de estado grandes deriva, y en el fondo ya lo hemos mencionado, de que la presencia de múltiples agentes aumenta el espacio de acciones de manera exponencial con el número de agentes. De momento, la única forma de acometer estos grandes espacios de acciones es aplicando hipótesis simplificadoras pero realistas.


Aproximaciones


Plaat reconoce que este tipo de problemas no están realmente resueltos de manera general y que se encuentran fundamentalmente en investigación, pero menciona y describe algunos algoritmos o situaciones útiles como el CFR ('Counter Factual Regret minimization'), y su generalización a deep learning: Deep Counter Factual Regret Minimization con resultados interesantes para entornos competitivos.

También se explica la opción de, pese a estar hablando de agentes autónomos, centralizar el aprendizaje lo que, en el fondo, lo hace equivalente a un problema de un solo agente.

E igualmente explica estrategias en que se intenta reducir la complejidad, modelando el comportamiento del oponente basándose para ello en la teoría de la mente procedente del campo de la psicología.

Existen, asimismo, los algoritmos evolutivos (creo que otro nombre para o una derivada de los algoritmos genéticos) que se basan en los mecanismos propios de la biogenética: mutación, recombinación, y selección.

Finalmente, menciona los enfoques propios del 'swarm computing' (computación de enjambre) que se centra en los comportamientos emergentes que surgen en sistemas colectivos, descentralizados y auto-organizados.

No profundizaré más en los algoritmos aunque, especialmente el 'swarm computing' es muy de mi interés, y seguramente vuelva a él en otro momento ya fuera del ámbito del aprendizaje por refuerzo y pensando más en robótica..


Conclusiones


Un nuevo paso en el aprendizaje por refuerzo es el salto a los sistemas multi-agente donde, aparte de un entorno común, tenemos varios agentes autónomos, cada uno de los cuales desea optimizar su recompensa a largo plazo, y que interactúan entre si exhibiendo comportamientos tanto competitivos, como colaborativos o mixtos.

Aunque hay avances, se trata de un campo fundamentalmente en investigación.


Artículos de este blog relacionados


miércoles, 11 de diciembre de 2024

Tres formas de personalizar un LLM

Una de las 'magias' que ha traído consigo la inteligencia artificial generativa, que ya por sí misma parece pura magia si no fuera porque parece que ha hemos perdido un poco la capacidad de asombrarnos, son las posibilidades que ofrece de adaptar los modelos, personalizarlos para una dominio, unas circunstancias o incluso los gustos o características de una persona concreta.

En parte por eso, aunque no únicamente por eso, ha surgido el término de modelo fundacional para designar este tipo de modelos: porque sirven como base para muchos modelos y aplicaciones, extendiendo en cierto sentido, su propósito original.


Grandes modelos de lenguaje


Aunque existen muchos modelos generativos, y aunque la creciente multimodalidad y convergencia o concurrencia de modalidades y modelos al menos en las mismas soluciones tienden a desdibujarl las fronteras, me voy a centrar en este caso, 'sólo' en los grandes modelos de lenguaje, del tipo de los GPT.

Estos modelos, como muchos de los lectores de este blog probablemente conozcan, modelan el lenguaje humano y recogen, bajo una perspectiva esencialmente probabilista, la estructura de ese lenguaje tanto en sintaxis como en morfología. Asimilan, además, a partir del entrenamiento y sea dicho cono comillas "conocimiento" humano expresado en ese lenguaje y manifestado en webs, libros o la wikipedia. Y recogen, hasta cierto punto, unas ciertas nociones semánticas, no porque tengan ningún tipo de conocimiento real sobre significados pero sí porque, mediante los famosos 'embeddings' tienen conceptos bastante acertados de cercanía semántica de palabras.

Con eso, con el uso de mecanismos de atención que le permiten fijarse de manera selectiva en amplios contextos textuales, y con una atención autorregresiva, que permite que el modelo mantenga la coherencia cuando su respuesta se alarga, alcanzamos los espectaculares, por más que ya casi asimilados, resultados de este tipo de modelos, y que se hicieron célebres hace ya algo más de dos años, con el icónico lanzamiento de ChatGPT.


La adaptabilidad de los modelos generativos.


Pero una capacidad que, aunque no totalmente ausente en la inteligencia artificial discriminativa, se potencia, casi exacerba, en la generativa, y en concreto en los grandes modelos de lenguaje, es la posibilidad de personalizarlos y adaptarlos.

La mayoría de algoritmos en general, y de inteligencia artificial y machine learning en particular, 'son como son': una vez desarrollados y/o entrenados, así se quedan y se utilizan tal cual son. Sí que se contempla, por ejemplo para modelos analíticos, el reentrenamiento periódico para adaptarse a cambios en el entorno. Pero, aún así, se trata de una forma de adaptación, todavía un poco estática (a lo mejor se reentrena cada seis meses o un año) y no generalizada.

Es cierto también que, ya desde hace años, y como forma de intentar conseguir mayor eficiencia en los entrenamientos de los modelos y menor necesidad de datos, se lleva trabajando, y con éxito creciente, en mecanismos de 'transfer learning', es decir, en la reutilización un modelo ya entrenado y más o menos genérico, para, o bien adaptarlo mediante el 'fine tunning' al que luego nos referiremos, o bien reutilizarlo como una especie de 'backoffice' cuya salida servirá de entrada a otro modelo más especializado.

Pero creo, que esa capacidad de adaptación es mayor, y utilizando nuevos mecanismos, en el caso de los modelos generativos.


Tres mecanismos de adaptación 


En concreto, y no sé si me dejo alguno en el tintero, creo que no, hay como tres formas fundamentales de adaptar o personalizar un modelo generativo, de manera que resulte más adecuado o más especializado para un dominio o área de conocimiento concreto o, incluso, que responda mejor a las características e intereses del usuario final. Las tres formas serían las siguientes:


  • 'fine tunning': Es la traslación de algo que, como acabo de comentar, ya se hacía en la inteligencia artificial discriminativa. La idea es que, el entrenamiento 'más difícil', el inicial, y el que precisa de una cantidad enorme de datos, se realice una sola vez por parte de la entidad que crea el modelo. Eso es lo que se denomina pre-entrenamiento. Eso es lo que hace, por ejemplo, OpenAI con sus modelos GPT donde, por cierto, la 'P' del acrónimo representa, precisamente 'Pre-trained'. Y luego, cada organización, e incluso cada persona que desee adaptar el modelo, puede hacer un segundo entrenamiento, muchísimo más limitado en datos, con información del dominio específico. Esto es lo que se denomina 'fine tunning' y, aunque ya existía hace tiempo, quizá gana relevancia y visibilidad en el caso de los modelos generativos. Como ilustración de esa facilidad, y posibilidad incluso para organizaciones muy pequeñas, se puede ver la manera en que Open AI describe la forma de hacer 'fine tunning' con sus modelos. Este mecanismo es el único, de los tres que vamos a ver, en que realmente se modifica el modelo como tal, básicamente en sus parámetros internos. En el caso de los dos que siguen, se personaliza la respuesta, pero no el modelo propiamente dicho.

  • RAG ('Retrieval Augmented Generation') Este mecanismo está orientado a complementar al modelo con información nueva que, o bien se ha producido con posterioridad a su entrenamiento (pero que se puede obtener típicamente en la web a través de un buscador SEO 'de toda la vida', o bien es información propia, e incluso privada, de una organización o persona, información que puede residir en documentos, sistemas de información, etc. En este caso, más que re-entrenar el modelo, lo que se hace es darle mucho más contexto (contexto que procede del buscador o de la información privada) antes de que genere su respuesta. Este contexto 'se une' al prompt del usuario, formando una especie de 'macro-prompt', por decirlo de alguna manera, que es la entrada final al modelo generativo. Este mecanismo de RAG, cada vez 'más de moda', lo describí someramente en un post de hace unos días.

  • Contexto y 'feedback' del usuario: Finalmente, el mecanismo más sencillo, y en cierto modo más alucinante, es la personalización con base en la interacción con el propio usuario y su feedback. En el fondo, es muy parecido a RAG. Lo que se hace es que, junto con el prompt que introduce el usuario, el modelo recibe como entrada información adicional que procede de interacciones anteriores, incluyendo feedback del usuario. Al igual que en RAG, casi diría que de forma complementaria, ese contexto pasa a formar parte de esa especie de 'macr-oprompt' que mencionaba en el punto anterior.


En el libro 'Unlocking Data with Generative AI and RAG' de Keith Bourne, señala algunas fortalezas y debilidades de estos mecanismos. Así, nos dice que el 'fine tunning' funciona bien para complementar al modelo con nuevo conocimiento sobre, por ejemplo, la forma de hacer tareas especializadas, pero no tanto para que el modelo recoja información factual (datos, hechos relevantes, etc). Sin embargo, ahí, en la información factual, es donde destaca RAG.

Me resulta atractiva la metáfora o comparación que el autor utiliza, diciendo que el hacer 'fine tunning' es como utilizar o mejorar la memoria de largo plazo. Sin embargo, aportar contexto vía RAG o feedback del usuario es más como utilizar la memoria de corto plazo.

El autor apunta también que, RAG (y yo añado que la interacción con el usuario) se ve limitada por el tamaño de la ventana de contexto (expresado normalmente en número de tokens), cosa que no afecta al 'fine tunning' que, en cierto modo, admite una nueva información ilimitada.

Aunque quizá en esta tipología de formas de personalizar, pueda haber simplificado un poquito, y aunque me apuesto algo a que este es un tema que va a evolucionar, y rápidamente, creo que con lo expuesto, el lector que no lo conociera ya, puede hacerse una idea clara y esquemática sobre cómo conseguir la adaptación y personalización de los modelos generativos,


Conclusiones


Una de los aspectos, no exclusivos, pero sí bastante característico, de los modelos generativos, y en concreto los grandes modelos de lenguaje, es la posibilidad, relativamente sencilla, de adaptarlos o personalizarlos a tareas concretas, a dominios específicos o a las preferencias y gustos del usuario.

Aunque quizá simplificando un poco (no creo que mucho) existen básicamente tres formas de hacerlo: mediante 'fine tunning', mediante RAG y mediante interacción con el usuario.


lunes, 9 de diciembre de 2024

Notas sobre aprendizaje por refuerzo (XII): autoaprendizaje y el caso de AlphaGo y AlphaZero

En los últimos tres o cuatro posts de esta ya larga serie dedicada al aprendizaje por refuerzo ('reinforcement learning'), voy a ir algo más rápido, en el sentido de sobrevolar un poco más los temas (que son progresivamente más complejos) y quedarme con  las ideas y enunciados principales, en un nivel algo más divulgativo.

En el post de hoy hablo del caso de autoaprendizaje con dos agentes que, como el propio nombre indica, contiene dos elementos nuevos:

  • El hecho de considerar dos agentes, en lugar de uno sólo, como habíamos hecho hasta ahora
  • El introducir la idea de autoaprendizaje.

Además, esto permitirá saltar de unas ideas que pueden parecer teóricas, a una realización muy concreta y conocida: AlphaGo y su sucesor AlphaZero. 


Repaso: Lo que hemos visto de aprendizaje por refuerzo


Antes, y como siempre en esta serie de posts sobre aprendizaje por refuerzo, un resumen de lo que hemos hablado hasta ahora



Estamos, al menos hasta ahora, ante la situación de un agente que interactúa con un entorno que se encuentra en un estado s. Sobre ese entorno, el agente aplica unas acciones, a, como consecuencia de las cuales, el entorno puede experimentar una transición y cambiar de estado, pasando del estado s al s', y el agente recibe una recompensa r. El agente decide la acción a aplicar en cada momento, siguiendo una política π y su objetivo es maximizar la recompensa obtenida lo largo de una secuencia o trayectoria.

Los métodos más básicos, aquellos en que el espacio de estado es reducido, siguen un enfoque tabular, en que se tabulan, de ahí el nombre, los posibles estados y para ellos se calculan unas funciones que nos dan el valor, Q, de la recompensa esperada. Cuando la dimensión del espacio de estados es muy alta, como sucede habitualmente en problemas reales, dejan de tener sentido estos métodos tabulares así que renunciamos a representar la situación del entorno mediante su estado, y a cambio lo representamos mediante unas características ('features') y la obtención de valores o acciones vienen a ser unas funciones con base en esas características e implementadas mediante redes neuronales profundas, dando lugar al 'deep reinforcement learning'.

Cuando tratamos problemas ya no de alta dimensionalidad, sino continuos, como es la locomoción de robots, se adoptan los denominados métodos basados en políticas en que se prescinde de la visión de valores, y se trabaja directamente en optimizar las políticas, que pasan a considerarse como estocásticas, es decir, como distribuciones de probabilidad. 

Finalmente, en el último post, hablábamos del aprendizaje basado en modelos ('model-based'), en que el agente primero consigue un modelo del entorno y luego ya prescinde del entorno propiamente dicho par a trabajar con ese modelo local durante todo el entrenamiento.


La interacción de dos agentes


Ahora toca introducir varias novedades. La primera es que vamos a hablar de dos agentes en lugar de uno. Hasta ahora siempre habíamos considerado un agente interactuando con su entorno, pero ahora hablamos de dos agentes interaccionando entre sí.

En la referencia bibliográfica que ha guiado toda esta serie de posts, y que también lo hace con éste, el libro 'Deep reinforcement learning' de Aske Plaat, se nos indica que hay dos motivos que hacen interesante considerar este caso, a saber:


  • Que nos acerca a situaciones más realistas donde es habitual la existencia de varios agentes 
  • Que se han obtenido grandes éxitos en esta variante de aprendizaje por refuerzo, especialmente en el campo de los juegos.


Problemas de suma cero


Nos centramos además, en un tipo de problema muy común en el mundo de los juegos, que son los de suma cero, es decir, la ganancia de un agente supone en la misma medida la pérdida del otro.

Esto supone dos cosas: por un lado, que el entorno para un agente dado, es fundamentalmente el otro agente, y que este entorno es, por decirlo de alguna manera, hostil.

Si en los problemas que habíamos tratado hasta ahora, podíamos considerar al entrono 'neutral' (reacciona a las acciones del agente pero sin ningún 'propósito' ni de beneficiarle ni de perjudicarle) en los problemas de que hablamos ahora, el otro agente, que viene a ser el entorno, trabaja en contra del primer agente (y, as u vez, éste trabaja en contra del segundo agente, naturalmente. Por lo tanto, cuando un agente intenta aprender una política óptima, debe de tener en cuenta todos los posibles contraataques


Autoaprendizaje


Un enfoque para el aprendizaje por refuerzo en este caso es el denominado autoaprendizaje en el que sustituimos al entorno por una copia de nosotros mismos.

¿Qué quiere decir esto?

Nosotros somos uno de los agentes y nos comportamos racionalmente para intentar ganar el juego. Suponemos, evidentemente, que el otro agente es tan racional como nosotros y, por lo tanto, que podría actuar exactamente conforme a nuestra política. Por tanto, el otro agente, y por ende el entorno, tiene exactamente el mismo modelo que nosotros mismos.

Se trata, además, de un caso de aprendizaje basado en modelo, puesto que disponemos de un modelo del entorno.

En el autoaprendizaje se crea una suerte de círculo virtuoso en que usamos el entorno (que es una copia de nosotros mismos) para generar ejemplos de entrenamiento. Con esos ejemplos, mejoramos nuestro comportamiento, nuestra política, y también la del entorno, (que es una copia de nosotros mismos). Y así sucesivamente, tanto el agente como su entorno (que, ¿lo he dicho ya? es una copia de él mismo) van mejorando, y mejorando, y mejorando... sin ningún apoyo externo. Y así hasta la excelencia.

Se me ocurre decir, de mi cosecha, que es, además, una forma de aprendizaje muy económica y práctica, porque no necesitamos de ningún entorno del que aprender o del que obtener información mediante sensores o mecanismos similares.

Anotar finalmente que me estoy tomando la libertad de traducir como 'autoaprendizaje' lo que en realidad sería auto-juego ('self-play') o juego con uno mismo. Me ha parecido que como autoaprendizaje transmitía mejor la idea.


Algunos algoritmos


Como decía al inicio del post, no voy a profundizar en detalles algorítmicos, pero para beneficio del lector más avanzado, y por si 'quiere tirar del hilo' menciono los algoritmos que aparecen en el libro de Plaat.

El autor nos habla de MCTS ('MonteCarlo Tree Search') que es un algoritmo de búsqueda en un árbol o Alpha Zero tabula rasa


AlphaGo y AlphaZero.


Como no es difícil de imaginar, este tipo de aprendizaje se adapta de manera excelente al caso de juegos con dos jugadores y reglas muy claras.

Y, en efecto, se ha utilizado, por ejemplo, para jugar al ajedrez o el mucho más complicado juego del Go, dos juegos, tanto el ajedrez como el Go que, aunque complejos, se pueden considerar de información perfecta, en el sentido de que los dos agentes tienen una información completa y precisa de la situación del juego en cada momento.

En este campo del Go son casi míticos los sistemas AlphaGo y AlphaZero, siendo el primero el que batió a Lee Sedol en el legendario encuentro de Mayo de 2016.

AlphaGo, combinaba un aprendizaje supervisado con base en información de jugadores expertos con autoaprendizaje, usando tanto MCTS y autoaprendizaje. Su evolución AlphaGo Zero ya utilizaba únicamente autoaprendizaje mediante AlphaZero tabula rasa. Finalmente, AlphaZero, es una generalización del anterior válido para otros juegos. 


Conclusiones


Aunque superficialmente, hemos visto cómo se extiende el modelo de aprendizaje por refuerzo al caso de dos agentes, y también hemos conocido algunas ideas sobre el autoaprendizaje, que ha concluido a éxitos tan sonoros de la inteligencia artificial como la consecución de AlphaGo y su sucesor AlphaZero.


Artículos de este blog relacionados



miércoles, 27 de noviembre de 2024

Algunas ideas iniciales sobre RAG (Retrieval Augmented Generation)

Uno de los conceptos que forman parte del 'último grito' en inteligencia artificial y, en concreto, en inteligencia artificial generativa, es el de RAG ('Retrieval-Augmented Generation') y, en el deseo de profundizar en su conocimiento, hace dos o tres semanas finalicé la lectura del libro 'Unlocking Data with Generative AI and RAG' de Keith Bourne, un libro que esta razonablemente bien tanto desde el punto de vista teórico como práctico.

En este post, y a despecho de que en el futuro pueda escribir otros sobre el tema, quisiera, únicamente, resumir las ideas principales y más básicas sobre RAG.


Sobre el conocimiento contenido en grandes modelos de lenguaje


RAG ('Retrieval Augmented Generation') es una forma de extender el poder de los grandes modelos de lenguaje y los modelos generativos añadiéndoles información externa adicional.

Como sabemos, los grandes modelos de lenguaje han sido entrenados con cantidades ingentes de datos. Datos procedentes, y esto no está exento de polémica y problemáticas de propiedad intelectual, de páginas web, libros, wikipedia, etc. Más allá de las eventuales polémicas, lo que se consigue es, tras un entrenamiento masivo, disponer de ese modelo de lenguaje.

Embebido en el modelo se encuentra, por un lado, una suerte de conocimiento estructural del lenguaje humano, su sintaxis y morfología así como una aproximación a la semántica, no porque el modelo sepa realmente lo que significa cada palabra, que no lo sabe, sino porque guarda información masiva de la cercanía semántica de las palabras.

De una forma también indirecta, pero muy real desde el punto de vista práctico, el modelo almacena. codificado en sus millones de parámetros, alguna forma de amplísimo conocimiento del mundo, el conocimiento que estaba incluido en las páginas, libros y demás documentos con que fue entrenado. De nuevo, no se trata de un conocimiento estricto: el modelo saber, saber, lo que se dice saber, no sabe nada. Tampoco se trata una representación del conocimiento como se hacía en los años de la inteligencia artificial simbólica. Pero, a efectos prácticos, sí que incluye ese conocimiento.

Una vez que el modelo ha sido pre-entrenado, cosa que han hecho los grandes de la inteligencia artificial generativa como OpenAI, el modelo conoce suficientemente esa estructura del lenguaje humano y con eso nos basta. También, hasta cierto punto, podemos dar por bueno el conocimiento semántico que incluye el modelo.

Otras cosa sucede, sin embargo, con el conocimiento del mundo que en el fondo, aunque amplio, es limitado. Y ello por tres motivos fundamentales. 

Por un lado, porque aunque el modelo ha sido entrenado con cantidades ingentes de información, esa información no ha incluido, lógicamente, absolutamente toda la información existente en el mundo sino un subconjunto de ella. Del resto, el modelo no tiene más idea que la que, entre comillas, "pueda deducir".  

En segundo lugar, evidentemente, la información crece de manera dinámica: se producen eventos y noticias nuevos, se publican contenidos nuevos, se producen avances en todo tipo de disciplinas. Y eso es una gran cantidad de información nueva que el modelo ignora.

Finalmente, existe información que no es pública, información privada que manejan las personas y, sobre todo, las empresas. Y eso tampoco ha formado parte del conocimiento del modelo.

RAG es una técnica que viene para superar esas 'ausencias de conocimiento' dentro de un gran modelo de lenguaje y complementar el conocimiento que ya tiene el modelo con conocimiento nuevo, pero haciendo uso del conocimiento y capacidades de que ya dispone el modelo de lenguaje generativo.

Antes de ver un poco más sobre RAG, decir que no es RAG la única forma de personalizar o extender un gran modelo de lenguaje.

Se puede aplicar el 'fine-tunning' haciendo un re-entrenamiento del modelo con nuevos datos normalmente específicos de un área de conocimiento, sector o empresa, y habitualmente mediante aprendizaje supervisado.

Incluso, durante la interacción con el modelo, mediante un uso inteligente del 'prompt engineering' se puede aportar cierta información adicional, tanto por el contexto del diálogo, como por el uso de ejemplos, conocimiento explícito, etc-


La idea subyacente a RAG


Dicho de manera muy sencilla (a lo mejor en algún otro post me extiendo algo más sobre el cómo), lo que hace RAG es aumentar el conocimiento de un modelo con información adicional, con frecuencia procedente de un buscador de Internet SEO o mediante la compilación de conocimiento contenido en documentos o sistemas de información privados de una empresa u organización.

No entraré en ello, pero en el procesamiento de lenguaje natural las palabras, o mejor dicho los 'tokens' se representan mediante vectores (los famosos 'embeddings'). Pues bien, lo habitual es que RAG convierta también en vectores el conocimiento adicional. El modelo de lenguaje, cuando recibe un 'prompt', antes de procesarlo, lo incrementa con información adicional obtenida mediante la denominada búsqueda semántica en un repositorio vectorial que contiene el 'conocimiento extra'.

En la entrada del modelo de lenguaje se integra toda la información, tanto del prompt y su contexto, como la obtenida mediante búsqueda semántica en la base de conocimiento vectorial adicional. Y, a partir de ahí, ya actúa como normalmente, generando su respuesta. 


Aportaciones de RAG


Siguiendo el discurso de Keith Bourne, en el libro citado, lo que aporta RAG es:


  • Mayor precisión y relevancia: Al incorporar información actualizada y normalmente en tiempo real se promueve la actualidad y relevancia de la respuesta.

  • Personalización: Dado que se puede hacer al modelo usar información muy específica y adaptada al ámbito de aplicación que nos interese.

  • Flexibilidad: En el sentido de que se pueden aplicar las técnicas RAG a todo tipo de fuentes incluyendo bases de datos, páginas web, documentos, etc

  • Expansión del conocimiento del modelo más allá de los datos de entrenamiento: Casi por la propia definición de lo que es RAG, aumentamos el conocimiento del modelo con aquello específico que le aportamos.

  • Eliminación de alucinaciones: La aportación de información relevante, especialmente de tipo factual, disminuye la probabilidad de que el modelo genere 'alucinaciones', es decir, respuestas incorrectas o incluso absurdas pero presentadas de manera convincente.


Retos de RAG


A cambio, y siguiendo la misma fuente, las problemáticas o retos a que se enfrenta RAG, son:


  • Dependencia de la calidad de datos: Resulta evidente, pero conviene explicitarlo: si la calidad de la información que le aportamos al modelo mediante RAG es mala, los resultados también lo serán.

  • Necesidad de limpieza y manipulación de datos: Un poco en línea con lo anterior, de cara a garantizar la calidad por un lado, y una mejor ingesta por otro, suele ser necesaria una manipulación y limpieza previa de los datos a usar en RAG, y esto puede ser una tarea laboriosa. Llamo la atención sobre que este punto y el anterior son absolutamente comunes para gran parte de las soluciones de machine learning basadas en datos, como por ejemplo, todo tipo de aplicaciones de analítica predictiva.

  • Computación adicional: RAG añade pasos adicionales, y eso tiene un coste computacional que puede llegar a penalizar las prestaciones o escalabilidad de la solución.

  • Explosión de almacenamiento y gestión asociada: En RAG la información adicional que se utiliza, puede residir en fuentes múltiples y no solo en una base de datos como en muchas aplicaciones tradicionales. Esto puede suponer una sobrecarga de mantenimiento y gestión.

  • Potencial sobrecarga de información: Se puede caer, en el extremo, en un exceso de información adicional, quizá no relevante, por lo que conviene permanecer vigilantes y añadir mediante RAG sólo la información realmente útil.

  • Alucinaciones: Aunque RAG tiende a eliminar alucinaciones, como hemos comentado entre las ventajas, no es imposible que introduzca alucinaciones nuevas. Es preciso vigilar para identificar y eliminar estas alucinaciones.

  • Altos niveles de complejidad en componentes RAG: las soluciones RAG pueden incluir diversos componentes, complejos de por sí e interrelacionados. Esto implica gestión y, sobre todo, prueba y depuración.

Conclusiones


RAG ('Retrieval-Augmened Generation') es una gran aportación de cara a la extensión y personalización de las soluciones basadas en modelos generativos, típicamente grandes modelos de lenguaje.

Trae consigo nuevas posibilidades y muchas ventajas, pero también incluye algunas problemáticas y riesgos a conocer y gestionar.


lunes, 25 de noviembre de 2024

Notas sobre aprendizaje por refuerzo (XI): métodos basados en modelo

Damos un nuevo paso en estas notas sobre aprendizaje por refuerzo siguiendo, como en toda esta ya larga serie, el libro 'Deep reinforcement learning' de Aske Plaat.

A partir de ahora, eso sí, iré un poco más rápido, sobrevolando más los temas para no complicar demasiado los artículos y no alargar en exceso esta serie, que ya debería irse acernado a su fin.

En este artículo, en concreto, comentaré las ideas principales de una forma de aprendizaje que se centra en el modelo de transiciones del entorno.

Pero antes, y como ya viene siendo habitual, repasemos lo principal que hemos visto hasta ahora


Recordatorio: resumen lo que hemos visto de aprendizaje por refuerzo


Recordamos el esquema que tantas veces hemos venido repitiendo:


Estamos ante la situación de un agente que interactúa con un entorno, un entorno que se encuentra en un estado s. Sobre ese entorno, el agente aplica unas acciones, a, como consecuencia de las cuales, el entorno puede experimentar una transición y cambiar de estado, pasando del estado s al s', y el agente recibe una recompensa r. El agente decide la acción a aplicar en cada momento, siguiendo una política π y su objetivo es maximizar la recompensa obtenida, no tanto en una única interacción, como siguiendo una secuencia o trayectoria.

Los métodos más básicos, aquellos en que el espacio de estado es reducido, siguen un enfoque tabular, en que se tabulan, de ahí el nombre, los posibles estados y para ellos se calculan unas funciones que nos dan el valor, Q, de la recompensa esperada.

Cuando la dimensión del espacio de estados es muy alta, como sucede habitualmente en problemas reales, dejan de tener sentido estos métodos tabulares así que renunciamos a representar la situación del entorno mediante su estado, y a cambio lo representamos mediante unas características ('features') y la obtención de valores o acciones vienen a ser unas funciones con base en esas características e implementadas mediante redes neuronales profundas, dando lugar al 'deep reinforcement learning'.

Cuando tratamos problemas ya no de alta dimensionalidad, sino continuos, como es la locomoción de robots, se adoptan los denominados métodos basados en políticas en que se prescinde de la visión de valores, y se trabaja directamente en optimizar las políticas, que pasan a considerarse como estocásticas, es decir, como distribuciones de probabilidad.


La idea del aprendizaje basado en modelos


Los modelos vistos hasta ahora eran lo que se denomina 'model-free', o sin modelo, en el sentido que el agente busca optimizar la política π pero lo hace directamente, sin 'intentar entender', por decirlo de alguna manera, cómo funciona el entorno con el que interactúa, sólo basándose en el 'feedback' que recibe de ese entorno en forma de recompensas.

Ese 'entender' se referiría a estimar y construir un modelo de las transiciones (T) del entorno

La forma de actuar sin modelo, como hemos visto hasta ahora, tiende a conducir en la práctica a un  entrenamiento lento y que puede precisar de millones de muestras para converger. 

Por ello surgen los métodos basados en modelos ('model-based').

En estos métodos, el agente primero construye localmente, y a partir del feedback referido del entorno, un modelo sobre el entorno, un modelo de transiciones del entorno. Y, una vez que ya tiene ese modelo, puede, con él, estimar la consecuencia que tendrían sus acciones y las recompensas que obtendría. Sería algo así como hacer juegos del tipo 'que pasa si' ('what-if') y, en función de los resultados, actualizar su política.

A esa generación o actualización de políticas, con base en el modelo local del entorno, es a lo que se llama planificación o 'imaginación'. Me permito solicitar al lector que se fije en lo que realmente hablamos al hablar de imaginación en estas situaciones, para evitar fantasías sobre las capacidades de la inteligencia artificial.

Como se puede ver, este tipo de métodos actualizan la política de una forma indirecta: primero aprenden un modelo local del entorno, a partir de la interacción con ese entorno, y luego usan ese modelo del entrono para actualizar la política, que es el objetivo final.

Como una forma sencilla de recordar la diferencia entre los métodos sin modelo y los basados en modelo, podríamos guardar esta frase de Plaat


Model-free teaches you how to best respond to actions in your world, and model-based helps you to understand your world.


Actuar como lo hacemos en los métodos con modelo, tiene dos consecuencias, una positiva y una negativa. La consecuencia positiva es que, una vez que el agente ha construido el modelo local del entorno, ya no necesita interactuar más con él para optimizar su política, sino que lo hace 'de gratis', por decirlo de alguna manera, exhibiendo, pues, menor complejidad en el muestreo. A cambio, y como riesgo, o como consecuencia negativa, pueden conducir a baja precisión en el modelo del entorno y, en consecuencia, a una política de baja calidad.

Algunos métodos basados en modelo, que se mencionan en la obra citada, son el Dyna-Q,  redes de predicción de valores ('value prediction networks') y redes de iteración de valores ('value iteration networks').


Conclusiones


Cuando supone un problema el tener que tomar demasiadas muestras del entorno, o cuando es un inconveniente serio la velocidad de convergencia, una alternativa son los métodos basados en modelo en que el agente primero construye un modelo local del funcionamiento del entorno (sus transiciones) y, a partir de ahí, interactuando con ese entorno local, en lugar de hacerlo con el real, optimiza su política.


Artículos de este blog relacionados



jueves, 21 de noviembre de 2024

Patrones subyacentes metodológicos y analíticos. El uso consciente de las herramientas y modelos

Después de bastante tiempo publicando artículos que, con alguna excepción en forma de reseña de libros, tenían que ver con la inteligencia artificial y/o la robótica, hoy voy a cambiar momentánea y brevemente de tercio para hablar de análisis, metodología y rigor.

Habitualmente veo, incluso en entornos académicos, usos o entendimientos incorrectos de herramientas, metodologías o enfoques de trabajo de naturalezas diversas pero que, de una forma u otra, caen dentro del ámbito de la gestión empresarial.

Me refiero a conceptos o herramientas como un simple DAFO, o un modelo de negocio o enfoques como 'agile' o 'design thning'.

Términos que tienen en común haber hecho fortuna en el mundo empresarial, enseñarse con frecuencia en el ámbito universitario o de posgrado, y estar muy presentes en medios más o menos especializados (en este caso a lo mejor habría que enfatizar lo del 'más o menos'). Y, como ya he comentado en algún otro post y a propósito de algún tema diferente, esa popularidad tiene una doble cara o es un arma de doble filo. Por un lado es bueno, ayuda a que se propague y se aplique, y por otro lado es malo, porque favorece el uso frívolo y descuidado del término, la herramienta o la metodología.

A mi, que valoro el conocimiento y el rigor y que me he preocupado de autoformarme en todos esas herramientas y enfoques que menciono, debo confesar que me enerva un tanto ese constante empleo frívolo, superficial e incluso ignorante de esos  nombres, herramientas y métodos.

Pero ayer vino a mi mente una reflexión algo más positiva, que me pareció interesante y que motiva este post.

El caso es que tuve ocasión de leer un uso, para mí algo 'cogido por los pelos' del término design thinking. Y pensando el porqué de ese uso, se me ocurrió una explicación diferente, y algo más positiva que la pura ignorancia y superficialidad.


Metodologías y patrones


Esa reflexión me lleva a distinguir, en cada enfoque metodológico o herramienta de trabajo, dos niveles.



Por un lado está lo que es la herramienta o metodología propiamente dicha, la que alumbraron sus creadores, generalmente conocidos gurús de la gestión, la que está bien analizada, documentada, explicada y a la que debemos referirnos para un discurso y una práctica rigurosos. A este nivel, y aunque el término quizá resulte algo aburrido y 'viejuno', lo voy a denominar metodología, ya que no se me ocurre un término más atractivo y moderno.

Pero por debajo de la metodología rigurosa, hay una serie de fundamentos, principios básicos o patrones de comportamiento, más difusos quizá, más laxos e indefinidos quizá, pero también más generales y que permiten su aplicación en entornos diferentes de aquellos para los que fue pensada la metodología inicialmente. Éstos serían los patrones subyacentes.

Lo que creo que sucede es que, en muchos casos, las personas no bien formadas, no bien advertidas, pero que 'han oído campanas', se quedan con dos cosas: por un lado, el nombre 'oficial' de la metodología, que en realidad se refiere al nivel superior y, por otro, a los patrones o principios básicos, que son el nivel inferior pero más general.

Y luego aplican los principios básicos, pero dándoles el nombre de la metodología.

Y así, se habla de un DAFO (cuando realmente no es un verdadero DAFO pero sí usa sus principios, sus patrones) o de un design thinking que, realmente, no es un 'design thinking pero que emplea sus principios y patrones.

Por si dicho así suena muy abstracto, lo concreto en cuatro herramientas o enfoques metodológicos muy populares y con frecuencia mal usados.


Análisis estratégico: el DAFO


Metodología


El DAFO es una muy bien conocida herramienta de análisis estratégico. El DAFO, como metodología (nivel superior), se aplica a una empresa u organización y adopta dos visiones: una externa (Amenazas y Oportunidades) en que se mira al mercado y al contexto, y otra interna (Fortalezas y Debilidades) en que se analiza la situación y competencias de la propia organización. Tanto para el análisis interno, como para el externo, se mira tanto lo bueno (Oportunidades y Fortalezas) como lo malo (Amenazas y Debilidades).

Hecho este análisis estratégico, la empresa puede identificar sus opciones estratégicas y elegir, con cierto conocimiento de causa, la mejor

Así concebida es, como digo, una herramienta de análisis estratégico y aplicada a una empresa o una organización

Sin embargo, la veo con frecuencia aplicada a un proyecto concreto, incluso de no mucho alcance, dentro de una organización. Estrictamente hablando, eso es incorrecto


Patrones subyacentes


Los patrones subyacentes al DAFO son esa doble mirada interna y externa, por un lado, y la otra doble mirada: positivo-negativo.

Y así considerado, en realidad, podríamos aplicarlo a otros muchos ámbitos. Por ejemplo, se habla en ciertos entornos, de un DAFO personal, y creo que ahí, si sabemos bien lo que estamos haciendo, podría llegar a tener bastante sentido. Me encaja menos aplicarlo a lo que he dicho más arriba, proyectos, pero, de nuevo, sabiendo lo que se hace, podría llegar a ser admisible.

Probablemente el DAFO sea una de las herramientas más sencillas y flexibles, con unas patrones más claros y que la habilitan con más facilidad que otras a aplicarla fuera de su verdadero entorno que recuerdo, de nuevo, que es el análisis estratégico.


Modelo de negocio: el Business Model Canvas


Metodología


El Business Model Canvas es una herramienta omnipresente en la literatura actual de gestión empresarial y, especialmente, de innovación y emprendimiento. Se trata de una herramienta para describir un modelo de negocio y, con base en esa descripción, poder adoptar posibles decisiones sobre el mismo. Ese es su objeto, aunque parece también muy ligado al emprendimiento y la innovación, precisamente porque, y tal y como definen reputados autores, una startup lo que está buscando es un modelo de negocio rentable y sostenible y, por tanto, necesita describir y analizar ese modelo de negocio y trabajar sobre él.

Pero he visto usar también el Busines Model Canvas para un proyecto, un simple proyecto, ni siquiera especialmente transformador, en una empresa establecida con un modelo de negocio establecido... y que el proyecto no va a modificar. Y eso no es muy correcto.


Patrones subyacentes


El Busines Model Canvas tiene unos patrones menos claros y externalizables que el DAFO, pero podríamos identificar la necesidad de una triple mirada: por un lado hacia el mercado (clientes, proposición de valor, canales y relaciones), por otro hacia la parte operativa (actividades, recursos y socios) y finalmente hacia la económica (flujos de ingresos y estructura de costes).

Y, quizá, podríamos decir que los propios cuadrantes que hay dentro de cada una de esas miradas, nos confecciona una especie de checklist de cosas a tener claras en una organización.

El Business Model Canvas es una herramienta muy popular y muy útil, pero que creo que no se extiende fácilmente fuera de su entorno natural que es el modelo de negocio de una empresa, o de una unidad de negocio dentro de ella o incluso de una línea de productos dentro de ella.

Si lo aplicas a un proyecto, creo que solo podría tener sentido en proyectos más o menos ambiciosos y transformadores y no tanto por el proyecto propiamente ducho sino para saber cómo el modelo de negocio condiciona al proyecto o cómo, caso de ser realmente transformador, el proyecto impacta en el modelo de negocio.


Dirección de proyectos: Agile


Metodología


Quizá uno de los términos más usados, y con frecuencia de manera incorrecta o con una valoración incorrecta, es el de 'agile'. Aunque a los fanáticos del agilismo les repele que se le denomine 'metodología' y prefieren hablar de 'framework', creo que aquí opto denominarla metodología, siguiendo los dos niveles explicados más arriba y, en concreto, del ámbito de la dirección de proyectos. Una metodología surgida en el mundo del desarrollo software, aunque luego ha hecho fortuna yendo más allá y aplicándose a otros muchos tipos de proyectos e impregnando metodologías de innovación y emprendimiento como 'lean startup'.

Aunque como metodología, en efecto, agile es 'laxa', los enfoques agile como scrum definen sus roles, sus herramientas, sus ceremonias...

La verdad es que creo que en el caso de 'agile', su mal uso se debe casi siempre a superficialidad y a ignorancia de todos esos detalles, pero de todas formas, creo que exhibe patrones muy claros,  muy útiles y muy exportables más allá de su ámbito natural.


Patrones subyacentes


El patrón más claro, y en el fondo definitorio, es el de el crecimiento iterativo y adaptativo, crecimiento y adaptación tanto en la definición del propio alcance del proyecto como en el desarrollo y entregables del mismo. Y un crecimiento y adaptación que, un poco, se mueven por una especie de ensayo y error, especialmente cuando trasciende el mundo del software y se centran en innovación.

Esa visión adaptativa e iterativa es la que lo convierte en tan útil para salir del mundo de los proyectos de software e ir hacia otro tipo de proyectos. Y, ese movimiento de ensayo y error, lo prepara bien para la innovación, como hemos dicho.


Productos y soluciones: desing thinking


Metodología


Quizá como metodología, el design thinking sea en sí misma la más difusa, a veces más una filosofía que una metodología y la que, de forma natural, tiende más a sus principios y patrones que a un enfoque cerrado.

De todas formas, y aunque muchos de los propios gurús del design thinking parecen derivar y ampliar sus fronteras, su ámbito principal es del diseño de productos y servicios, o soluciones en general, con una visión amplia, que conecta con el cliente y usuario finales, y que también propotipa y prueba, avanzando de forma iterativa.


Patrones subyacentes


Dentro de los patrones del design thinking se encuentran también la iteración y la adaptación, pero quizá refuerza más que agile, elementos como la creatividad, la empatía con y observación del usuario / cliente así como el prototipado

La cercanía al usuario final, la empatía y el prototipado son útiles en muchos problemas complejos o sin roadmap de resolución claro, y eso lleva a posibilidades de uso fuera del ámbito de los productos, servicios y soluciones.


Sobre el conocimiento y el rigor


Hecho el razonamiento anterior y ejemplificado en los casos que con más frecuencia me encuentro, tiendo a adoptar una visión un poco más optimista de cómo son usadas estas herramientas y metodologías.

No digo que no exista desconocimiento y superficialidad, que existen y bastante, y no digo que no exista un cierto 'postureo', que también existe y probablemente bastante, pero al menos me queda la expectativa de que, aunque seguramente bajo un nombre incorrecto, al menos se estén aplicando unos principios y patrones que sí pueden ser correctos y útiles. 

Dicho lo cual, a pesar de todo, reclamo, aunque sé que en vano, la profundización en el conocimiento real de las herramientas y tecnologías y que se usen por su nombre cuando realmente se está aplicando esa herramienta o metodología.

Y defiendo y abogo también, cuando tenga sentido, se apliquen sólo algunos de sus patrones y principios pero, cuando eso suceda, sea mediante una identificación y selección consciente de esos patrones y sin aplicarles un nombre que no les corresponde.

Esa es mi propuesta y ese es mi deseo. La propuesta aquí está. El deseo, creo que ni el genio de la lámpara me lo va a conceder :).


Conclusiones


Por debajo de las herramientas y metodologías más populares de análisis y gestión empresariales, subyacen unos principios y patrones básicos. 

La confluencia, por el lado negativo, de una cierta ignorancia y superficialidad en muchos adoptantes, y en el lado positivo, de unos patrones y principios básicos de utilidad mucho más general, hace que con frecuencia se apliquen  fuera del ámbito que les es propio y con un nombre que sería incorrecto.

Sin embargo, si reforzásemos el conocimiento y consciencia tanto de metodologías como de patrones, podríamos aplicar con mucho provecho los segundos, sin adjudicarles el nombre las primeras. 


miércoles, 13 de noviembre de 2024

Notas sobre aprendizaje por refuerzo (X): locomoción de robots

Como ya comentamos en un artículo anterior, uno de los posibles usos de los modelos de aprendizaje por refuerzo especialmente en el caso de los problemas continuos y basados en políticas, es el de la locomoción de robots, un tema que me interesa particularmente y que puede experimentar una mayor atención en un futuro inmediato dado el interés que, al menos desde el punto de vista mediático, despiertan los robots humanoides.

En este post, y basándome como siempre en esta serie en los contenidos del libro 'Deep reinforcement learning' de Aske Plaat, voy a hablar brevemente de esa locomoción de robots.

Un muy breve repaso


En toda esta serie de posts, realizo al principio un repaso de lo ya visto, pero en este caso va a ser muy breve, ya que no resulta muy necesario para lo que sigue.




Sólo recordar que en aprendizaje por refuerzo nos encontramos en la situación en que un agente (que en este caso va a ser un robot) va a interactuar con un entorno (real o simulado). Al aplicar acciones sobre ese entorno, puede generar cambios de estado en el mismo y, cuando se producen, el agente recibe una recompensa.

Las acciones se deciden mediante una política que es lo que, en el fondo, queremos aprender, de forma que maximicemos la recompensa acumulada.

En problemas de alta dimensionalidad de estados se aplica deep learning dando lugar al 'deep reinforcement learning'

Nos encontramos ahora en el punto en que el espacio de estados realmente es continuo y por tanto, más que trabajar, como en otros casos, con base en los valores de los diferentes estados, lo que hacemos es intentar aprender la política directamente.

Y uno de los campos de aplicación, es este de la locomoción de robots.

La locomoción de robots


La locomoción de robots se refiere al movimiento de robots autónomos, y cobra especial relevancia en el caso de robots cuyo movimiento no se apoya en ruedas sino en alguna forma de patas como los robots humanoides (dos piernas) o los 'robots perro' (cuatro patas) u otro tipo de robots con varias patas que semejan más alguna forma de insecto o crustáceo.

A los seres con patas naturales, básicamente animales, esas patas o piernas nos permiten desplazarnos (andar) pero también trotar, correr, saltar, subir escaleras, etc. En general, y aunque algunos robots como los de Boston Dynamics, muestran unas capacidades de movimiento extraordinarias, cuando trabajamos con robots, especialmente cuando investigamos, en este caso en el ámbito de aprendizaje por refuerzo, tendemos a simplificar las exigencias. 

Así se trabaja (más a nivel de investigación y simulación que de aplicación real) en robots de una sola pierna capaces de saltar, robots bípedos (típicamente humanoides) capaces de andar y saltar, y robots cuadrúpedos capaces de coordinar sus patas para moverse.

El aprendizaje de las políticas necesarias para esa locomoción ha demostrado ser computacionalmente muy intensivo, por lo que se han buscado simplificaciones y simulaciones.

En la obra citada se menciona, por ejemplo, el entorno Gym Mujoco, hoy en día trasladado a Gimnasium y la utilidad que ha demostrado, por ejemplo, el modelo del 'medio guepardo' ('Half cheetah').




En ese mismo entorno, desarrolladores e investigadores pueden trabajar también con otros modelos como, por ejemplo, el humanoide.



En algunos de estos estudios se ha acudido a esquemas simples, pero por ello exigentes, como recompensar de forma positiva al robot sólo por moverse hacia adelante y sólo con eso el robot (simulado) debe aprender a controlar todas sus articulaciones por mero ensayo y error (como en el fondo se aprende un poco siempre en aprendizaje supervisado).

Los resultados se pueden ver en el siguiente vídeo:




Aunque no lo hemos explicado en esta serie de posts, y sólo a efectos de referencia para el lector avanzado, en estos trabajos se han utilizados algoritmos 'advantage actor critic' con regiones de confianza ('trust regions').

En la referencia que seguimos, se menciona algún otro trabajo exitoso usando algoritmos PPO distribuidos.

Interacción visuo-motora


Otro campo de aplicación del aprendizaje por refuerzo dentro de la robótica es en la coordinación visuo-motora, es decir, en la coordinación entre  lo que 'el robot ve' y los movimientos que ejecuta en consecuencia, lo que en seres humanos podría ser la coordinación ojo-mano.

Esto supone un paso hacia la realidad de las soluciones. En muchas simulaciones las entradas del robot son características proporcionadas por el propio entorno de simulación pero ahora añadimos cámaras que proporcionan imagen real y el robot debe aprender a partir de las imágenes que proporciona esa cámara, y a partir de ahí inferir cómo debe mover sus articulaciones.

Se trata ya de un problema muy complejo (quizá porque ya es muy cercano a la realidad) pero en el libro se menciona algún éxito usando la suite de control de DeepMind.

Conclusiones


Con los modelos para espacios continuos hemos alcanzado un campo de aplicación enormemente interesante y prometedor y que es muy de mi interés personal: el de la locomoción de robots.

Todavía se trabaja en muchos casos experimentando en entornos simulados, pero parece que los resultados que se obtienen, así como las demostraciones hechas por algunos fabricantes de robots avanzados, permiten abrigar expectativas de buenos avances y resultados.

Artículos de este blog relacionados