DeepLearning.AI课程知识总结[2] -- 卷积神经网络CNN

目录

一、卷积基本概念

二、CNN结构

三、CNN举例

1. AlexNet

 2. ResNets

 3、NIN(Network In Network )

4、Inception Network(GoogleNet)


(本文是DeepLearning.AI 课程笔记)

一、卷积基本概念

CNN的convolution(卷积) layer通过filter (过滤器,也称kernal,不同的filter可检测不同图像特征,如垂直边,水平边等) 对图像进行特征提取。例如,对一个6 \times 6图像用一个3 \times 3的垂直边filter做卷积计算:

图像中数字是像素值,其中6\times6图像左上角一个和filter一样大的框的像素值经过和filter卷积计算(每个数字和filter对应位置的数字相乘,全部数字再相加)得出4 \times 4图像左上角数字(2\times 1 + 6 \times 1 + 3 \times 1 + 3 \times 0 + 0 \times 0 + 1 \times 0 + 7 \times (-1) + 5 \times (-1) + 0 \times (-1) = -1),图相框向右前进一格计算出第一行第二个数字...向下前进一格计算第二行数字....,其他同理。再如:

这个filter能检测出左侧图像中间的垂直边。这个filter旋转90度可得到水平边filter。filter值可作为参数通过数据自动学习。

Padding (填充)  -----  在卷积计算过程中的问题是,1)图像像素会缩小, 2)边缘的像素计算次数少于中间的像素,导致边缘像素重要程度不如中间像素。padding能解决这两个问题。一个n \times n 像素的图像和一个 f \times f 的filter卷积, 得到一个(n-f+1) \times (n - f + 1)像素的图像。经过在图像周围padding一个像素(像素值为0),图像变成(n+2) \times (n+2),经过卷积,像素为(n+3 -f) \times (n+3-f)

 

 Padding的两个选项: “Valid Convolution” 是不填充,"Same Convolution"是填充使输出像素等于输入像素。

Stride(步长) ------ 在卷积计算中,每次filter前进的像素数称为步长,如果filter每次前进一个像素,则步长为1.

当输入像素为n \times n,filter的size为f \times f, padding为p,stride为s时,输出像素为:​​​​​​

n_{out} = \left \lfloor \frac{n+2p -f}{s} +1 \right \rfloor

例如一个像素8 \times 8的图像,filter是3 \times 3,padding = 0, stride = 1的卷积计算,输出像素为6 \times 6

 再如,stride = 2时,输出像素为3 \times 3

卷积filter大小为3、步长为2、填充为0的二维卷积(蓝色为输入,绿色为输出):

 卷积filter大小为3、步长为1、填充为1的二维卷积(蓝色为输入,绿色为输出):

 一个RGB图像的卷积计算举例如下,这个图像像素是6 \times 6 \times3,有Red,Green,Blue三个channel(通道),filter的channel数和图像一致。这个filter检测红色channel的垂直边界,生成4\times 4输出:

 如果要同时检测垂直边和水平边,可使用两个filter,生成4 \times 4 \times 2输出:

filter可类比为线性组合 w^{T}x + b 的参数。这个4 \times 4 \times 2输出是像素的线性组合,还需对这个输出进行非线性的激活函数计算,形成一个conv layer。

这个conv layer的参数个数是( 3 \times 3 \times 3(filter的参数个数)+ 1 (bias) )* 2(filter个数) = 56。

Pooling(池化) layer,可以减少图像size,增加计算速度。Max pooling取每个窗口像素最大值,Average pooling取每个窗口全部像素平均值。Max pooling能提取一个区域的主要特征。pooling layer不含参数。hyperparameters包含stride, 窗口size, max/average。 一般选2 \times 2窗口,步长为2,长宽都减少1/2. 

二、CNN结构

 CNN包含了三种layer,conv(卷积) layer,pooling(池化) layer, fully connected(全连接) layer。

