Grados de libertad

https://youtu.be/gAGBt3fjK-c[\embed]

Hoy os propongo empezar un curso. Un curso en el que tratar temas de Ingeniería, pero sin necesidad de tener una base.

Quiero mostraros cómo usar el concepto de grados de libertad, en cosas totalmente ajenas a la Ingeniería: Negocios, fotografía o estudios.

Machine Learning

https://youtu.be/n7WRqjnefr4[\embed]

A raíz del vídeo anterior, hay un tema que ha quedado pendiente de explicar y creo que ha llegado el momento de abordarlo. Creo que sabéis que me refiero al Machine Learning.

A pesar de que me he referido a este sistema en muchas ocasiones, nunca me he referido a él de forma totalmente correcta por un motivo: es un concepto bastante amplio y complicado si no tenemos conocimientos de matemáticas y ciencias de la computación, y además está en este momento en constante cambio.

Una primera definición

El Machine Learning es un conjunto de técnicas que permiten que un programa funcione en base a un aprendizaje. En otros vídeos lo he nombrado como un algoritmo, o una red, pero no es exactamente así. Me he referido al sistema como algo etéreo, porque aunque en términos de computación es bastante concreto, pero para el común de los mortales se convierte en algo bastante abstracto.

De momento es como si no hubiese explicado nada así que vamos a ir paso a paso.

Podemos distinguir dos formas en las que, a día de hoy, resolvemos problemas: el modo humano y el modo ordenador.

En el modo humano sentamos una base a través de una teoría y reforzamos a través de una práctica. Visto objetivamente aprendemos a través de la experiencia. Os pongo un ejemplo sencillo: Yo mismo fui a la Universidad y me explicaron en la asignatura de turbomáquinas cuáles eran las fórmulas que definían el comportamiento de una bomba hidráulica. Años más tarde trabajé en una empresa de bombas y vi cientos de ejemplos de funcionamiento de distintos tipos de bombas. Gracias a eso, a día de hoy, soy capaz de con solo echarle un vistazo a la curva de una bomba saber si se va a comportar como quiero, o no.

El otro método, el de los ordenadores, era hasta ahora totalmente distinto. Lo que hacíamos era darle al ordenador unos pasos concretos a seguir, siendo nosotros los que deducíamos todos los posibles resultados. Es decir, seguimos unos pasos que pueden ser decisiones ya determinadas, bucles y acciones, con el objetivo de resolver un problema. Haciéndolo fácil, le decimos a nuestro ordenador: Si A mayor que B haz esto, haz B mientras A sea cierto o en caso de que B sea cierto haz C.

El Machine Learning es la fusión de estas dos capacidades. Lo que vamos a hacer es un programa que sea capaz de aprender de la experiencia, o mejor dicho de datos, de montones de datos (lo vemos en un momento). De esta forma cogemos lo mejor de cada mundo: la flexibilidad y adaptabilidad que da el aprendizaje y la rigurosidad y precisión de la computación (además de la fuerza bruta).

Evidentemente como efecto secundario deseado, evitamos nuestros despistes y falta de rigurosidad.

De qué no voy a hablar

Para quienes saben o se dedican a estos temas: no voy a hablar de las diferencias entre aprendizaje supervisado, no supervisado o con refuerzo.

No voy a hablar de los tipos de algoritmos que hay como regresiones, clustering, árboles, clasificaciones o algoritmos genéticos.

No voy a hablar de todo eso porque no aporta nada a la hora de entender el concepto de Machine Learning. Lo repito una vez más: Al 99% de quienes están viendo este vídeo, ni les viene ni les va, solo quieren entender qué es el Machine Learning como concepto.

Algoritmos

Creo que es interesante, antes de poner un ejemplo, saber qué es un algoritmo. Un algoritmo es un conjunto de reglas ordenadas, bien definidas y finitas, que siguiéndolas paso a paso nos llevan conseguir nuestro objetivo.

Se que suena un poco abstracto pero no lo es: usamos algoritmos continuamente. Un ejemplo de algoritmo: cuando estamos parados en un semáforo. Os describo lo que sucede como si de un algoritmo se tratase. La primera acción es mirar al semáforo y hacemos una comprobación: ¿está en verde o en rojo? En caso de estar en rojo espero un segundo y vuelvo a comprobar. Si está en verde, hago una segunda comprobación: ¿hay alguien pasando? En caso afirmativo, espero hasta que pase. Una vez ha pasado, meto primera y salgo. Si estuviese en verde y no hay nadie pasando, voy directamente a la acción de meter primera y salir.

