Eu já vi algumas perguntas neste site sobre o Deep Dream, no entanto, nenhuma delas parece realmente falar sobre o que o DeepDream está fazendo, especificamente. Até onde eu entendi, eles parecem ter alterado a função objetivo e também a retropropagação, de modo que, em vez de atualizar pesos, atualizam a imagem de entrada.
Gostaria de saber se alguém sabe exatamente o que o Google fez. Eles mencionam em um de seus artigos a imposição de anteriores Bayesianos quando realizam sua otimização, e com isso eu posso imaginar que não é difícil conseguir a rede neural para cuspir uma imagem para cada rótulo - podemos simplesmente defini-lo e depois otimizar o vetor de entrada adequadamente.
No entanto, a parte interessante do sonho profundo é que ele é feito por camada e, nesse sentido, não tenho muita certeza de como isso enfatiza os detalhes de uma maneira por camada.
Certamente, alimentar uma imagem fornecerá valores em cada neurônio, mas como podemos usar essas informações para exagerar os detalhes na imagem original? Eu lutei para encontrar algum artigo detalhado sobre isso.
Referências: Aqui o vzn respondeu a uma pergunta semelhante: /cs//a/44857/49671
Nesse link, há uma implementação do Deepdream, aqui: http://auduno.com/post/125362849838/visualizing-googlenet-classes
Exceto que ele não oferece exagero de recursos, conforme discutido aqui: http://googleresearch.blogspot.com/2015/06/inceptionism-going-deeper-into-neural.html
Onde ambos mostram a visualização de classes particulares e camadas específicas e dizem:
Em vez de prescrever exatamente qual recurso queremos que a rede amplifique, também podemos permitir que a rede tome essa decisão. Nesse caso, simplesmente alimentamos a rede com uma imagem ou foto arbitrária e deixamos a rede analisar a imagem. Em seguida, escolhemos uma camada e pedimos à rede para aprimorar o que foi detectado.