summaryparameterhyperparameter
CONV  (conv layer)卷积计算和激活函数组成,通过和不同filter的卷积计算,提取图像不同特征,filter值可学习得到filter的值,如3 \times 3 \times 3的filter包含9个参数filter数量、大小,stride(步长),padding(same, valid) size,激活函数
POOL (pooling layer )减少图像size,增加计算速度。Max pooling取每个窗口像素最大值,Average pooling取每个窗口全部像素平均值。Max pooling能提取一个区域的主要特征。none       窗口大小,stride(步长),max/average
FC (fully connected layer)普通的神经网络layer,每个单元和前一层的每个单元相连w^{T}, b单元数量,激活函数

CNN结构举例:一般一个CNN会有数个 CONV - POOL,再连接数个FC layer,

如 input --CONV(ReLU) -- (Max)POOL-- CONV(ReLU) -- (Max)POOL -- FC(ReLU) -- FC -- output, 如图:

一个像素为32 \times 32 \times 3的RGB图像,使用5 \times 5的filter(同一个filter同时过滤三个channels),假如要提取8个特性,则有8个filters。则这个图像变为28 \times 28 \times 8。这个layer的参数包括filters 200个参数,和每个filter计算ReLU 增加的一个bias,总共有208个。再经过MAX POOL,图像变为14 \times 14 \times 8。经过下一个CONV的16个filters,图像变为10 \times 10 \times 16,经过MAX POOL,变为5 \times 5 \times 16在与FC连接之前,要对多维数据扁平化,也就是将(Width,Height,  Channels)的多维数据压缩为长度为 Width \times Height \times Channel的一维数组。再与FC连接,此时和普通CNN相同。这个CNN的layer形状和参数为:

Activation ShapeActivation SizeParameters
Input(32, 32, 3)32 \times 32 \times 3 = 30720
CONV1 (filters=8, size=5, stride=1)(28, 28, 8)28 \times 28 \times 8 = 62725 \times 5 \times 8 + 8 = 208
POOL1 (size=2, stride=2)(14, 14, 8)14 \times 14 \times 8 = 15680
CONV2 (filters=16, size=5, stride=1)(10, 10, 16)10 \times 10 \times 16 = 16005 \times 5 \times 16 + 16 = 416
POOL2 (size=2, stride=2)(5, 5, 16)5 \times 5 \times 16 = 4000
FC3(120, 1)        120400 \times 120 + 1 = 48001
FC4       (84, 1)84120 \times 84 + 1 = 10081
Softmax        (10, 1)1084 \times 10 +1 = 841

为什么用卷积神经网络而不是传统神经网络?

1、参数复用,减少参数数量:假如32 \times 32 \times 3图像连接shape为(120, 1)的FC而不是CONV,需要的参数数量为:32 \times 32 \times 3 \times 120 = 368640个,而用CONV1,参数数量仅为208. 在图像中减少因参数过多造成的过拟合。 一个filter检测一种特性,如垂直边,这种特性可能在图像中多处出现,复用filter可训练更好的模型。

2、连接稀疏性: 传统神经网络是全连接,输出的每个unit都会被输入的全部unit影响,而图像的每个区域都有不同的特性,通常不希望被其他区域影响。CNN的CONV输出只跟输入的局部区域有关联。

三、CNN举例

1. AlexNet

 AlexNet将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不同的类别。在测试数据上,取得了37.5%和17.0%的前1和前5的错误率。

 2. ResNets

深度网络的好处是可以表达复杂函数,不同层数的抽象程度可以不断增加。主要问题是:1)训练深度网络反向传播时每一层的梯度都呈指数级下降,容易导致梯度消失/爆炸的问题。这个问题通过BatchNorm,使用ReLU激活函数等解决。2)随着网络深度的增加,准确率达到饱和,然后迅速退化,这并不是过拟合导致的,一个合理的深度模型增加层会导致更高的错误率。残差网络可解决这个问题。残差网络增加了恒等映射的shortcut:

在前向传播中,增加了恒等映射, F(x) = H(x) - x,x为浅层输出,H(x)为深层输出,F(x)为夹在二者中间的的两层变换,当浅层的x代表的特征已经最优(optimal),如果任何对于特征x的改变都会让loss变大的话,F(x)会自动趋向于学习成为0,x则从恒等映射的路径继续传递。这样就在前向过程中,当浅层的输出已经最优(optimal),让深层网络后面的层能够实现恒等映射的作用。