Si cambiamos los dibujos por unos símbolos más o menos estandarizados tendremos el típico flujograma que define un algoritmo. Como adelanto, para próximos vídeos: programar no es más que escribirle a un ordenador un algoritmo, en un lenguaje que lo entienda.

Ahora sí, un buen ejemplo.

El problema que me he encontrado a la hora de explicar el Machine Learning, es que si sabes de computación, matemáticas y algoritmos. así como de manejo de datos abstractos, entender el Machine Learning es muy fácil. Desafortunadamente explicarlo esquivando estos temas es muy complicado.

Así que he buscado un ejemplo que es algo con lo que todos nos peleamos casi a diario (y si no lo hacéis es gracias al Machine Learning): el SPAM.

Como ya he comentado el Machine Learning necesita experiencia para aprender. O mejor dicho, datos. Así que lo primero que vamos a preparar para nuestro sistema de Machine Learning es una conjunto de Emails que ya hemos revisado. Vamos a suponer que tenemos 1000 Emails de los que hemos descartado 200 por ser SPAM.

Primero vamos a fijarnos en cómo hemos detectado el SPAM. Por ejemplo, yo he detectado que muchos de ellos son SPAM porque contienen la palabra “premio”. Haciendo un recuento, de los 200 email que son SPAM, 60 contenían la palabra premio. Lamentablemente en los correos normales también hemos encontrado esa palabra 3 veces. Haciendo unos números rápidos podemos decir que el 95% de los mails que contienen “premio” son SPAM. Visto así, parece razonable crear un algoritmo que sea capaz de sacar palabras que aparezcan mayoritariamente en los correos con SPAM y me almacene esos términos en una tabla.

Otra cosa en la que me fijo es que en el SPAM es habitual que haya signos de exclamación en el Asunto. Cuento y hay una relación de 100 en SPAM frente a 10 en los correos normales. Pues añado otro algoritmo que analice eso.

Puedo agregar otro para el número de errores gramaticales. Otro para las veces en que aparece o no mi nombre. Y así puedo sacar dos docenas de criterios.

Los aplico todos, a todos los correos, y veo qué niveles de acierto salen. Lo habitual, es que queden bien diferenciados. Aciertos superiores al 95% se considerarían SPAM y aciertos menores al 70% correo normal.

¿Y la magia?

Si os fijais, de momento solo hemos creado una especie de algoritmo de algoritmos, o algoritmo gordo, que no deja de ser un programa grande. ¿Dónde está el detalle? ¿Que diferencia el Machine Learning de una programa cualquiera?

La cosa es que de momento, solo hemos analizado los casos existentes aplicando nuestro criterio. A partir de este momento empezaremos a aceptar nuevos correos entrantes y vamos a dejar que pasen a formar parte del aprendizaje. De esta forma, a medida que vayan llegando nuevos emails, serán analizados, clasificados y usaremos su información para establecer el propio criterio. Me explico.

Con este sistema podemos adaptarnos al paso del tiempo. Si por ejemplo, se pone de moda la palabra premio (porque haya una noticia relacionada con la Lotería), en poco tiempo irá saliendo de la lista de palabras clave y ya no será sinónimo de SPAM. Del mismo modo si aumenta en el SPAM la palabra “gratis” irá subiendo posiciones en el Ranking de palabras que pertenecen al SPAM.

Esta parte es la que hace que estos sistemas parezcan, o se consideren inteligentes. El hecho de que sean capaces de adaptarse aprendiendo. Pero no es solo esto. Es que además los algoritmos que aplican estos sistemas suelen aplicarse de una forma totalmente estricta. Con lo que pueden encontrar patrones, que a nosotros ni se nos había ocurrido: Pueden encontrar cosas como que el número de verbos es menor en el SPAM que en correo normal o que la longitud del SPAM, en general, es mayor que la de los correos normales. Son relaciones nada intuitivas y que llegado el caso pueden ser mucho más efectivas que las que habíamos pensado inicialmente.

