Se presenta una red neuronal al concurso…

Imagínate que estás en la fase final de un concurso y te dan a elegir para llevarte el “gran premio” la resolución de uno de los siguientes problemas:

  1. Calcular una operación aritmética, en la cual hay que calcular potencias y raíces cuadradas con al menos cincuenta números.
  2. Reconocer en una foto, de entre un grupo de niños jugando en un parque, a una niña con un chubasquero rojo.

Seguramente la mayoría elegiríamos el problema dos, puesto que “sabemos” que su resolución va a ser inmediata.

Ahora imagínate que el concursante es una calculadora “con cierta capacidad decisoria”. ¿Cuál crees que sería el problema que elegiría para su resolución? Seguramente que el problema uno.

Conclusión primera: las calculadoras son mejores que las personas resolviendo problemas aritméticos y las personas son mejores reconociendo elementos concretos en una imagen.

¿En qué más somos mejores? En reconocer las voces de otras personas, el estilo de un artista que nos gusta en una obra nueva que no conocíamos de él o ella, en calcular la distancia de un objeto lejano, en saber si es un buen momento para jugar en bolsa, en decidir si hay que operar o no ese tumor… De entre todos estos ejemplos, hay capacidades que casi todos los seres humanos compartimos: como reconocer las voces de nuestros padres, distinguir las palabras de nuestro idioma, calcular las distancias de los objetos, etc. Y otras se circunscriben a grupos más especializados: por ejemplo la decisión de un bróker a la hora de operar en bolsa, o  de un médico a la hora de decidir si operar o no a un paciente.

¿Y por qué somos mejores? ¿Lo hemos sido siempre? Cuando nacimos, ¿teníamos consciencia de nosotros mismos? ¿Sabíamos quiénes eran nuestros padres? ¿Sabíamos ya hablar? ¿O apenas alcanzábamos a proferir extraños sonidos y a sentir sensaciones como el hambre o el sueño?

En algún momento de nuestra vida esto cambió. Empezamos a tener un cierto reconocimiento de nosotros mismos, a distinguir a unos seres más grandes que nosotros que aparecían cuando aumentábamos el número de los extraños sonidos que éramos capaces de proferir. ¡Además, “aprendimos” que aparecían con más asiduidad si aumentábamos el volumen de nuestros extraños sonidos! Los seres más grandes que nosotros, también parecían hacer uso de sonidos extraños, de entre los cuales, uno de ellos parecían repetirlo con más asiduidad cuando se encontraban en nuestra presencia. En un momento dado “aprehendimos” que era nuestro nombre. Que lo empleaban para dirigirse a nosotros. Y más adelante, también nosotros fuimos capaces de emplear otros sonidos especializados para reclamar su atención sin tener que gritar tanto.

Y seguimos creciendo, desarrollándonos y aprendiendo un montón de cosas valiosas: qué comer, qué pasa si metemos los dedos en ese objeto de la pared con dos agujeros, cuando tengo que irme a la cama, por qué se hace de noche… Y un día nos encontramos con un montón de conocimiento que pareciera “venir de fábrica”, pero que en realidad nos había/nos ha costado mucho tiempo adquirir y emplear para nuestra supervivencia en el día a día.

Y entonces nos convertimos en adultos y nos especializamos: algunos adquirieron el conocimiento de una profesión, otros se entrenaron en el desarrollo de una capacidad concreta: como el canto, la programación o la venta… Y pudimos observar, cómo algunas personas son innatamente mejores para hacer algunas de estas cosas, que otras personas, a pesar de que invirtamos mucho esfuerzo y tiempo intentándolo: los compositores, escritores, conferenciantes, teóricos, facultativos…

Y cuando se les pregunta a estas personas por el secreto de su “éxito”, nos suelen remitir a “recetas” del tipo: “hay que esforzarse en la vida”, “estudiar mucho”, “practicar y practicar”, “nadie nace enseñado”… Y si bien, algo de verdad hay en tan sabios consejos, lo cierto, es que seguramente estas personas “desconocen realmente el secreto de su éxito”. ¿Cómo puede explicar un pintor o un escritor cómo pintan o escriben? Es algo contrario a la propia finalidad artística de la expresión de la individualidad. ¿Por qué un médico decide intervenir, en ocasiones que otros miembros de su profesión no lo harían? ¿Por qué, de entre todos los brókeres, unos parecen acertar más que otros?

Pero dejando a un lado la brillantez de estos especímenes humanos, la verdad es que “también se equivocan”: no todas las obras de un artista son recogidas con el mismo entusiasmo por parte del público o la crítica especializada. El mejor bróker a veces mete la pata hasta el fondo. Y a veces, por desgracia, el cirujano se da cuenta de que no debería haber realizado la intervención.