在反向传播中,residual block的参数会明显减小,增加了损失值相对参数的敏感度,并起到了正则化作用。举例,假如x=10, H(x) = 11, 参数W为1.1,增加恒等映射,F(x)成为x的线性变换,参数变为0.1。其次,因为有恒等映射的存在,梯度传导也增加了更简便的途径,仅通过ReLU就可以传导梯度。

Deep Residual Learning for Image Recognition 文中ResNets的基本框架和plain网络的基本相同,除了在每一对3*3的滤波器上添加了一个shortcut连接。所有的shortcuts都是恒等映射,并且使用0对增加的维度进行填充(选项 A)。因此他们并没有增加额外的参数。

picture from :  Deep Residual Learning for Image Recognition.  :VGG-19模型 (196亿个FLOPs)作为参考。:plain网络,含有34个参数层(36 亿个FLOPs)。:残差网络,含有34个参数层(36亿个FLOPs)。虚线表示的shortcuts增加了维度。

 3、NIN(Network In Network )

NIN使用了1 \times 1卷积:

单通道的1\times 1 卷积是用filter值乘以每个像素值。多通道1\times1卷积的filter对每个像素计算该像素全部通道的线性组合,然后激活函数计算,filter值是线性参数值。1\times 1卷积综合多通道特征图信息。通过控制filter数量可对原图像通道升维或降维。如图,三通道图像如果使用2个filter,则降维到2通道。通过降维可减少参数数量。对原图像通过非线性计算增加非线性特性。

4、Inception Network(GoogleNet)

Inception网络的作用是不需要选择1 \times 1, 3 \times 3, 5 \times 5 filters,或Pooling,而是叠加全部filters,由网络自行决定参数。

这个架构的计算量很大,举例,32个5 \times 5 \times 192的filters对28 \times 28 \times 192图像:

生成的28 \times 28 \times 32输出块中每个像素都进行了5 \times 5\times 192次乘法计算(及一次累加计算),总共28 \times 28 \times 32 \times 5 \times 5 \times 192 = 120422400次乘法计算。为减少计算量,在CONV之前增加一个1 \times 1的bottleneck filter用来降维,这个1 \times 1卷积也增加了一个ReLU激活函数计算。

乘法计算减少为 1\times 1 \times 192 \times 28 \times 28 \times 16 + 5 \times 5 \times 16 \times 28 \times 28 \times 32 = 12443648次。

降维后的一个inception module如图:

pic from  Going deeper with convolutions --Christian Szegedy et al.  arXiv:1409.4842v1 [cs.CV] 17 Sep 2014

 所有的卷积都使用了ReLU,包括Inception模块内部的卷积。网络输入是均值为0的RGB颜色空间,大小是224×224。“#3×3 reduce”和“#5×5 reduce”表示在3×3和5×5卷积之前,降维层使用的1×1滤波器的数量。在pool proj列可以看到内置的最大池化之后,投影层中1×1滤波器的数量。所有的这些降维/投影层也都使用了ReLU。

包括辅助分类器在内的附加网络的具体结构如下:

  • 一个滤波器大小5×5,步长为3的平均池化层,导致(4a)阶段的输出为4×4×512,(4d)的输出为4×4×528。
  • 具有128个滤波器的1×1卷积,用于降维和修正线性激活。
  • 一个全连接层,具有1024个单元和修正线性激活。
  • 丢弃70%输出的丢弃层。
  • 使用带有softmax损失的线性层作为分类器(作为主分类器预测同样的1000类,但在推断时移除)。

 含有的所有结构的GoogLeNet网络 pic from  Going deeper with convolutions --Christian Szegedy et al.  arXiv:1409.4842v1 [cs.CV] 17 Sep 2014

References:

【1】Convolutional Networks for Images, Speech and Time Series ---Yann LeCun,Yoshua Bengio

【2】https://blog.csdn.net/weixin_43624538/article/details/96917113

【3】https://blog.csdn.net/weixin_43624538/article/details/85049699

【4】Going deeper with convolutions --Christian Szegedy et al.  arXiv:1409.4842v1 [cs.CV] 17 Sep 2014

【5】GoogLeNet论文翻译

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liskol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值