Adicionalmente podemos incluir algoritmos que aunque a priori no parezca que nos vayan a dar información, puede que nos den resultados tremendamente útiles y precisos.

Como colofón, podemos ayudar a estos sistemas a evolucionar por el camino correcto: el usuario final puede corregir al sistema y decirle si se ha equivocado en alguna clasificación. Con este Feedback solo hay que priorizar esa información frente a la que se genera de forma automática y podemos mejorar sustancialmente la calidad del sistema.

El modelo

Creo que con lo anterior se entiende bastante bien en qué consiste el Machine Learning. En este punto solo quería hacer un pequeño esquema para resumir lo dicho.

Lo que vamos a tener es una máquina o computadora que se va a enfrentar a un problema. Esa máquina va a requerir dos cosas internamente: Un algoritmo de Machine Learning, en nuestro caso ese comparador de puntuaciones, y unas formas de atacar al problema (los distintos algoritmos).

Para entrenarlo necesitaré unos ejemplos previos y una vez se ponga a funcionar, unos avisos de si lo que se está haciendo va por buen camino, o no.

Aclaraciones

Llegados a este punto en el que espero que la idea se haya cogido, me gustaría aclarar algunas cosas que he dicho en videos anteriores, ahora que tenemos una idea más concreta:

  • No podemos mirar como se comporta internamente el Machine Learning. Técnicamente esta afirmación es falsa en todos los casos menos en uno: si tenemos un sistema de Machine Learning de Refuerzo montado sobre una Red Neuronal. A día de hoy el nivel de abstracción que se genera en estos sistemas es similar al de una encriptación. Eso hace que no haya forma de ver lo que pasa dentro del sistema. ¿Por qué lo menciono tanto? Porque opino que en un futuro no muy lejano, este sistema es el candidato a ser parte de ANI’s más avanzadas, porque son los sistemas que generan resultados más impredecibles.

  • El machine Learning es un algoritmo. Como habéis visto en el vídeo, técnicamente no es así, es más bien un sistema que usa distintos tipos tipos de algoritmos para funcionar, pero creo que no está tan alejado como para que sea una aberración.

Besos para ellas, abrazos para ellos

Fuentes

Machine Learning en la Wikipedia Un Tour por los algoritmos del Machine Learning Master Machine Learning Algorithms Understanding Machine Learning Machine Learning with MatLab

La paradoja de Teseo

https://youtu.be/UWqaM2g9g4s
Para la vuelta al canal quería preparar un tema que fuese algo especial. Y digo especial porque creo que, si hay algo que nos une a vosotros y a mí, son esos temas que en cuanto te los planteas de forma ordenada, te explota la cabeza.

Para este capítulo os traigo una paradoja muy conocida, pero que rara vez la he visto relacionada con temas como la física, matemáticas o lo virtual… Hoy os voy a presentar la paradoja de Teseo.

¿Qué es una paradoja?

Es difícil de definir. Podríamos verlo como una idea que aparenta ser lógica pero que cuando la analizamos detenidamente vemos que viola nuestros razonamientos lógicos. Como consecuencia, es habitual que al intentar razonarla entremos en un bucle del que no hay forma de salir.

Como siempre, la mejor forma de explicarlo es con un buen ejemplo. Y yo voy a sacarlo de un videojuego: The legend of Zelda: Ocarina of Time. En el juego podemos viajar en el tiempo siete años adelante y atrás. Tenemos un futuro y un pasado. En un momento dado, en el futuro, nos encontramos con un personaje que nos enseña una canción y nos la aprendemos. Volvemos al pasado y nosotros le enseñamos esa canción a esa persona en el pasado. La pregunta es clarísima: ¿Quién le ha enseñado la canción a quién? Lo complicado es que no hay respuesta.

¿Qué dice la paradoja de Teseo?

Teseo fue un gran rey griego. Tenía un barco que se conservaba desde la época de Demetrio de Falero. Se había conseguido conservar desde hacía tanto tiempo porque cada vez que una pieza del barco se estropeaba era sustituida por un repuesto. La gracia es que, según cuenta la leyenda, para cuando Teseo estaba usando ese barco, el 90% de las piezas se habían sustituido respecto a la época de Demetrio. La pregunta creo que se ve venir: ¿El barco que usaba Teseo era el mismo que el de Demetrio? ¿Las piezas reemplazadas eran escombros o en realidad eran el verdadero barco de Demetrio?