Conclusión segunda: todos nos equivocamos.

Equivocarnos es importantísimo. Porque de la equivocación surge el “conocimiento”. ¿Pero cómo sabemos que nos equivocamos? Mediante el “aprendizaje”. Cuando somos pequeños nuestros padres nos corrigen continuamente hasta que empezamos a hacer las cosas cómo ellos han aprendido antes que deben hacerse. Si llamamos, por ejemplo, “Manzana” al “Televisor”, nos corregirán hasta que dejemos de confundir el uso de ambas palabras. Y no porque se trate de un error de carácter metafísico: el uso que hacemos de tales términos a la hora de referirnos a las manzanas y los televisores, se debe más a una convención humana, útil para el día a día, que a una verdad intrínsecamente más profunda.

Por lo tanto, durante todo nuestro desarrollo aprendemos mediante una continua “corrección” de lo que hacemos. Y a mediada que nos vamos desarrollando vamos adquiriendo, cada vez más, una autoconsciencia de nuestros propios errores (aunque nos cuesten reconocerlos), que frecuentemente desembocan en nuevos aprendizajes o refinamientos de los ya existentes. Una de las especialidades más interesantes del conocimiento humano, la ciencia, ha hecho, de facto, del error, su baluarte a través del “experimento”: en éste, una hipótesis es contrastada contra una prueba una y otra vez hasta que pueda darse el caso de que se demuestre lo contrario: el famoso “falsacionismo” popperiano. Esto es, el científico vive ajustando sus “teorías” al enfrentamiento de éstas contra la prueba del experimento. Y obsérvese, que no vale con hacerlo una vez. El “buen científico” debe repetir el experimento un número suficiente grande de veces, para asegurarse que la teoría se encuentra a salvo. De la misma manera que nosotros empleamos la palabra “Manzana” cada vez que nos encontramos en su presencia (y hasta que somos capaces de abstraerla de la manzana real), para asegurarnos que hemos aprendido a emplearla correctamente. Y al igual que cada niño se enfrenta a éste tipo de aprendizaje, cada generación de científicos tendrán que volver a repetir, una y otra vez, los mismos experimentos hasta que un resultado más sutil en la experimentación pueda variar sus conclusiones y dar paso a nuevas teorías.

De todo lo dicho hasta el momento, hemos extraído dos conclusiones: que somos mejores en casi todo, menos en realizar cálculos frente a una calculadora. Y que aprendemos cuando nos equivocamos y nuestros: padres, profesores, parejas o “experimentos” nos corrigen. Así pues, “tomamos nota” del error, e intentamos mejorar para la siguiente vez, al igual que un músico se lo pasa practicando continuamente la misma partitura.

Pero hoy en día, a parte de las calculadoras existen ciertos “programas especializados” que al igual que nosotros parecen ser capaces de: reconocer matrículas de coches cuando entramos en un parking; sugerirnos palabras mientras estamos escribiendo un mensaje; o reconocer rostros humanos en una aplicación fotográfica. Además, los periódicos están llenos de artículos sobre “redes” capaces de: ganar a seres humanos en juegos que requieren capacidades más allá de las del mero cómputo de las calculadoras; que “saben” cómo viajar en el metro de Londres (lo cual no es una cuestión para nada trivial); o de conducir por sí mismas, coches de manera autónoma.

Estos programas especializados parecen ser capaces de imitar, en cierta medida, algunas de las capacidades que hemos estado considerando hasta el momento como propias del ser humano o de algunas especies animales que consideramos más próximas. Nos estremecemos, porque identificamos muchas de estas capacidades con eso que los filósofos, desde muy antiguo, han enfrentado como una de las características definitorias de nuestro ser: la inteligencia. ¿Pero somos realmente inteligentes por poseer tales capacidades?

Conclusión tercera: sea lo que sea la inteligencia, reconocemos como parte de ella las cualidades mencionadas hasta ahora. Por tanto, siguiendo la famosa idea del test de Turing, un programa que muestre capacidades de éste tipo tendrá que ser reconocido, al menos en parte, como partícipe de “eso” a lo cual nos referimos cuando empleamos el término “inteligencia”.

