目录
Why CNN for Image?
The whole CNN structure
Convolution(卷积)
Max Pooling
Flatten
CNN in Keras
What does CNN learn?
what does filter do
what does neuron do
what about output
Deep Dream
Application
Playing Go
Speech
Text
Why CNN for Image?
当我们直接用一般的fully connected的feedforward network来做图像处理的时候,往往会需要太多的参数;用CNN来做,就可以简化neural network的架构,我们根据自己的知识和对图像处理的理解,一开始就把某些实际上用不到的参数给过滤掉。
- 对一个神经元来说,想要侦测有没有某一个pattern出现,它其实并不需要看整张image,只需要看这张image的一小部分,就可以决定这件事情了。
- 相同的pattern在不同区域时,神经元就可以使用相同的参数来学习不同位置的pattern。
- 我们可以对一张image做subsampling(二次抽样),对图像辨识来说,是没有太大的影响的。
The whole CNN structure
下图展示了CNN的整体流程。
convolution主要做两件事,第一件事检测某个pattern不需要看整张image,然后第二件事是同一个pattern会出现在图片的不同区域。Max Pooling主要做缩放图片。
Convolution(卷积)
- Property 1
每一个Filter都是通过Training data学出来的,而不是人为设计的。当它侦测的时候,并不会去看整张image,它只看一个3*3范围内的pixel,就可以判断某一个pattern有没有出现,这就考虑了property 1。
- Property 2
同一个pattern出现在image左上角的位置和左下角的位置,并不需要用到不同的filter,我们用filter1就可以侦测出来,这就考虑了property 2
- Feature Map(特征映射)
我们用不同的filter去做convolution得到的结果就叫Feature Map(特征映射),有多少个filter,对应就有多少个映射后的image。
- Convolution V.s. Fully connected
每一个filter就相当于一个神经元。如下图,我们将36个特征值排成一列,而filter1就相当于是9个w。下图用不同的颜色代表不同的w,卷积的时候并没有将所有的特征值与filter做内积,这也减少了参数的使用。
Max Pooling
现在,我们将每个feature map划分成四等分,取每一份里最大的。
这时feature map变成了2x2的矩阵了,再次减少了特征。
Flatten
Flatten就是,把左边的feature map拉直,然后把它丢进一个Fully connected Feedforward network。
CNN in Keras
What does CNN learn?
我们任取一个filter,我们用来表示该filter每一个参数的和,这个和表示该filter被激活(被训练)的程度。这时我们要找一个输入x,这个x可以让这个和最大,当这个和最大的时候,被激活的程度也就越大。这时,我们使用梯度上升的方法去寻找使最大的x*。
what does filter do
假设说我在50个filter里任取12个filter,然后来分别看这12个filter找的x*,我们发现每个filter找的x都比较有特点,也就是说每一个filter可以识别一张图的某一类特点。
what does neuron do
然后我们将经过CNN的image在flatten后传入fully connect network。然后任取一个神经元记为aj,我要找到使aj最大的x。
每一个neuron不再是只看整张图的一小部分,它现在的工作是看整张图。
what about output
然后我们来找令output最大的x*,结果如下,我们发现这就张图我们是看不懂的。但是是机器可以识别它们分别代表哪一个数字。那么我们对它进行处理,L1正则化,这时的识别效果会好很多。
Deep Dream
Deep Dream是,如果你给machine一张image,它会在这个image里面加上它看到的东西。
- Deep Style
如果今天你input一张image,Deep Style做的事情就是让machine去修改这张图,让它有另外一张图的风格,如下所示。
Application
-
Playing Go
对于CNN来说,就是直接把它当成一个image来看待,然后再output下一步要落子的位置。
Speech
filter只在Frequency即纵坐标的方向上移动,而不在时间的序列上移动。
Text
首你把这个word sequence里面的每一个word都用一个vector来表示,vector代表的这个word本身的semantic (语义),那如果两个word本身含义越接近的话,它们的vector在高维的空间上就越接近,这个东西就叫做word embedding。