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

Oliver Nabani

Ver todos

comentarios

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

Mis movidas

RSS Todas mis movidas

  • Contigo no, bicho 18 octubre, 2018
    Hoy quiero explicaros de forma sencilla que son los famosos bugs, por qué aparecen y cómo pueden solucionarse. Advertencia: este episodio es de los que molan.
  • Mejorando la realidad 17 octubre, 2018
    Hoy intento contestar a un oyente y filosofo un poco alrededor de la realidad aumentada
  • Sonido HiFi 16 octubre, 2018
    Hoy os explico muy por encima cómo funciona el sonido digital y mi experiencia con un equipo HiFi

Oliver Nabani

Oliver Nabani