martes, 1 de marzo de 2016

Introducción a las redes neuronales



¿Qué es una red neuronal?

El propósito de este texto es el de realizar una muy simplificada introducción al mundo de las redes neuronales, con el objeto de facilitar la comprensión de textos más elaborados.

Si tras leer este texto un lector neófito en el tema sale con la sensación de que entiende los mecanismos que hay detrás de los procesos generales que rigen las redes neuronales: ¿qué son?, ¿cómo funcionan?, ¿qué es el aprendizaje o entrenamiento?, etc., entonces el texto habrá cumplido su propósito.

Según la Wikipedia: Las redes de neuronas artificiales (denominadas habitualmente como RNA o en inglés como: "ANN") son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexión de neuronas que colaboran entre sí para producir un estímulo de salida. En inteligencia artificial es frecuente referirse a ellas como redes de neuronas o redes neuronales.

Más coloquialmente, una red neuronal artificial pretende replicar mediante software o hardware, los mecanismos que rigen la toma de decisiones y el aprendizaje de los cerebros de los organismos vivos.

Los ordenadores tienen una enorme capacidad de cálculo, alcanzan velocidades que nuestro cerebro sería incapaz de emular. Pero sin embargo, tienen grandes dificultades para realizar tareas que nosotros hacemos sin esfuerzo, como es reconocer patrones, o caras, imágenes, etc.

Es dentro de este ámbito, el de las actividades que no se les da bien a los ordenadores, donde está indicado el empleo de las redes neuronales artificiales, las cuales, al replicar la operativa de un cerebro, son capaces de realizar dichas actividades de manera análoga a un cerebro biológico.

¿Cómo funciona una red neuronal?

Simplificando mucho, un cerebro está compuesto de varias “capas” de neuronas, conectadas entre sí formando una tupida maya. Con esta distribución a cada neurona le llegan una serie de entradas (a través de las dendritas), y acaba conectada con las siguientes “capas” de neuronas mediante una serie de salidas (conectadas a su vez a las dendritas de las neuronas posteriores). Dicha conexión se realiza mediante un tipo de enlace bioquímico capaz de transmitir impulsos eléctricos, llamado sinapsis.

A efectos prácticos, cuando a nuestro cerebro le llega un estímulo de entrada, (por ejemplo el carácter “C”), y lo procesa, es capaz de devolvernos como salida el fonema asociado a dicho carácter (“C” = “ce”). Esta asociación símbolo-fonema, es fruto del aprendizaje que hemos tenido, el cual ha quedado registrado en nuestro cerebro en forma de conexiones entre neuronas, definiendo caminos para el impulso nervioso. Dichos caminos “guían” el flujo del impulso hacia una salida, de forma que el flujo que ha seguido el impulso tiene asociado el fonema correcto.

Con este ejemplo en mente, si imaginamos un cerebro, como una serie de neuronas conectadas entre sí, formando una red en distintas capas, con sus conexiones ya definidas, la respuesta que proporcionaría dicho cerebro ante una determinada entrada, se correspondería con la salida dependiente del camino que siguiera el impulso nervioso.


Dicho camino dependería a su vez de la resistencia eléctrica ofrecida al impulso eléctrico de la sinapsis. Caminos con menor resistencia proporcionarían antes una respuesta.

Cuando un cerebro esta “limpio“, la resistencia eléctrica de todos los caminos es similar, por lo que la salida que proporcionaría un cerebro “limpia” ante un determinado estímulo sería arbitraria.

Es mediante el proceso de aprendizaje que se fijan las resistencias a los estímulos eléctricos que dirigen los flujos hacia salidas correctas.

A muy alto nivel, el proceso de aprendizaje de un cerebro funcionaría de la siguiente manera:

Si se proporcionase como entrada un estímulo que se correspondiese con el carácter “C”, dicho cerebro debe aprender que esa representación gráfica se corresponde con el fonema “ce”, modificando a menores las resistencias eléctricas que aproximen la salida hacía el fonema “ce” y/o incrementando las resistencias de aquellos caminos que alejen la salida de dicho fonema.

La ventaja de este mecanismo es que, como todas las entradas proporcionan una salida, siempre habrá una respuesta ante un estímulo, aunque este no sea conocido. La salida de dicha respuesta, circulara por los caminos que más se parezcan a los conocimientos que tenga dicho cerebro, lo que permitirá que un cerebro infiera resultados en función de los conocimientos que ya tuviera almacenados 

En base a esto, cuanto mayor sea el aprendizaje y mayor el número de casos que conozca un cerebro, (más símbolos y más fonemas), más fiables serán los resultados que proporcione como salida ante estímulos similares (“ C parecido a c parecido a < ”), lo cual le permitirá responder con fiabilidad ante estímulos desconocidos.

