1. Convolutional Neural Network(CNN)
CNN大多数应用于影像方面,例如给机器一张图片,让机器识别图片中是什么东西。 一般首先要假设图形的大小都是一样的,再进行训练,目标用独热码的一个vector来
y
y
y表示。 首先,我们要先将影像转化为电脑能看懂的形式。 对于电脑来说,一张图片就是一个三维的Tensor。 这三维分别是宽和高以及通道数(RGB),宽和高代表了像素的数量。我们的输入都是向量,所以我们要把它拉成一个向量。 这样的话,输入就是100x100x3的向量,这样如果一层有1000个Neuron,第一层的weight就会有很多。这样对于全连接层来说,很容易产生over fitting。
对于影像来说,其实在过程中需要检测到有没有出现一些有用的形态特征(pattern)。
就算是人类,在观察这张图片的时候,也是抓取了图片中很像鸟嘴的特征进行判断。
1.1 Neuron Version
我们基于图片的这种特性,对方法进行两方面的简化:
- 使用感受野
所以,我们可以设定一些感受野,一个神经元只需要关注这一个小的区域就可以了,它的输入只需要是这个感受野里的数值。 不同的感受野之间也可以重叠,一个感受野也可以有多个神经元进行观察。具体的感受野形状、尺寸大小。通道等参数,可以自己根据对问题的理解自己设定。
大多数时候,都选择三通道,我们把感受野的尺寸(kernel size)设置为3x3,一般同一个感受野会有一组神经元去检测它,步长一般设置为2。 当超出了图片的范围时一般会做padding来补值。
-
参数共享 我们通过让各个神经元共享参数实现对全图的检测,不论特征出现在图中哪个地方都会被检测到。 所以其实最后只有一组神经元的参数被每一个receptive field所共用,这些神经元公用的参数被称为filter。
而Receptive Field + Parameter Sharing = Convolutional Layer
1.2 Filter Version Story
假设Filter的数值已知,如图所示,其实这个filter就是在对角线出现三个1的时候数值最大,这也是找一种特征。
经过64个filter内积后得到的结果,拼接起来其实也可以看作一张特殊的“图片”,有64个通道。 这时候第二次的Convolution层的filter就需要是3x3x64的尺寸。 在第二层的卷积层,如果用的还是3x3的filter,其实已经可以获得原图片中5x5的区域特征了,所以不用担心3x3的无妨获得较大范围的特征。只要层数越深,检测到的范围就会越大!
卷积层与神经网络的关系: 每个Filter就是各个感受野上对应神经元共享的一组参数,Filter的个数就说明了感受野上有多少个神经元在进行观测。
1.3 Pooling
把大图片变小,并没有参数,只是一个操作。Max Pooling就是选择一个范围内最大的值。 实际上我们把Pooling结合到卷积操作后,但有时候会造成一些“损伤”。 近年来很多时候都用Full-Cov,不用Pooling。因为pooling是用来减少计算量,而随着算力资源的发展就慢慢不需要了。 在分类问题中最后把卷积后的结果拉直成一个向量(Flatten操作),经过一个全连接层、softmax这些分类的基本步骤就完 成了。 我们可以发现在Alpha Go中并没有用到pooling,所以网络一定要根据情况进行设计,炼丹也要讲究方法。
|