# Deep Dream

Deep Dream es un algoritmo de procesamiento de imágenes creado por Google, que se basa en la enseñanza a sus computadoras en cuanto a la forma de ver, entender y apreciar nuestro mundo. Además, el algoritmo está formado por una red neuronal artificial, que fue entrenada mostrandole millones de imágenes como ejemplo, para así ajustar poco a poco los parámetros de la red neuronal hasta obtener la identificación de la imagen y clasificarla de la manera adecuada.
En este programa de Inteligencia Artificial se originan ideas oníricas de Google, clasificando imágenes con solo "mirarlas", para así reproducirlas o mejorarlas sobre la base de patrones formados durante el aprendizaje/entrenamiento. Muchas de las imágenes editadas muestran ojos de animales y sus caras, ya que es lo que el software ha sido entrenado para ver y reconocer.

## Software

El software Deep Dream fue desarrollado para el imageNet large scale visual recognition challenge (ILSVRC). Este era un desafío reto, propuesto a diferentes equipos de investigación, que consistió en crear un sistema de reconocimiento de objetos y su localización dentro de una misma imagen, aparte de su detección inmediata. En este Desafío se adjudicó a Google el primer premio en el año 2014, logrado gracias al uso del entrenamiento de redes neuronales.
En junio de 2015 Google publicó la investigación, y tras esto hizo su código fuente abierto utilizado para generar las imágenes en un IPython notebook. Con esto se permitió que las imágenes de la red neuronal pudiesen ser creadas por cualquiera.
El código se basa en Caffe y utiliza paquetes de códigos abiertos disponibles. Además, está diseñado para tener el menor número de dependencias posible.

## ¿Cómo funciona?

Las redes neuronales comprenden un sistema de procesamiento de información que simula el funcionamiento del sistema nervioso, mediante el uso de neuronas artificiales que aprenden y procesan información, modelando un problema matemáticamente por medio de algoritmos, para entregar una solución. Se les da el nombre de redes neuronales porque imitan de forma sencilla el sistema que tienen las neuronas de nuestro cerebro de procesar información.
    Estas redes neuronales tienen distintas características:
* Son capaces de adquirir información y utilizarla para mejorar su modo de funcionamiento.
* Imitan la forma en que el cerebro reorganiza la información cerebral.
* se autoorganizan.
* son dinámicas, tolerando y ajustando los errores por sí solas.
En el caso de Deep Dream, la red fue entrenada simplemente mostrando muchos ejemplos de lo que se quería que aprendiera, de manera que extrajera lo esencial de cada objeto. Así se construyó una red capaz de tomar decisiones y analizar por sí misma una imagen. En su utilización se escoge una capa para que la red mejore lo que ha sido detectado. Cada capa de la red incorpora características a un nivel diferente de abstracción, por lo que, la complejidad de las funciones generadas depende de qué capa se escoja para mejorar una imagen.
    Clasificación de capas neuronales:
* Primeras capas: Son sensibles a funciones básicas, como bordes y sus orientaciones.
* Capas intermedias: Interpretan características básicas; buscan formas o componentes generales, como una puerta o una hoja.
* Capas finales: Las neuronas se activan en respuesta a cosas muy complejas, como edificios o árboles, identificando características más sofisticadas.

## Resultados

Esta técnica da un sentido cualitativo del nivel de abstracción que una capa en particular ha conseguido en su comprensión de imágenes. Llamando a esta técnica "inceptionism" en referencia a la arquitectura de red neuronal utilizada.
En algunos casos la red neuronal no representa precisamente lo que se le pide. Como ejemplo, la red diseña un pensamiento que parecen ser pesas de gimnasia, pero no hay una imagen de la mancuerna completa, sin un levantador de pesas ahí. En este caso la red neuronal no pudo rescatar la esencia de una pesa, tal vez porque en el aprendizaje nunca se le mostró una mancuerna sin un brazo que la sostenga.
Se le pide a la red: "lo que ves ahí, quiero más de eso". Entonces, si una nube se ve como un pájaro, la red hará que se vea más como un pájaro; esto a su vez hace que la red reconozca al ave con más fuerza, hasta que aparezca un pájaro muy detallado. Obteniendo así, un resultado de sobre-interpretación, tal como cuando los niños disfrutan viendo las nubes e interpretando sus formas.

## Enigmas en estudio

¿Por qué el sueño de una inteligencia artificial refleja escenas similares a alucinaciones humanas?
Citas de Lucas Sjulson (Profesor asistente de investigación en el Instituto de Neurociencia Langone de la Universidad de Nueva York):
* "una cosa importante a recordar es que toda percepción sensorial en los seres humanos son alucinaciones limitadas por la información sensorial."
* "La gente piensa que el globo ocular es una cámara, pero no es una cámara." Los ojos permiten ver, pero el cerebro, en última instancia da sentido a lo que se ve.
* Cuando la gente toma drogas como LSD, que provocan una parte de la corteza cerebral que "conduce a la generabilidad de estos tipos de patrones". Esto es probablemente una especie de fenómeno similar."
* "El cerebro evolucionó durante largos períodos de tiempo para resolver problemas, y lo hace de una manera muy optimizada. Las cosas se aprenden con el desarrollo humano a través de la evolución y luego también a través de la experiencia visual."