Reconocimiento de formas mediante redes neuronales

Una de las aplicaciones más conocidas y más fácilmente comprensibles de los modelos computacionales basados en redes neuronales es la identificación de formas en una imagen o vídeo, haciendo posible no sólo que las máquinas sean capaces de ver, sino también de identificar los elementos presentes en lo que están viendo.

El modelo de redes neuronales basa su funcionamiento en el procesamiento paralelo y concurrente por parte de varias unidades independientes, que llamamos neuronas en analogía al modelo fisiológico en el que está basado este modelo, que evidentemente es el cerebro animal. En computación, las neuronas no dejan de ser pequeños programas informáticos admiten una información de entrada, realizan un procesamiento relativamente sencillo, y devuelven una salida, de la misma forma que suponemos que funcionan las neuronas humanas.

A diferencia del desarrollo de programas informáticos tradicionales, donde disponemos de programas monolíticos con capacidades de cálculo avanzadas, el modelo de redes neuronales divide la complejidad en un número virtualmente infinito, y cuanto menos extenso, de unidades neuronales. Así, cada neurona se encarga de una tarea diferente, y todas trabajan en conjunto. De forma que, según los datos de entrada, se activarán unas neuronas u otras. En base a las combinaciones de neuronas activadas, el resultado global será uno u otro.

Este es un concepto complejo en un principio, y que a todos los estudiantes de inteligencia artificial se les atraganta al principio, pero que tiene un gran sentido.

Redes neurales sencillas

Supongamos que tenemos, por simplificar mucho el cálculo, un sistema de cuatro neuronas. Ese sistema, como cualquier otro sistema neuronal, debe ser entrenado antes de ser puesto en funcionamiento. Esto quiere decir que, a diferencia de la programación clásica, nosotros no podemos (o no debemos) preprogramar a un sistema neuronal para reconocer, por ejemplo, un ojo. Lo que debemos hacer es mostrarle al sistema una cantidad grande de ojos.

Volviendo a nuestro sistema neural de 4 neuronas, supongamos que, tras enseñarle 100 ojos, siempre se activan las neuronas 1 y 3, permaneciendo las neuronas 2 y 4 desactivadas. De esta forma, el sistema aprende que, siempre que, al recibir un estímulo visual, se activan las neuronas 1 y 3 y no se activan las neuronas 2 y 4, es muy posible que lo que esté viendo sea un ojo.

Redes neurales profundas

Este modelo se puede ampliar para mejorar su eficiencia en un modelo mediante el cual las neuronas se agrupan por capas, en un esquema, una vez más simplificado, como el siguiente:

La información de entrada está en la capa amarilla. La información de salida, es decir el resultado, está en la capa roja. En el medio, pueden existir una serie de capas intermedias, llamadas ocultas ya que el resultado que arrojan no es de utilidad para el usuario de la aplicación, pero si que es de utilidad como información que alimenta a la capa siguiente.

Por ejemplo, supongamos que tomamos como entrada la siguiente imagen:

En lugar de procesar la imagen completa, buscando adivinar si dentro de la imagen existe una cara, podemos intentar dividir un reto tan grande, genérico y complejo en retos más pequeños y específicos, como por ejemplo buscar si en la imagen hay lineas rectas (horizontales, verticales y diagonales, por ejemplo), como estas:

Estas lineas se usan para compararlas contra la imagen original. El resultado de la primera capa de computación es numérica, pero podría ser representada de un modo parecido a este:

Reconocer si en la imagen se encuentra una cara podría ser complejo, aunque posible perfectamente en la teoría, mediante la comparación relativa del número de horizontales, verticales y diagonales.

Sin embargo, en un modelo de varias capas, esa información se pasa a la siguiente capa. En la siguiente capa solo se evalúa la posibilidad de que haya objetos un poco mas complejos que una línea recta, como un círculo o una forma de esquina (una «L»)

