【李宏毅机器学习笔记(四)】CNN

卷积神经网络(CNN)通过固定大小的输入图像、one-hot编码类别、以及三维张量表示图像。每个神经元关注其接收域,减少了过拟合风险。参数共享在不同接收域之间降低了模型复杂度,形成滤波器。多个卷积层和池化层用于提取特征并减小计算量。最后,通过全连接层进行识别。
摘要由CSDN通过智能技术生成

convolutional neural network

图像分类

  1. 假定输入图片的大小是固定的 (把所有图片都rescale成大小一样再输入)

  1. 把每个类别表示成一个one-hot的vector,这个dimension的长度就决定了模型可以辨识出的种类(复杂度)

  1. 怎样把一张图片当作一个模型的输入:把一张图片视为一个三维的tensor(维度大于2的矩阵),一张彩色的图片每一个pixel都是由rgb三色组成,这三个channel代表了三个颜色,长宽就是图片的解析度。把这些代表pixel中颜色强度的数值拉出来成为一个向量,就是network的输入。

4.这样多的参数会增加模型的弹性,就会有overfitting的风险。考虑图像辨识的特性(不需要识别整张图像,可以通过识别重要的pattern来进行识别),所以不需要每个neuron都把整张图当作输入,只需要把图片的小部分作为输入,识别关键pattern就可以了。

(1)receptive filed

每个neuron只需要关心自己的receptive filed就行。

把这 3×3×3 的数值拉直,变成一个长度是 3×3×3 也就是 27 维的向量,再把这 27 维的向量作為这个

Neuron 的输入。

这个 Neuron 会给 27 维的向量的,每一个 Dimension 一个 Weight,所以这个 Neuron 有 3×3×3 27个

Weight。

再加上 Bias 得到的输出,这个输出再送给下一层的 Neuron 当作输入。

在设定上,可以设定不同的neuron守备同一个receptive filed,用于侦测不同的pattern,也可以设定不同的或者重叠的receptive filed。可以设定receptive filed的大小(一般是2*2、3*3、4*4),形状,连续性,但要注意考虑输入的特性。

经典的receptive filed

一般图像辨识会考虑全部的channel,在设定receptive filed的时候只要考虑长宽,不用考虑深度,这个高和宽结合起来叫做kernel size(一般设定为3*3)。一般同一个 Receptive Field,往往会有一组Neuron 去守备它。

不同receptive filed之间是相邻的,一个receptive filed移动一点来创造另一个receptive filed,这个移动距离叫做stride。stride也是一个hyperparameter(一般为1或者2)。

当receptive filed移动超出图像时,就做padding,即补值,有很多补植的方法,比如补零。

(2)parameter sharing

同样的pattern可能会出现在图片不同的区域,在不同的守备区域都会有守备同一pattern的neuron,但是这样参数量就会太多。

在处理图像时,让不同 的receptive filed的neuron共享参数,即两个neuron的weights完全一样。(但是因为输入不同所以输出不会一样)

就是说每个receptive filed都只有一组参数,这些参数就叫做filter。

5.总结

Receptive Field 加上 Parameter Sharing,就是 Convolutional Layer,用到convolutional neuron的network,就是CNN。实际上CNN的model bias是很大的(receptive filed和parameter sharing都限制了模型的弹性),但model bias小,model的flexibility很高的时候(比如fully connected network),就很容易over fitting,实际上CNN是针对图像的特性而设计的,所以虽然它的bias很大,但它在图像上的表现会比较好。

另一种说法

一个Convolutional Layer里面有很多的filter(n*n*channel size),其作用就是到图片里面抓取一个pattern。

假设channel为1。

假设这些filter的参数是已知的(实际上这些tensor里的值是未知的,需要通过gradient decent去learn),把filter放在图片上,进行运算(对应位置相乘相加)、移动(移动距离叫做stride)。

每一个filter都会给一组数字,这群数字叫做feature map。这个feature map可以看作一个新的图片,它的channel就是filter的数量。

Convolutional Layer可以叠加很多层,在第二层的Convolutional Layer里面也有一群filter,它的输入就是4*4*filter number(以图为例)。第二层的输出也可以得到一个新的feature map。

可以发现network叠的越深,每个filter所能看到的部分在原图像就越大。

filter扫过一张图片就是convolution。实际上也就是不同的receptive filed,neuron可以共用参数,共用的参数就叫做一个filter。

6.pooling

把一张较大的图片做subsampling(比如把偶数的行和奇数的列拿掉),图片会变成原来的1/4,但不会影响图片的表现。pooling就有一点像一个activation function,因为里面没有参数,知识设定好的一个操作行为。

eg.max pooling

把filter里面的数字分组,然后取其中最大的一个来代表这一组数字。(分组也是自己决定,pooling的方法也可以自己决定)

一般在convolution之后会搭配pooling(交替使用),pooling就是把图片变小(不改变图片的channel)。

pooling主要是为了减少运算量,实际上还是会伤害performance,如果运算资源足够支撑的话,也可以选择不做pooling。

7.the whole CNN

把pooling output叫做flatten,就是把图像中排成矩阵的东西拉直,再把这个向量丢进fully connected layer里面去做辨识,然后可能还需要一个softmax得到辨识的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值