He visto algunas preguntas en este sitio sobre Deep Dream, sin embargo, ninguna de ellas parece hablar realmente de lo que está haciendo DeepDream, específicamente. Por lo que he deducido, parecen haber cambiado la función objetivo, y también han cambiado la propagación hacia atrás para que, en lugar de actualizar los pesos, actualicen la imagen de entrada.
Me pregunto si alguien sabe exactamente qué hizo Google. Mencionan en uno de sus artículos la imposición de antecedentes bayesianos cuando llevan a cabo su optimización, y con esto puedo imaginar que lograr que la red neuronal escupe una imagen para cada etiqueta no es tan difícil: simplemente podemos configurar la etiqueta, y luego optimizar el vector de entrada en consecuencia.
Sin embargo, la parte interesante del sueño profundo es que hace esto por capa, y en este sentido no estoy muy seguro de cómo enfatiza los detalles de una manera por capa.
Ciertamente, alimentar una imagen le dará valores en cada neurona, pero ¿cómo podemos usar esa información para exagerar los detalles en la imagen original? He tenido problemas para encontrar informes detallados sobre esto.
Referencias: Aquí vzn respondió una pregunta similar: /cs//a/44857/49671
Desde ese enlace, hay una implementación de Deepdream, aquí: http://auduno.com/post/125362849838/visualizing-googlenet-classes
Excepto que no ofrece una exageración de las características como se discute aquí: http://googleresearch.blogspot.com/2015/06/inceptionism-going-deeper-into-neural.html
Donde ambos muestran la visualización de clases particulares y capas particulares, y dicen:
En lugar de prescribir exactamente qué función queremos que amplifique la red, también podemos dejar que la red tome esa decisión. En este caso, simplemente alimentamos a la red con una imagen o foto arbitraria y dejamos que la red analice la imagen. Luego elegimos una capa y le pedimos a la red que mejore lo que detectó.