De esta forma, cada una de las capas va proporcionando información cada vez más compleja a la capa superior, de tal forma que unas pocas capas más adelante podemos encontrar conceptos más elevados como «ojo», «nariz», u «oreja», y por tanto en la última capa encontraríamos el concepto más elevado, que sería «cara» (si se disparan las neuronas correspondientes a «ojo» dos veces, «nariz» una vez, y «oreja» dos veces, es muy probable que la imagen contenga una cara.

Conclusión:

La solución de problemas computacionales mediante redes neuronales no es recomendable para todo tipo de problemas, pero sin embargo es una estrategia muy eficiente en aquellas situaciones en las que disponemos de unos datos de entrada complejos, como imágenes, y deseamos realizar tareas complejas como reconocimiento de formas.

 

Cómo profundizar más en el conocimiento de las redes neuronales

Actualmente estamos produciendo un curso para aprender a desarrollar aplicaciones de inteligencia artificial. Si quieres saber más, haz click aqui:

Curso de inteligencia artificial

 

 

 

¿Cual es el mejor lenguaje de programación para inteligencia artificial?

 

Frecuentemente recibo la pregunta acerca de cuál es el mejor lenguaje de programación para crear aplicaciones de inteligencia artificial. Otras veces, directamente la pregunta es si lenguajes como Python o bibliotecas como TensorFlow son los adecuados para crear este tipo de aplicaciones.

Así que el objetivo de este artículo es aclarar algunos conceptos para poder elegir un lenguaje de programación u otro para desarrollar aplicaciones que hagan uso de la IA.

¿Qué es la IA?

Este concepto no es fácil de explicar. La inteligencia artificial no es un conjunto de instrucciones, ni un nuevo tipo de datos. Consiste en una serie de metodologías en las cuales podemos dotar a nuestros desarrollos de comportamientos percibidos como inteligentes. En definitiva, son metodologías, y no instrucciones.

Es por esto que, a priori, cualquier lenguaje de programación es válido para realizar aplicaciones de inteligencia artificial.

¿Qué lenguajes de programación existen?

Haciendo referencia al listado TIOBE, que muestra los lenguajes de programación más utilizados en el mercado, el listado para enero de 2019 muestra los siguientes datos:

https://www.tiobe.com/tiobe-index/

Jan 2019

Jan 2018

Change

Programming Language

Ratings

Change

1

1

 

Java

16.904%

+2.69%

2

2

 

C

13.337%

+2.30%

3

4

 

Python

8.294%

+3.62%

4

3

 

C++

8.158%

+2.55%

5

7

 

Visual Basic .NET

6.459%

+3.20%

6

6

 

JavaScript

3.302%

-0.16%

7

5

 

C#

3.284%

-0.47%

8

9

 

PHP

2.680%

+0.15%

9

 

SQL

2.277%

+2.28%

10

16

 

Objective-C

1.781%

-0.08%

Cualquiera de los lenguajes de programación de esta lista podría ser perfectamente válido para desarrollar aplicaciones de IA, a excepción probablemente del lenguaje SQL, que está orientado a consultas en bases de datos, en lugar de a desarrollo de aplicaciones.

Poríamos clasificar estos lenguajes en tres grandes grupos:

-Lenguajes de bajo nivel, que son aquellos que tienen mejor rendimiento, pero en los que el programador debe tomar muchas decisiones, de forma que puede optimizar la ejecución del programa, pero la probabilidad de cometer fallos es mayor. Ejemplos de estos lenguajes son C, C++ y Objective-C

-Lenguajes de alto nivel, que son aquellos que ofrecen una serie de abstracciones, de forma que el propio compilador toma algunas decisiones, liberando al desarrollador de tomarlas. De esta forma, estos lenguajes suelen ser menos eficientes en la ejecución, ya que las decisiones que se toman automáticamente por el compilador no suelen ser tan inteligentes como las que toma un ser humano. Sin embargo, dado que el desarrollador tiene que tomar menos decisiones, las probabilidades de fallo son menores. Ejemplos de estos lenguajes son Python y Javascript

-Lenguajes de nivel intermedio: Encontramos dentro de este grupo aquellos lenguajes que buscan un balance óptimo entre rendimiento y dificultad. De esta forma, ponen muchas decisiones en manos del usuario programador, pero a la vez ofrecen una serie de facilidades y herramientas para prevenir y arreglar los errores de código. Un ejemplo de este tipo de lenguajes es Java.

Eligiendo el mejor lenguaje:

Antes de elegir un lenguaje u otro, teniendo en cuenta que todos los lenguajes de la lista son perfectamente válidos, deberemos establecer un criterio para la elección, y no todos tenemos por qué tener el mismo criterio.

Por ejemplo, un criterio podría ser el rendimiento. Es decir, que nuestras aplicaciones se ejecuten lo más rápido posible. Este criterio es importante, ya que muchas aplicaciones de inteligencia artificial deben funcionar y proporcionar resultados en un tiempo aceptable, ya que, en caso contrario, podría considerarse que nuestras aplicaciones son inteligentes, pero lentas (y por tanto podrían ser percibidas por los usuarios finales como aplicaciones “no tan inteligentes”, aunque la velocidad no tenga que ver directamente con la calidad de los resultados)

En este caso, podríamos elegir aquellos lenguajes de más bajo nivel, como C o C++

Evidentemente, en este caso, puesto que el propio aprendizaje y puesta en práctica de las metodologías de inteligencia artificial en un lenguaje concreto es complejo, tendríamos que tener un nivel de partida bastante fluido en estos lenguajes.

Otro criterio posible sería la facilidad de uso del lenguaje de programación. Esta es la opción que suele elegirse para formación relacionada con la inteligencia artificial. De esta forma, el alumno se preocupa únicamente por las complejidades derivadas de la implementación de la IA, y no de las complejidades propias del lenguaje de programación. Esta es la razón por la cual los lenguajes como Python son tan famosos en los cursos de formación relacionados con este ámbito, en contra de la creencia popular de que es debido a su potencia, es por su facilidad y su flexibilidad.

Un ejemplo más concreto del rendimiento entre los diferentes lenguajes de programación podemos encontrarlo en comparativas como la siguiente:

https://www.instagram.com/p/BQTe7NegeSq/

Esta es una de las comparativas que suelo realizar en todo tipo de formaciones relacionadas con la programación en múltiples lenguajes. El objetivo es proponer el mismo reto a resolver a diferentes lenguajes de programación, y observar los resultados.

En esta comparación podemos observar como, para un mismo cálculo, donde lenguajes de un nivel bajo tardan entre 24 y 25 segundos en completar su tarea, los lenguajes de alto nivel como Javascript tardan 38 segundos (aproximadamente un 52% más lentos), pero otros lenguajes como Python pueden llegar a tardar 157 segundos (es decir, un 650% más lentos que los lenguajes de bajo nivel). Por tanto, estos lenguajes no se eligen por su rendimiento sino por su facilidad de uso.

El lenguaje de programación R: Ventajas y desventajas

Existe una serie de lenguajes que suelen considerarse más aptos para el desarrollo de aplicaciones de inteligencia artificial. Uno de ellos es el lenguaje estadístico R.

La diferencia de este lenguaje con respecto a los genéricos es que incluye una serie de herramientas y librerías que facilitan tanto el cálculo como la presentación de resultados de análisis estadísticos (área que tiene una gran importancia en la inteligencia artificial).

Esto a la vez es bueno y a la vez no tanto. Desde un punto de vista del desarrollo, añade productividad permitiendo a los desarrolladores crear presentaciones de resultados de una forma muy sencilla.

Podemos encontrar dos grandes ejemplos de esto en la propia pagina de la Wikipedia:

https://es.wikipedia.org/wiki/R_(lenguaje_de_programaci%C3%B3n)

Repasando los dos ejemplos (tanto en su código fuente como en los resultados), veremos que la inclusión previa de las librerías correspondientes minimizan el código que tiene que desarrollar el ser humano, y automatizan al máximo la tarea de generación de gráficas.

Sin embargo, desde el punto de vista de la formación, realizar tantas abstracciones, en ocasiones puede no resultar tan conveniente, ya que si delegamos todos estos cálculos en el propio lenguaje de programación y sus librerías, no estaremos realmente aprendiendo a realizarlos, y si el día de mañana estamos obligados a cambiar a un lenguaje de programación más genérico, podremos darnos cuenta de la dependencia que habremos desarrollado con respecto al lenguaje de programación R

Aún así, por supuesto es recomendable que cualquier formación en inteligencia artificial contenga algún apartado que muestre a los alumnos el uso del lenguaje de programación R

Matlab y Octave:

En la lista TIOBE, el lenguaje que ocupa el puesto número 11 es Matlab, lo cual es igual de interesante como el lenguage R.

Matlab es un sistema algebráico presentado dentro de un entorno de desarrollo integrado, que desde hace muchos años facilita el desarrollo y la realización de múltiples tipos de cálculos a científicos que no tienen por qué tener conocimientos especialmente profundos de programación. De la misma forma que el lenguaje R provee una serie de facilidades y bibliotecas de presentación de resultados, MatLab realiza lo propio en un nivel todavía superior (el IDE consituye una forma muy asequible y agradable de aproximarse al desarrollo de proyectos que requieran cálculos)

En definitiva, tanto Matlab como software comercial, como Octave como alternativa de código abierto, son excelentes alternativas para personas que desean cumplir con el objetivo de acercarse al mundo de la inteligencia artificial, intentando facilitar o al menos abstraer las complejidades derivadas de los lenguajes de programación duros.

Diferentes niveles:

Dentro de las múltiples alternativas de las que disponemos como entornos de desarrollo para implementar proyectos de realidad virtual, dentro de que cualquier lenguaje de programación con unas mínimas capacidades es viable para implementar este tipo de proyectos, podríamos resumir:

Entornos como Matlab u Octave: Mayor facilidad y abstracción, eliminando o minimizando las dificultades de la programación. El propio entorno que nos facilita el trabajo es el que puede hacer que nuestras aplicaciones no sean posteriormente aplicables y portables en todas las plataformas. Aptos para desarrollar prototipos y en definitiva para que personas que no sean programadores puedan aproximarse a desarrollos de inteligencia artificial.

Lenguajes de programación específicos u optimizados, como R: Buena proporción entre esfuerzo y resultado, herramientas específicas para la tarea concreta. Sin embargo, son lenguajes tan específicos que luego no podemos usarlos para otros tipos de proyectos.

Lenguajes generalistas de programación de alto nivel: Buena proporción entre esfuerzo y resultado, y buen balance entre rendimiento, facilidad, y portabilidad del código en la implementación entre diferentes plataformas. Aptos para el aprendizaje y la implementación de aplicaciones reales de inteligencia artificial donde el rendimiento no sea un factor clave pero el éxito y la facilidad de la implementación si que lo sean.

Lenguajes generalistas de programación de bajo nivel: Alto rendimiento, exigen extensos conocimientos del propio lenguaje de programación ya que son propensos a cometer fallos humanos en la escritura del código. Aptos para la implementación final de aplicaciones en  las que el rendimiento sea un factor clave.

Un par de criterios más: facilidad de compilación y generalidad del lenguaje

Hay otra explicación por la cual los lenguajes de programación de alto nivel, como Python y Javascript, son ampliamente utilizados en formaciones relacionadas con inteligencia artificial, no es solo por su facilidad de uso sino también por la facilidad de puesta en marcha.

La puesta en marcha consiste en la serie de operaciones que deben realizarse para, desde cero, comenzar a desarrollar y ejecutar programas con un lenguaje de programación determinado.

En el caso de Python, todos los prerrequisitos pueden descargarse rápida y gratuitamente desde la página https://www.python.org/

Además, contiene instaladores para todo tipo de sistemas operativos y arquitecturas de hardware, lo que posibilita poder instalar y ejecutar programas en todo tipo de equipos informáticos, incluso en aquellos que están muy desactualizados.

El caso de Javascript es todavía más curioso, ya que cualquier navegador web de los que tenemos ya de por sí instalados en nuestro ordenador, llevan YA incorporados los intérpretes que permiten ejecutar programas realizados en este lenguaje de programación.

Únicamente en ese caso es necesario descargar algún editor de código para crear programas, como por ejemplo el archiconocido Notepad++:

https://notepad-plus-plus.org/download/v7.6.2.html

Conclusiones:

El desarrollo de aplicaciones de inteligencia artificial no se realiza de forma exclusiva con un lenguaje de programación u otro. Prácticamente cualquier lenguaje de programación es apto para realizar implementaciones de IA. Lo que si que es importante es conocer las ventajas y las desventajas de cada uno de los lenguajes, para escoger la mejor alternativa según el criterio o los criterios que se adapten a nuestras necesidades.

Quieres saber más?

Ya estamos inmersos de pleno en la era de la inteligencia artificial, que cambiará nuestras vidas y la forma en la que trabajamos. Pero, ¿estas preparad@ para estos cambios? El objetivo de este curso es proporcionarte las herramientas necesarias para que la inteligencia artificial sea una oportunidad y no una amenaza.

Con este curso, aprenderás las técnicas más punteras que empresas como Google, Facebook o Microsoft ya están utilizando para mejorar sus algoritmos. Cualquier dispositivo móvil, ya esté basado en Android o en iOS, ya está utilizando este tipo de tecnologías para mejorar tu experiencia de usuario. En breve, tus propios usuarios y tus clientes darán por hecho esta tecnología y esperarán que los servicios que tu les ofrezcas contengan inteligencia artificial. ¿Está preparada tu empresa para este reto?

Este curso se divide en tres módulos:

IA para todos – primer módulo del curso pensado para que todas las personas, aún sin conocimientos de programación, puedan entender y aprovechar las oportunidades que nos ofrece la inteligencia artificial


Programando aplicaciones de IA – segundo módulo del curso, en el cual ponemos en funcionamiento los conceptos principales del curso, permitiéndote desarrollar aplicaciones prácticas que usan inteligencia artificial


IA hasta el límite – Tercer módulo del curso en el que te mostramos cómo sacar el máximo partido a la inteligencia artificial desarrollando aplicaciones de visión artificial, procesamiento del lenguaje, y combinación con Big Data, entre otros


Visión estereoscópica e inteligencia artificial

Proyecto de visión stereo.

En este desarrollo se aplica un algoritmo de cálculo mediante el cual, a partir de un par de vistas estereoscópicas, se obtiene un cálculo de la profundidad de cada uno de los puntos de la imagen. En este proyecto se presenta el cálculo de las distancias como un mapa de profundidad, una imagen en la que los puntos más claros son los más cercanos a la cámara, y los más oscuros son los más lejanos.

La visión estereoscópica es importante en el contexto de la inteligencia artificial, ya que permite a los sistemas inteligentes conocer su entorno y saber con precisión qué es lo que tienen delante, de forma previa a su procesamiento y toma de decisiones.

Este proyecto forma parte de los ejercicios del curso de inteligencia artificial – https://jocarsa.com/curso-de-inteligencia-artificial

Diseño generativo aplicado al sector de la iluminación

El diseño generativo, asociado con el diseño basado en el machine learning y la inteligencia artificial, es clave para entender el futuro de la producción industrial.

 

El diseño generativo permite que, una vez que se han realizado una serie de restricciones de base, el sistema informático pueda generar una serie de variaciones y evoluciones de forma automática en el diseño del producto.

Esto permite obtener un número muy amplio de diseños de forma automatizada, aumentando tanto la productividad como la calidad del producto final.

 

Gracias a los servicios que ofrecemos, que combinan el diseño con la inteligencia artificial, podemos ofrecer a nuestros clientes soluciones que les permitirán estar al día con la aplicación de las nuevas tecnologías de inteligencia artificial a su empresa