Vamos a detenernos un momento y a esbozar un modelo “burdo”, con el perdón de la psicología y la neurología, de cómo puede ser que comprenda el ser humano. Partimos de la suposición, cuestionada por algunas escuelas filosóficas, de que “hay un mundo ahí afuera”, que se topa con nuestro aparato perceptual: con nuestros sentidos (la vista, el oído, etc.). Cuando los “datos” de este mundo se encuentran con alguno de nuestros sistemas receptores, éstos los transforman, los codifican, en impulsos nerviosos y los transmiten a través de nuestro sistema nervioso hasta el cortex cerebral. Donde ingentes cantidades de neuronas, organizadas en redes especializadas, los procesan hasta producir aquello que David Hume denominó como “impresión”. Esto es, una imagen, un sonido, una sensación, etc.

Seguramente la cosa no acabe aquí. Imaginemos por ejemplo, que la impresión en cuestión, que la red acaba de obtener a partir de los datos del mundo, es una imagen: “lo que vemos”. Una imagen en “bruto”, aun sin analizar: como el formato “raw” de las cámaras digitales. Y que ahora esta imagen es analizada de nuevo por una serie de redes neuronales especializadas de nuestro cerebro encargadas en extraer: las luces y las sombras, los colores y las formas. Y que de éste ulterior análisis, surge una “consciencia” de los objetos que se encuentran en la imagen: “lo que vemos”. Y que una nueva red neuronal especializada entra en juego en este momento para relacionar dichos objetos con palabras, ofreciéndonos un mecanismo, con otros, de comunicación de lo “que vemos”. Y que todo este conocimiento, al integrarse con el conocimiento proveniente del resto de los sentidos y de nuestra experiencia pasada, nos permite actuar y tomar una decisión: agacharnos para evitar que nos dé esa pelota que viene hacia nosotros en la cara; recoger la bebida que tenemos delante nuestro para darle un trago; o simplemente, seguir sentados plácidamente contemplando nuestro alrededor.

Profundicemos ahora, un poco más, en el modelo descrito. ¡Y recordar que no es más que un modelo!

Supongamos, por simplicidad, que los impulsos nerviosos, mediante los cuales se trasportan los datos del mundo, sólo pueden adoptar dos valores. Lo cual es una práctica habitual a la hora de transmitir información computacionalmente. Hasta cierta intensidad de la corriente transmitida consideramos un valor y por encima de esa intensidad otro, obviando el resto de posibles valores. Tendríamos pues un sistema binario con el cual codificar los datos procedentes del mundo: los famosos bits 1 y 0. Siguiendo nuestro ejemplo imaginemos que los receptores de nuestros ojos acaban de codificar el primer fotograma de lo que “estamos viendo” en un instante dado a unos y ceros. Y que estos unos y ceros son retransmitidos hacia las redes del cerebro especializadas en generar las impresiones de las imágenes.

¿Cómo reciben éstas redes los unos y ceros codificados por nuestro sistema nervioso? De nuevo por motivos de simplicidad, pensemos que sólo haya una red encargada del procesamiento de las impresiones de las imágenes. La idea es que esta red disponga de tantas neuronas de entrada como valores recibidos para su procesamiento. Esto es, si la codificación de nuestro fotograma consta, por ejemplo, de 1000 unos y ceros, necesitaríamos 1000 neuronas de entrada para recibir cada uno de estos valores.

¿Qué es lo que pasa a continuación? A continuación las neuronas de entrada retransmiten a su vez los unos y ceros a otras neuronas de la red, para que éstas realicen cómputos con ellos. Cuando estas neuronas finalizan sus cómputos pueden de nuevo reenviar los resultados obtenidos a otros grupos de neuronas para que se realicen cómputos adicionales, hasta que finalmente un grupo de neuronas realice los cómputos finales que producen la impresión en bruto de la imagen que estamos viendo.

¿En qué consisten los cómputos? Bueno, al menos en los algoritmos empleados en “machine learning”, estos cómputos consiste básicamente, en sumar cada uno de los valores recibidos de las neuronas del grupo anterior en cada una de las neuronas del grupo posterior. Continuando con nuestro ejemplo anterior, supongamos que el primer grupo de neuronas encargado de computar los 1000 valores de entrada de nuestro fotograma, consta de 100 neuronas. Cada una de éstas 100 neuronas procederá a sumar los 1000 valores de entrada. Pero se diferenciaran unas de otras en los “pesos”, en la “importancia”, que les apliquen a los 1000 valores antes de sumarlos. Esta diferencia en los pesos tendrá como consecuencia que los resultados obtenidos por cada una de las 100 neuronas sea diferente. Matemáticamente hablando, un peso es un número comprendido entre 0 y 1 que al multiplicar otro lo disminuye en una cierta cantidad. Por ejemplo, un peso de 0,5 sobre 1 sería 0,5: 0,5 x 1. Mientras que un peso de 1 sobre 1 sería 1: 1 x 1.

