Neural networks have been black
boxes for a long time. This is a problem that caused enterprise applications to
limit neural network utilization. Enterprise application will not trust neural
networks until the application is capable of highlighting that the prediction
or the output is derived based on which activation sequence within the neural
network. Somehow in 2015 Google brain team published an article visualizing
what happens within a neural network. Where they named findings as “Inceptionism”.
A sudden glance of deep dream images
may convince someone that these are psychedelic trippy arts. These images
represent how a neural network perceive their inputs, particularly input in the
form of images.
When training a neural network
with back-propagation, algorithm starts to detect different features in
different layers. Layers at the beginning of the network would pay attention to
features like detecting edges whereas layers at the end would identify large
features like detecting objects. Therefore, the idea behind this it to maximize
the output of a layer at the end of the neural network. Let’s say we are going
to train a network to detect cats. Instead of feeding images with single cat,
we could train the model for images with multiple cats (like below image). Then the
network starts to guess more features in whatever the image we are going to
feed in and there we go!
An image with multiple target feature can be used for
training.
|
A simple explanation of deep
dreaming can be found in below YouTube video.
The code that I used for this is
available in GitHub. I’m intending to deep dive in to convolutional neural networks
in another post.