Como veis, estamos hablando de una paradoja de sustitución.

¿Por qué me explota la cabeza?

Porque esta idea se acerca de forma bestial a otros problemas que tenemos en la actualidad en planos como la astronomía, física cuántica, computación o filosofía.

Este concepto apunta directamente a la idea de que el universo en realidad está compuesto de información. De que todo lo que consideramos físico lo es porque pertenecemos al propio sistema.

Voy a trocear la explicación para que sea más sencillo de entender.

Una primera explicación

Creo que lo primero sería ver dónde está exactamente el conflicto. El problema en este tema, en esta paradoja, es que no se sabe muy bien qué es más real: si la idea que estructura algo, o de lo que está compuesto ese algo.

Es decir, imaginad una mesa. ¿Una mesa es una mesa porque tiene ciertos materiales que la componen, o porque tiene cierta forma, cierta idea, para que pueda apoyarme? Puede parecer bastante obvio pero la realidad, es que es algo que se lleva discutiendo durante siglos.

Desde el punto de vista de la física

Hay una parte de la física que se encarga de intentar entender de qué está formado el universo. La realidad es que cuando hemos empezado a buscar de qué estamos compuestos nos hemos encontrado con un límite. Ese límite no está claro si es físico o si en realidad estamos hablando única y exclusivamente de información.

Esto suena muy contradictorio porque no tenemos la sensación de estar formados por información. El mundo nos parece real, físico, porque podemos tocarlo, olerlo o saborearlo. Pero si pensamos, por ejemplo, en un videojuego, lo que tenemos es un mundo que se ha creado a base de información: a base de ceros y unos. Sin embargo, cuando programamos los escenarios, personajes, interacciones… vemos como ese mundo virtual cobra sentido y cómo un personaje puede chocarse con un muro o morir si cae desde demasiada altura. En el interior del juego todo tiene coherencia a pesar de que sabemos que no es más que un procesador manejando información.

Pues nos encontramos en un punto parecido. En un momento en el que no se puede demostrar si vivimos en un mundo físico o en un universo hecho a base de información. Y aquí es donde se vuelve muy relevante esta paradoja de Teseo, porque lo que nos está intentando decir esta paradoja es que lo importante no son los materiales de los que estamos formados, sino la propia organización, la estructura o la idea. Lo interesante no es la madera del barco, sino el plano en sí.

Desde el punto de vista de la informática

Como ya he adelantado en el anterior punto, en la informática esto queda más claro. Un archivo no es más que una sucesión de ceros y unos ordenados de forma que tienen un sentido.

Cuando yo copio un archivo lo único que estoy haciendo en realidad es mover esa sucesión de información de un sitio a otro. De hecho, dependiendo del tipo de almacenamiento que usemos, cambiará la forma en que estén almacenados los ceros y unos.

Lo único de lo que no tenemos dudas es que el archivo, que puede ser una película, un libro o cualquier cosa, es absolutamente real. No es algo imaginario, es algo a lo que le damos uso.

Mezclando física, informática y nuestra propia existencia

Es muy curioso que en diversos experimentos que se están haciendo para intentar esa utopía del teletransporte se ha encontrado que sólo hay una forma real de conseguir teletransportar una partícula desde el punto A al punto B.

El teletransporte no se consigue moviendo la partícula muy deprisa de un punto a otro, sino que se hace eliminando la partícula del primer punto y creando una partícula exactamente igual en el segundo punto al mismo tiempo.

Si yo quisiera teletransportarme, tendría que hacer una copia exacta de mí mismo en otro punto a la vez que mi cuerpo se destruye en el punto actual. Esto suena a truco o artimaña, pero la física y las matemáticas respaldan que es la forma correcta de hacerlo.

Digamos que este ejemplo nos da la que yo considero la clave de la paradoja: lo único que puede ser copiado con total precisión es la información, las ideas. Cuando copiamos algo con una precisión del 100% el resultado es una copia exacta, y sabemos que eso no puede hacerse más que a nivel teórico, a nivel de ideas, de información.