Obsérvese que los resultados obtenidos al aplicar los pesos y sumar los valores podrán superar el valor de 1. Puesto que por razones de computo nos interesa operar con valores inferiores al 1, posteriormente se le aplica al resultado obtenido en cada una de las neuronas que han realizado el cómputo, una función que normaliza el valor a un valor comprendido entre cero y uno: pero ahora con decimales. Esta función, que suele ser de tipo sigmoideo, representa el grado de activación que los científicos han observado en las neuronas de nuestro cerebro cuando procesan diferentes tipos de información.

En todo caso, se trata de entender que este grupo de neuronas recibe los datos procedentes de las neuronas de entrada, les aplican unos pesos, los suman y, finalmente, normalizan sus resultados.

¿Qué ocurre a continuación? Que los valores normalizados resultantes, son de nuevo entregados a otro grupo de neuronas, donde se vuelve a realizar el mismo proceso. Lo único que cambia ahora es el número de neuronas del nuevo grupo y los pesos que las neuronas de éste nuevo grupo aplican a los valores normalizados recibidos del grupo anterior. Finalmente habrá, como hemos visto, un grupo de neuronas cuyos cómputos finales generen la impresión en bruto de la imagen que estamos viendo.

Olvidemos por un momento nuestro ejemplo de cómo obtener la impresión de una imagen y pensemos en un problema más sencillo, como puede ser el de reconocimiento de un signo numérico: de un número.

¿Según el modelo propuesto, en qué consiste equivocarse? En obtener un resultado de cómputo en el grupo final de neuronas que no concuerde con el resultado esperado. En concluir por ejemplo, que el número observado es un cinco cuando en realidad se trata de un dos.

Pero, ¿por qué sabemos que nos hemos equivocado? Porque nos han enseñado muchas, pero que muchas veces, durante nuestra infancia cual debe de ser el resultado correcto. ¿Y qué podemos hacer para subsanar en nuestro modelo el error? ¿Cómo puede nuestra red corregir sus resultados?

La respuesta a esta pregunta es cambiando los pesos empleados por las neuronas que realizan los cómputos, una y otra vez, hasta ir aproximándose cada vez más a los resultados esperados. Por eso, de niños nos pasamos gran parte de nuestra infancia repitiendo una y otra vez las mismas palabras. Por eso el intérprete se lo pasa ensayando una y otra vez ejecutando la misma pieza. Para “aprender” las redes neuronales de nuestro cerebro necesitan repetir, hasta la extenuación, los mismos procedimientos una y otra vez, ajustando en cada iteración los pesos empleados hasta acercarse a los resultados deseados. ¿Quién no recuerda la primera vez que aprendió a montar en bici?

Conclusión cuarta: desde esta perspectiva, el aprendizaje consiste en el ajuste de los pesos que nuestras redes neuronales producen en cada iteración.

Por lo tanto, para que la red neuronal de un programa “aprenda”, para poder llamarlo “sistema inteligente”, tendremos, al igual que con el niño, “enseñarle” cuál es el resultado que queremos que obtenga: le enseñaremos a reconocer números; le enseñaremos a diagnosticar; a interpretar música… En suma, le enseñaremos a ejecutar capacidades, que hasta no hace muy poco, considerábamos que sólo un ser humano era capaz de realizar.

Así, en el ejemplo que mencionábamos anteriormente de reconocimiento de números, se acompaña junto al número de entrada el resultado que esperamos que la red obtenga, mediante un número suficientemente de casos. Podemos estar hablando por ejemplo, de mostrarle a una red de este tipo al menos unos 60.000 números diferentes, antes de que ante cualquier número sea capaz de reconocerlo con el suficiente grado de precisión: es decir, de acercarse a nuestro grado de precisión ante el reconocimiento de un “manchon”, al cual se le supone ser un número.

En cada caso, en cada iteración, codificamos a ceros y unos el número que deseamos que la red reconozca, junto a su resultado. El resultado puede consistir en un grupo de 10 números comprendidos en el intervalo 0-1, siendo el mayor de ellos el número en cuestión. Por ejemplo: 0,1|0,9|0,1|0,1|0,1|0,1|0,1|0,1|0,1|0,1 podría indicar que queremos que la red reconozca al número dos, que en el ejemplo es al que atribuimos un mayor valor: 0,9.

El número codificado se le pasará al primer grupo de neuronas de entrada, también conocido en la terminología al uso como “capa de entrada”. Sus valores se pasarán posteriormente a las neuronas de los grupos de las “capas intermedias” de cómputo para aplicarles los pesos, sumarlos y normalizar sus resultados. Y finalmente un último grupo de neuronas, la “capa de salida” obtendrá un resultado que habrá de ser contrastado con el resultado de ejemplo. Si éste no es el esperado, la red aplicará un mecanismo de reajuste de todos sus pesos, conocido como “backpropagation”.

