19 mayo 2021

Machine learning para dummies

Hace tiempo que no escribo nada sobre tecnología, así es que aprovecharé para ponerlos al día con un pequeño comentario en lo que comúnmente llaman "inteligencia artificial" o -de manera más modesta y adecuada - "machine learning" es decir aprendizaje automático.

Como ex programador de aplicaciones, es un tema que nunca me había llamado la atención. Siempre lo ví como algo muy limitado, que requiere de grandes recursos fuera de mi alcance, con una programación demasiado complicada para ser hecha por una sola persona y que en realidad no ofrece aplicaciones de utilidad práctica. Bueno, con el paso del tiempo muchos de esos problemas se han ido resolviendo o al menos disminuyendo, como pasaré a comentarles enseguida. Vamos por partes:

La "inteligencia artificial" sigue siendo algo muy limitado y todavía está a años luz de lo que comunmente entendemos por "inteligencia". Recuerdo que en los años ochenta, los japoneses hicieron un masivo esfuerzo en este campo, con resultados bien decepcionantes, en las décadas que siguieron IBM también puso mucho empeño sin grandes avances, aparte del programa para jugar ajedrez, no apareció ninguna aplicación práctica que pudiese tener mucho valor y ventaja sobre la inteligencia humana.  

La inteligencia artificial durante muchos años siguió el modelo de los "sistemas expertos" emulando lo que hacen los médicos o los mecánicos de vehículos para diagnosticar y resolver problemas, basados en grandes bases de datos con cientos de miles de alternativas de solución y árboles de decisiones que iban eliguiendo las más aceptables, al menos en teoría.

Pero todos sabemos lo que pasa cuando llevamos el auto al mecánico porque fue rechazado por las emisiones, o cuando vamos al médico con una diarrea crónica, entonces empiezan los exámenes y los intentos de solución por descarte, que al final terminan costando una fortuna y a veces no llegan nunca al diagnóstico correcto. Bueno, tal vez en un auto, que es algo mecánico se puede llegar a algo con un buen sistema experto, pero en un organismo vivo como somos nosotros, donde las reacciones van cambiando por causas muchas veces fortuitas, impredecibles, esos sistemas pueden ayudar en algo, pero no son la panacea que todos esperamos. Todos sabemos que hay doctores con buen olfato u ojo clínico, capaces de superar fácilmente cualquier sistema experto computarizado.

Buena parte de lo que conocemos como verdadera inteligencia, no es de naturaleza mecánica, sino que está sujeta a la intuición y a la suerte, especialmente cuando trata con organismos o situaciones impredecibles. Por eso, los doctores con el mejor "ojo clínico" así como tienen grandes aciertos, también cometen grandes errores debido a que trabajan con la incerteza, aunque en promedio aciertan más que fallan.

Por eso, desde los años noventa más o menos, el foco fue cambiando desde la inteligencia artificial a las máquinas capaces de aprender, esto es un objetivo mucho más modesto, pero tiene aplicaciones prácticas bien interesantes. En sus inicios, el machine learning se basaba en un principio similar al de los sistemas expertos pero le agregaron la realimentación, la experiencia y el aprendizaje para ir refinando las decisiones 

Esto requería algoritmos de programación bastante complejos, así es que los primeros sistemas de esta clase fueron hechos por grandes grupos de programadores que se dividían el trabajo. Lo bueno es que con el paso de los años se han ido agregando "capas de abstracción" que permiten que la programación hoy sea incomparablemente más simple que como era en los años ochenta, por ejemplo. 

Las capas de abstracción consisten en hacer bibliotecas con toda clase de tareas rutinarias ya programadas, de manera que el programador solo tiene que definir las entradas que dispone y la salida que desea y el trabajo de programar se convierte en algo parecido a armar con bloques de Lego, lo que antes requería concentración y mucho ingenio, se ha ido atomizando y ahora solo hay que armar paquetes y paquetes de paquetes. 

Es algo que existe existe desde el inicio de la computación y gracias a eso no es necesario programar con unos y ceros. En los cincuenta años -más o menos- que lleva la programación moderna se han ido acumulando más y más capas de abstracción y cada día es menos complejo programar, incluso cosas sumamente complicadas están al alcance de cualquier programador medianamente competente, y es muy probable que en unos años más hasta mi querida suegra sea capaz de programar aplicaciones. 