Es decir, un cerebro con el conocimiento necesario es capaz de distinguir la “C” de la “O”, pese a su similitud gráfica y de identificar correctamente los caracteres “c” o “<” como “otros tipos” de “C”.

Una vez comprendido cómo funciona el proceso de reconocimiento de patrones en un cerebro, es posible replicar este comportamiento mediante un modelo de software.

Redes Neuronales Artificiales

Para replicar este funcionamiento (reconocimiento de patrones) a nivel lógico, necesitaremos disponer de una neurona artificial, que acepte varias entradas, que sea capaz de simular la resistencia al impulso eléctrico como lo hace una neurona de verdad y que sea capaz de proporcionar una salida. La salida puede ser conectada a una o varias de las entradas de otra u otras neuronas artificiales para formar una red.

Hay varios tipos de redes artificiales, el modelo más sencillo se denomina “perceptrón”. 

Inventado en 1957 (Frank Rosenblatt), el perceptrón es la más simple de las redes neuronales posibles. Representa a una única neurona. Un perceptrón se compone de una o más entradas, un procesador, y una única salida.


Ilustración 1: Esquema Perceptrón

El objeto del perceptrón es el de emular el funcionamiento de una neurona, como tal por sí mismo, carece de sentido o aplicación, pero en conjunto con otros perceptrones, configurados en forma de red, y tras el entrenamiento necesario (aprendizaje), es posible emular el procesamiento de patrones de manera similar a la que realizaría un cerebro.

 Ilustración 2: Modelo básico de Perceptrón

El modelo del “perceptrón” parte de una serie de entradas (X), que ven modificado su valor por una serie de pesos (W). Mediante estos pesos se simula las resistencias sinápticas neuronales, sólo que en vez de aumentar o disminuir la resistencia al impulso inicial, se amplifica o disminuye su valor, en función de la afinidad con el conocimiento de la red.

Todos estos valores (las entradas con sus pesos correspondientes) se integran en un único valor.

Se emplea una función de activación (que procesa los valores para mantenerlos dentro de los límites fijados, normalizándolos), y como resultado se produce una salida, la cual puede emplearse como entrada para otro u otros perceptrones de la red neuronal.

Este proceso repetido a lo largo de toda la red, produce una única salida, cuyo valor ha ido transformándose a medida que ha ido fluyendo por los distintos caminos 

El proceso de aprendizaje (llamado entrenamiento) es el que define y fija los pesos sinápticos (W), de todas las entradas de los perceptrones de la red. De forma que es mediante el entrenamiento, como se almacena el conocimiento en la red.

Como ejemplo:

Imaginemos que queremos diseñar una red neuronal que nos ayude a predecir el precio aproximado que tendrá la gasolina. 

Imaginemos así mismo, que conocemos el histórico de la evolución semanal de los precios de la gasolina:  

Lunes
Martes
Miércoles
Jueves
Viernes
Sábado
Domingo
0.98
0.99
0.97
1.02
1.03
1.00
1.02
1.09
1.02
0.97
1.03
1.01
0,99
1.01
0.98
0.99
1.02
1.02
1.01
1.02
1.05
..
0.98
0.99
1.02
0,97
1.03
1.00
1.03

Podríamos diseñar la red neuronal como una red de neuronas artificiales, con 6 entradas y una salida.

De esta forma, podríamos proporcionarle la evolución semanal del precio de la gasolina de lunes a sábado (un valor por cada entrada), y obtener como salida el precio esperado para el domingo (la salida). 

Para ello, deberíamos entrenar nuestra red, proporcionándole series de 6 datos de precios (de lunes a sábado) y comparar la salida con el precio conocido del domingo, ajustando los pesos ponderados en función de lo lejos o cerca que se fueran quedando los resultados proporcionados por la red.

Tras el entrenamiento necesario, la red sería capaz de proporcionar valores que siguen el “patrón” oculto en la evolución de los precios y “predecir” un valor para los precios de los domingos.

Ilustración 3: Red neuronal artificial “perceptrón” multicapa con n neuronas de entrada, m neuronas en su capa oculta y una neurona de salida

Habitualmente, las redes neuronales, están formadas por varias capas. Suelen disponer de una capa de entrada, que recoge los distintos inputs de la red, una o varias capas ocultas, donde se procesa la información, y una capa de salida, para devolver un resultado.

El éxito de una red, se ve claramente influenciado por su entrenamiento (cantidad y calidad), pero también por su arquitectura: número de entradas, número de capas, número de neuronas por capa, funciones de activación, de normalización, etc. 

