CNN卷积神经网络——图像处理
输入给定相同大小的图片,
输出一个向量,n维向量可以辨识n种动物,但是我们输出的可能不是膜长为1的向量哦
那就需要分类的方法Cross entropy 去构造Loss
计算机世界中图像是什么?
张量tensor
可以理解为PS里面的通道层数
把三色通道写到一维数组就是右边这个
其实是矩阵拼接起来的啦:100*100的矩阵竖着拼
但其实我们不需要去看所有的细节,我们只需要看:鸟嘴、鸟眼睛等区域就可以
那么我们就可以进行简化
那么这么选择一小块区域??
在CNN我们有如下做法
把这一块3*3*3的receptive field,变成一个27维列向量,传入Neural
当然,不同的Neural可以守卫任意receptive field
receptive field也可以只包含一个channel,但是CNN一般不这样搞。
当然receptive field也不一定非要正方形
下面给出一个经典的receptive field
①会看所有的channel
②每一层的大小叫做kernel size。一般是3*3
③ 一个receptive field一般会有多个Neural守备
④新的receptive field 是上一个平移一个stride。如下
我们是希望两个receptive field是有重叠的
⑤如果stride后超过边界了怎么办?做padding,也就是补零
实际上鸟嘴可能在图片任意部位出现,我们不同部位的Neural都有可能会负责监控鸟嘴,那么真的有这个必要吗?会不会造成功能的重复??
答案是肯定的。
只需parameter sharing
这样不同的Neural就可以通过parameter sharing,实现不同receptive field 的同一功能
每一个receptive field有很多(如64个Neural)每一个Neural就存在一组参数,我们的Parameter sharing就是Neural的共享,
记得之前说过,CNN限制了模型的弹性,具体如下,越内部就越限制弹性
这里说的限制弹性是参数削减
CNN的model bias比较大,也就是CNN容易欠拟合,但是没有关系,因为图像识别中不希望过拟合,这样识别率太差了
如果监视整张图片,很容易过拟合啊,稍微改一点预测结果就很差了,所以我们更倾向于CNN的欠拟合model bias
另一种解释CNN
黑白图片channel是1,彩色的是3
那么我们先给 定不同的Filter,每一个filter都会抓图片里面的pattern(3*3*channel)
HOW???怎么抓
以黑白图片为例子
首先规定步长,试着匹配第一个receptive field,不行就增加一个stride。
其中匹配的步骤就是inner product(内积)
每一次都会得到一个内积如下图
上述例子中inner product=3的情况是完美匹配的,loss为0
然后在生成其他的filter
可以看到只有一个3是匹配的
这些矩阵也有个名字
如果说我们设置64个filter,那就会得到一个channel为64的 Image,每一个矩阵就是相应的feature map
我们再根据Image-1进行Convolution,构造3*3*64的filter
那么3*3是否太小了??
其实根本不会,在第二层3*3我们看见的其实在第一次是5*5,根据网络的不断叠加,我们会越看越大。
其实以上两个CNN解释就是一个东西
第一个版本的parameter sharing就是第二个版本的二层filter
注意!!!你看第一层的filter在遍历生成feature map 的过程中,会产生同样的数值,这就说明两个区域可以用同一个filter,就是parameter sharing!!
那么Convolution就是filter扫过整张图片的过程
pooling池化
CNN的另外一个技术
可以理解为裁剪
这里讲Max Pooling
HOW?
比如说我们2*2分组,每一组选一个最大值这个就叫做Max Pooling,我们也可以进行平均池化or最小池化
一般我们做完Convolution之后得到一张很多channel的图片,然后做一次Pooling。主要是因为这样能够减少运算量,因为我们把图片变小了,等于是相当于降维处理。
一般来说不pooling效果好一些,现在很多人就直接full convolution
一般来说就是做几次Convolution做一次Pooling,降维。最后Flatten拉直,生成一个列向量 ,丢进Fully Connected Layers里面。最后根据Softmax得到分类
CNN下围棋
虽然Fully-connected network可以做,但是CNN更好。因为我们关注的是下一步,是个局部范围的变化第二点是,同一 pattern可以在不同位置
注意啊,围棋你可不能用Pooling,降维了就不是同一局,甚至不是一句围棋了
而且CNN是不能处理影像的放大缩小,因为在CNN看来就是不同的矩阵