您现在的位置是:首页 >技术交流 >Convolutional Neural network(卷积神经网络)网站首页技术交流
Convolutional Neural network(卷积神经网络)
目录
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。