Con esta introducción, hemos llegado al nivel básico de conocimiento sobre lo que es una Red Neuronal Artificial; si os ha parecido interesante, se puede profundizar mucho en el tema con un poco de investigación por vuestra cuenta.

Bibliografia: Podcast Cienciaes.com
Wikipedia (redes neuronales, perceptron)
Varias lecturas RNA

Autor: Andrés Lapique

Bootstrap vs Foundation



En los últimos años y tras la presentación de la web 2.0, Internet ha sufrido grandes transformaciones para adaptarse a los requisitos de los usuarios y por ese motivo los sitios web también han tenido una gran evolución. Aproximadamente en 2011 se comenzó a hablar de los sitios web responsive o adaptativos, técnica de diseño web capaz de proporcionar una visualización correcta del mismo sitio web en diferentes dispositivos.

A continuación se va hablar de los dos framework existentes más relevantes en la actualidad .


En primer lugar Bootstrap, framework desarrollado en 2011 por Twitter. Este permite dar forma a un sitio web usando librerias CSS que incorporan tipograficas, botones, cuadros, menús y otros muchos elementos que pueden ser utilizados en cualquier web. A pesar de que el desarrollo de este framework lo empezó Twitter, fue liberado bajo licencia MIT en 2011 y su desarrollo continua en un repositirio de GitHub.

Bootstrap 3, es un framework orientado al diseño web responsive con el que se pueden crear sitios estáticos y dinámicos. Actualmente es el número 1 del repertorio de Github. Esta versión presenta cambios significativos respecto a la versión anterior mejorando algunas caracteristicas como las siguientes:

- Soporte completo con HTML5 Y CSS3, proporcionando ser utilizado de manera flexible para desarrollo web.

- Se ha implementado un sistema GRID de 12 columnas donde se plasma el contenido.

- Establece Media Queries para 4 tamaños de dispositivos diferentes.

- Además admite insertar imágenes responsive.

- No tiene validación integrada en los formularios.

Foundation es un framework creado en 2011 por ZURB con el fin de crear sitios y aplicaciones web de una manera más sencilla y rápida.


Fue el primer framework responsive.

Contiene plantillas HTML y clases CSS para tipografía, formulas, botones, navegación y otros muchos elementos que pueden ser utilizados en cualquier web. Foundation es modular se basa en un conjunto de hojas de estilo Sass que implementan los distintos componentes de la caja de herramientas . Se puede personalizar el archivo Foundation con la selección de los componentes que se quieran utilizar en nuestro proyecto. Esto es posible mediante la hoja de estilos de la configuración central, los cambios más profundos se realizan modificando las variables Sass.

Sass es un preprocesador de hojas de estilo CSS, diseñado por Hampton Catlin y desarrollado por Nathan Weizenbaum. Este permite desarrollar de manera rápida a través de nuevas herramientas de personalización. La utilización de Sass permite la utilización de variables, funciones, operadores y selectores anidados o los conocidos mixins.

Las caracteristicas principales de Foundation son:

- Foundation tiene la validación de formularios integrado por Abide.

- Soporte completo con HTML5 Y CSS3, proporcionando ser utilizado de manera flexible para desarrollo web.

- Esta basado en un sistema de rejilla.

- Usa como unidad de calibración los REMS.

Las principales diferencias entre estos dos frameworks son:



Bootstrap
Foundation
Versión
3.3.4
5.5.2
Fecha de la última versión
16 de marzo del 2015
30 de abril del 2015
Multi-Navegador
Chrome (Mac, Windows, iOS y Android)
Safari (iOS y Mac)
Firefox (Mac y Windows)
Opera (Mac y Windows)
IE8+
Chrome (Mac, Windows, iOS y Android) Safari (IOS y  Mac)
Firefox (Mac y Windows)
Opera (Mac y Windows)
IE9+
Diseño web adaptable
Si
Si

Open Source
Si
Si
Tamaño
14 archivos a 1019 KB
30 archivos en 936 KB
Sass / SCSS
Configuracín de la cuadrícula
12 y la columna fija layoutFluid
12 layoutFluid columna, bloque y centrado disponibles.
Unidades de calibración
Píxeles
REMS
Integración con otros frameworks
Si
Limitada,  algunos frameworks.
Comunidad
Si
No tiene una comunidad oficial.
Documentación
Si
Muy poca documentación disponible.

Tabla 1 Diferencias entre los frameworks

En nuestro caso, se ha utilizado Bootstrap para el desarrollo de algunos de los proyectos como: PLAY, BOND y la Oficina Conectada entre otros.

Autor: Gala Bernal