使用时具有的CNN的三个属性
1.局部的特征可能比全部小,即就是局部特征(比如鸟的嘴)比较明显,也比较重要
2.相同的特征可能出现在不同的位置。
3.提取部分像素不会改变我们对这个东西的判断(缩小版的鸟)
满足以上的条件我们就可以使用CNN
CNN的流程
1.input 输入
2.convolution 卷积
3.max pooling 池化
4.convolution 卷积
5.max pooling 池化
6.flatten 展平
7.全连接
其中2-5可以重复
- 输入数据类型为3维的3-D tensor input_shape = [1,28,28] 1:表示图片是黑白的,如果是彩色的就要改为3,28x28为图片的像素值
2.卷积层采用了25个3x3的过滤器,这样卷积后会生成25个26x26的feature map,这25个过滤器他们都是不相同的,所有通过卷积后可以得到25个特征值。
3.池化层,我们选取2x2区域内最大的那个值。然后得到是25个13x13的feature map,然后再进行一次卷积,使用50个3x3的的过滤器(filter),得到50个11x11的feature map 池化后为50个5x5的feature map
第一个过滤器我们需要3x3=9个参数,第二个过滤器我们需要3x3x25=225个参数,因为经第一次卷积后有25个特征,所以参数的个数等于过滤器的长x宽x厚度(个数)
CNN和神经网络的区别
CNN是以指定大小的过滤器,指定的步长和输入的矩阵做点积,得到一个维的更小的矩阵,相当于指取了输入的部分数据和过滤器做点积,神经网络则是需要全连接,即就是每个数据都要参与运算。
如图我们把左边6x6的矩阵转换为一维的,就一共36个数据,我们取索引(索引从1开始)为1,2,3,7,8,9,13,14,15的数据与过滤器filer做内积运算,得到3,取索引2,3,4,8,9,10,14,15,16的数据与过滤器做内积得到-1.而神经网络每次是每个元素都要与运算的,这就是两者的区别。
CNN学到了什么
通过训练最终我们得到了分类需要设置的参数,但是CNN到底学到了什么呢?
如果我们最终获得了50个11x11的特征值,我们不知道这50个特征值都表示的什么意思。a'k表示11x11=121个元素的和,我们通过梯度上升,调节输入的x,使的a`k最大,也就是更容易激活这个特征,然后我们得到下面的图片的结果,每个使得最终的特征值最明显的x的头像如下图。
可见每个过滤器(filter)都获取了一个特征,我们通过检测我们输入的数据是激活这些特征值的程度,做出分类。
那么全连接层的参数又检测的是什么呢?
a'j表示第j个神经元,我们要找一个图片它对应的输入向量X使得a'j的值最大,然后我们列出前九个图片,显是他们没有什么特别之处,也没有规律。所以全连接层的每个神经元它获取的是整个输入的图片比较大范围的特征,而不是像卷积池化参数检测的是某个特征。
我们考虑最后输出的
y'i找到一个图片使得它的输入使得y'i最大,我们得到了前9张图片。
机器会认为他们对应的是1-9,但是我们人根本看不出来这是数字。所以我们要对我们需要的X做一个限制,在使得y'i最大的同时,是的X输入的各项之和最小,及即使我们希望在我们大部分区域为空白值(我们的图片是黑白的,我们希望除了数字区域,其他的地方都为白色),我们做了如下修改,然后我们发现我们根据整个限制得到的图片有一点点像数字了。
Playing Go 对CNN的使用
因为Playing Go不符合CNN使用的第三个条件,所以它就没有使用max pooling.