El nombre se debe a que primeramente se reajustaran los pesos empleados en los cómputos por las neuronas de la capa de salida, para en base a este reajuste ir procediendo a reajustar los pesos empleados en los cómputos de las neuronas de las capas intermedias: esto es, el reajuste de los pesos se realiza en el sentido inverso a como se fueron realizando los cómputos originales.

Después de realizarse este mismo procedimiento con miles de números, la red “aprende”. Esto es, es capaz con una fiabilidad muy cercana a la de un humano de reconocer un número.

Piénsese que ni siquiera nosotros somos infalibles en un ciento por ciento a la hora de reconocer ciertos números manuscritos: ¡o si una mesa de diseño resulta ser que es realmente un taburete! Hemos tenido que observar un montón de números durante toda nuestra existencia hasta aprender a reconocerlos sin problemas.

Conclusión quinta: va a ser verdad que tiene razón Richard Vaughan cuando nos dice que la única manera de aprender Inglés correctamente es repitiendo y repitiendo una y otra vez las mismas estructuras gramaticales 🙂

Finalmente, cuando una red ha aprendido a resolver un problema concreto: reconocer un número; reconocer una cara; proponer la siguiente palabra de un escrito; sugerir un diagnóstico clínico; o jugar una partida al Go. Y la empleamos dentro de un sistema, éste torna en lo que denominamos un “sistema inteligente”. Los sistemas que los artículos de los periódicos suelen mencionar cuando se refieren a la “inteligencia artificial”.

Quizás la “inteligencia” del ser humano no consista tan solamente en éste aprendizaje del ajuste de los pesos que nos lleva a la resolución de una gran parte de problemas, pero parece jugar un papel bastante importante en él.

Se presenta una red neuronal al concurso. ¿Cuál crees que sería la pregunta que decidiría resolver para llevarse el “gran premio”?

 

Bibliografía

  1. Tariq Rashid. Create Independent Publishing Platform. Make your own neural network.

Blogs

Machine Learning is Fun!

Frameworks

Microsoft Cognitive Services

Anuncios

Lenguajes de marcado

Los lenguajes de marcado tienen por finalidad identificar mediante marcas o etiquetas diferentes tipos de contenido en un texto. Por ejemplo, en el siguiente fragmento de texto, extraído de la WikipediA:

“Sir Ridley Scott (n. 30 de noviembre de 1937) es un director de cine británico. Ha sido nominado en tres ocasiones a los premios Óscar a la mejor dirección. En enero de 2003 fue nombrado caballero por la reina Isabel II.

Algunas de sus películas son consideradas como auténticas obras de culto, especialmente Blade Runner y Alien, el octavo pasajero.”

Continuar leyendo

“Como dirían los antiguos, de su logos”

A H.M. y E.A.

En anteriores posts hemos visto como un <<lenguaje formal>> no es más que un constructo humano formado por un alfabeto bien definido de símbolos y una serie de reglas que nos permiten formar palabras y oraciones sobre dichos símbolos.

Hemos visto ejemplos de lenguajes formales: el ajedrez, el código morse, las matemáticas, los lenguajes de programación, los lenguajes de marcado, los lenguajes de formato, etc.

Pero hay un tipo especial de estos lenguajes que no hemos tratado aún: los <<lenguajes lógicos>>. Y no me refiero con ello al estilo empleado en las novelas policiacas.

Continuar leyendo

Haz “literalmente” que te salga humo de la cabeza

Imagina la siguiente escena. Caminas por una esfera. Te encuentras perdido. Entonces divisas una mujer. Parece preocupada.

– ¿Has visto a mi hija?– te pregunta.

–No, no la he visto –la respondes– Lo cierto es que me he perdido andando por esta esfera.  ¿Cómo se llama?

–Su nombre es Albia. Si la encuentras y la traes conmigo te explicaré cómo guiarte por la esfera.

–De acuerdo– la respondes. Y partes a buscar a la muchacha.

Continuar leyendo

Programación orientada a “cosas”

Los filósofos del entorno de preproducción, los llamados filósofos presocráticos (llamados así por Aristóteles, que por supuesto se consideraba así mismo como un filósofo del entorno de producción), se hicieron la siguiente pregunta: ¿qué tienen en común todas las cosas? Y contestaron, para deleite de los capítulos introductorios de los libros de divulgación científica, que lo común a todas las cosas era el agua, el aire o lo indeterminado: el apeiron en griego clásico.

Continuar leyendo