Hasta no hace mucho, el machine learning no había tenido aplicaciones de mucho valor práctico, pero con el tiempo han aparecido algunas cosas interesantes. Por ejemplo el "Ok Google", o el "Hi Siri" y cosas por el estilo, que permiten comunicarnos con programas como si estuviéramos conversando, una vez que aprenden a reconocer nuestra voz. Pero tal vez la aplicación más interesante es el reconocimiento de imágenes en movimiento.

Creo que fue Ulschmidt quien comentaba que sería muy conveniente poder identificar a alguien sospechoso de manera automática, bueno, eso se hace hoy en la mayoría de los aeropuertos del mundo, donde cada rostro captado por las cámaras de seguridad, primero que nada es identificado como un rostro humano y no una foto, un animal o un juguete. Luego que el rostro es identificado se le toman sus medidas biométricas como distancia entre ojos, tamaño de la nariz, boca, orejas y el rostro se transforma en una matriz de números con esas medidas, lo que permite guardarlo, compararlo con una base de datos y tratar de identificar a alguien entre una multitud, sin necesidad que haya una persona revisando los miles o millones de rostros uno por uno.

Creo que Londres, junto con algunas ciudades de China, es el lugar donde existe mayor densidad de cámaras en el mundo, incluso las calles están llenas de camiones que se estacionan y vigilan uno a uno cada rostro, que es automáticamente comparado con bases de datos de prófugos y delincuentes conocidos. Aunque el sistema no es perfecto y da bastante falso positivos, ha resultado muy útil, solo recuerden con la rapidez que se identificó a los autores de los atentados del 7 de julio de 2005, eso fue puro trabajo de cámaras, solo imaginen como estará la cosa ahora.

¿Puede prestarse para mal uso? Claro, como todo. De hecho siempre se discrimina porque el sistema se ha entrenado para prestar más atención a la gente de raza negra, con rasgos indios o árabes obviamente, pero el caso es que la apariencia los hace sospechosos y por ello sujetos de atención, debido a que pertenecen a grupos donde hay más terroristas. Los chinos usan esto para vigilar o seguir a personas de conducta sospechosa o con un puntaje social bajo cierto umbral.

Todo esto pareciera que solo lo pueden programar científicos de la NASA o gente por el estilo y que se necesitan supercomputadores gigantescos con capacidad de almacenamiento casi ilimitada, al menos eso creía, hasta que me llegó esta mañana una propaganda del curso online The Future of ML is Tiny and Bright del profesor Vijay Janapa Reddi de la Universidad de Harvard, "tiny" ML se refiere a "machine learning pequeño" y aunque no me interesó el curso -que cuesta US$ 537.30 y es de nivel introductorio- me interesó buscar en Internet de qué diablos se trataba.

Y encontré algunas aplicaciones prácticas, por ejemplo el reconocimento de gestos con un teléfono celular, usando la plataforma Edge Impulse, y varias aplicaciones prácticas como el reconocimiento de rostros humanos con un Rapberry Pico (perdón por el francés), y un proyecto paso a paso para reconocimiento de objetos con un Raspberry Pi 4B, que me pareció la aplicación más práctica y mejor explicada de todas. 

¿Vale la pena estudiar esto? Yo creo que todavía no, porque es algo que está en desarrollo temprano y lo mejor será esperar que se vayan agregando capas de abstracción hasta que la programación sea mucho más fácil, algo que sin duda va a ocurrir, tal vez muy pronto.

Cuando yo empecé a interesarme por la detección de movimientos con al Motion Eye, el software Motion todavía era muy rudimentario y perdí mucho tiempo enredado en detalles que ahora no se necesita saber, me recordó cuando aprendí Cobol, Fortran y luego lo fácil que era programar las mismas cosas en Visual Basic, creo que con el machine learning va a pasar algo muy parecido, y que en algún tiempo más programar las máquinas que aprenden el reconocimiento automático va a estar al alcance de las masas.

9 comentarios:

  1. En la década del 90 ya usábamos algoritmos de control predictivos en sistemas DCS (Distributed Control Systems) principalmente en refinerias donde existian lazos de control criticos que se procesan a 1 milisegundo. En esa época mi trabajo consistía en implementar sistemas de control, por casi todo el continente americano, para distintos procesos industriales Solo puedo suponer el avance tecnológico en los últimos 30 años ya que a partir del 2004 desarrolle mi carrera profesional hacia otras areas. Pero los beneficios del machine learning los estamos disfrutando desde hace decadas

    ResponderBorrar
  2. Algunas cosas tienen mucho potencial. No se si es "machine learning" pero ahora programan sensores para que reconozcan la maleza sobre el terreno - no rociar a lo tonto todo el terreno sino hacer un "spray" sobre el yuyo malo. En teorìa ahorra muchìsimo, mata mejor, menos daño ambiental. Un montòn de dispositivos , con un poco de inteligencia y flexibilidad, rinden mucho más.

    ResponderBorrar
  3. Ah claro Ernesto, algo de eso había en los sistemas de control realimentados, mandar parte de la salida de vuelta como señal de entrada para "corregir" el control es una de las ideas que usan las máquinas que aprenden, otra idea que le agregaron es la "experiencia" o sea dejar en memoria los resultados para hacer predicciones del futuro, hasta allí eran los sistemas expertos, lo que se agregó al último fue un modelo capaz de identificar patrones de formas comportamientos. creo que la capacidad de reconocimiento es lo que diferencia a las máquinas que aprenden de los sistemas de control y los sistemas expertos. No se busca tanto tomas decisiones como reconocer situaciones u objetos para ayudar a que una persona tome una decisión, por eso no sería "verdadera" inteligencia artificial, solo automatiza cosas que son mecánicamente procesables. Es un objetivo mucho más modesto pero también más útil.

    Pero como dices, en los sistemas de control estaban las ideas básicas de las máquinas que aprenden

    ResponderBorrar
  4. Anónimo, creo que ese es el verdadero potencial: mecanizar lo que es mecanizable es un uso mucho más "inteligente" de las computadoras que tratar de replicar la inteligencia humana.

    El reconocimiento de formas, imágenes en movimiento, patrones y comportamientos es algo totalmente mecanizable, no tiene una gran complejidad teórica pero si enorme utilidad práctica.

    El ejemplo más obvio es potenciar los sistemas de vigilancia basados en cámaras de video. Uno de los problemas de estos sistemas es determinar que queda grabado y que no de lo que captan las cámaras, ese es un problema enorme porque si se graba absolutamente todo la dificultad de buscar e identificar cosas de interés sería enorme.

    Un primer avance es grabar solo cuando se detecta movimiento, es algo muy simple y medio brito, pero ayuda a reducir enormemente el esfuerzo de encontrar información de interés.

    El segundo paso es enseñarle a la máquina a reconocer formas y patrones para que grabe solo cuando ocurre algo que nos interesa.

    Por ejemplo yo veo un auto sospechoso por mi calle, puedo tomar unas 30 imágenes desde distintos ángiulos y "enseñarle a la máquina a reconocer ese auto, ignorando los demás. Entonces la puedo programar para que grabe SOLO cuando pasa ese auto específico. También se podría hacer con una persona, etc.

    También sirve para vigilar que no se roben algo valioso, lo entramos al modelo para que la máquina aprenda a reconocerlo y dejamos una cámara grabando, si ese objeto deja de aparecer la cámara envía una alarma ¡es como tener a una persona vigilando 24x7x365!

    Hay nikes de aplicaciones muy prácticas y es muy probable que en poco tiempo más podremos enseñarle a las máquinas a reconocer patrones sin programar nada, de una manera visual y muy sencilla

    ResponderBorrar
  5. Tomás, a lo que más me refería aquella vez es a que sistemas automáticos le pasen el aviso a los sistemas humanos. Creo que mucho programador de sistemas quieren cerrar el circuito de "inteligencia artificial" o circuítos totalmente automáticos, cuando no esta mal que ciertos automatismos administren situaciones standar y pasen el control al humano en otras. Antes nos ayudamos con animales: el perro ladra, y el centinela va a ver qué pasa. El buey ara casi de memoria, el caballo lleva al jinete borracho a casa, fielmente, desde el bar al hogar, con el tipo oscilando medio dormido en la montura. Eso si, de alterarse la rutina el humano debe retomar el control de la situación.
    Ocurre que los automatismos son introducidos como batallas tecnològicas dentro de las empresas e instituciones. Un grupo de jóvenes desafiantes usan la tecnologìa para jubilar a los viejos carcamanes, o hacer desaparecer una categoría completa de trabajadores sustituìdos por la máquina. Entonces se la da más poder a la máquina como una forma de predominar sobre otros, son batallas culturales también. Uls

    ResponderBorrar
  6. Claro Ulschmidt, en los 80s se pensaba en máquinas tomando decisiones (como el computador Hal de 2001 Odisea del espacio) y con el tiempo esto se aterrizó a que los sistemas sean ayuda para que las personas tomen decisiones, tal como las calculadoras nos evitan las tediosas operaciones aritméticas con lápiz y papel, le pasa a las máquinas lo mecánico y aburrido y deja la responsabilidad y el riesgo a las personas, es lo lógico pero han tomado su tiempo en darse cuenta.

    La analogía de las máquinas con los animales es muy buena, no la había considerado. Claro que durante mucho tiempo los seres humanos hicimos el trabajo que antes hacían los animales y después hicieron las máquinas, ser cargador o excavador de pala y picota fue un trabajo masivo, con mucha demanda, pero con el tiempo se fue haciendo innecesario.

    Por eso quedamos muchos carcamales sin utilidad social, siempre em acuerdo de mi suegro que era un experto operador de código Morse y de la noche a la mañana todas sus habilidades no valían nada, es una realidad, lo mismo pasa a todos los niveles, por ejemplo los ingenieros de estructuras que trabajaban con regla de cálculo y muchas otras habilidades que ya no sirven.

    Probablemente esto va a escalar y las habilidades de muchos médicos, traductores, pilotos, choferes, abogados, etc. etc. irán quedando obsoletas en el tiempo. Algunas profesiones no van a desaparecer, pero las habilidades que son valiosas en ellas si que pueden evaporarse.

    ResponderBorrar
  7. Este poncho me queda grandazo. Tengo una pregunta y no sé si es pertinente.
    Saben como funciona el sistema Hawk eye que se usa en el tenis para las pelotas dudosas.? Es computación y a mi me parece magia.

    ResponderBorrar
  8. Hawk Eye es un sistema bien antiguo, debe tener unos 20 años más o menos de desarrollo y consiste en colocar varias cámaras de alta performance que se mueven robotizadas siguiendo la pelota. Creo que usan cámaras RED, no estoy seguro, pero son las cámaras de broadcasting más avanzadas y caras del mundo, los requisitos técnicos de los equipos para transmitir eventos deportivos son brutales y el puro lente de una cámara de esas puede costar decenas de miles, hasta cien mil dólares o más por las características técnicas que deben tener. Es cuestión de ver los equipos de los fotógrafos deportivos nomas.

    El Hawk eye funciona con como 15 o más cámaras, no estoy seguro cuantas, que cubren todo el campo de juego y van siguiendo robóticamente la posición de la pelota, creo que basta con la imagen de tres cámaras (más Pitágoras y las leyes de Newton) para que un computador pueda sacar la cuenta y conocer la posición instantánea de la pelota en cualquier momento, en sus tres dimensiones, con la posición instantánea se puede predecir la trayectoria y es fácil calcular la velocidad, solo se deben hacer las cuentas rápidas y eso lo hacen bien los computadores.

    Teniendo todos esos datos, después se pueden desplegar en una maqueta virtual del estadio similar a las que se usan en los videojuegos. No es un sistema infalible, porque condiciones como el viento o rebotes muy bruscos obligan a hacer correcciones casi instantáneas, pero dicen que tiene una exactitud de menos de 10 milímetros.

    A todo esto el nombre viene de una antigua cámara fotográfica de cajón que fue muy popular y se llamaba así "ojo de halcón" o algo poor el estilo

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"