卷积神经网络初探

1.为什么学习计算机视觉?

1.计算机视觉的高度发展带来新的产品和应用

2.即使在计算机视觉上未有建树,但是对计算机视觉的处理的想象力和创造力,可以启发去创造其他领域的交叉成果,例如语音识别中也可以用到计算机视觉的解决灵感。

2.计算机视觉问题(Computer Version Problems)

1.Image Classification(图片分类)

2.Object detection(目标检测)

3.Neural style transfer(神经风格转换)

如果使用传统NN(全连接),参数数量巨大,例如一个2-layer的神经网络,100*100的RGB图片,隐层有1000个节点的话,参数数量达到100*100*3*1000=3M,神经网络易发生过拟合,并且需要巨大的内存和计算成本。由此引出了卷积运算。

3.卷积操作(Convolution operation)

以垂直边缘检测(edge detection)为例,*代表卷积操作。


编码上python:conv-forward

           tensorflow:tf.nn.conv2d

           keras:Con2D

4.Padding

普通卷积操作的两个缺点:1.每次做卷积操作,图片都会缩小 2.图片边缘位置只被少量filter涉及,丢掉边缘信息。

为了解决上述问题,引入了padding操作。分为Valid和Same的卷积操作。通常的过滤器的尺寸大小为奇数。


5.卷积步长(Strided Convolution)

卷积步长指的是filter或者kernel在输入图片上平移的时候需要跳跃。具体的关于padding和stride的尺寸大小如下图:


另外,数学意义上的卷积操作实际上有一个反转(flipping)的操作,而我们在深度学习中的卷积操作没有反转的步骤,理论应该称为互相关(cross-correlation)。

6.在RGB图像上的卷积

不是灰度图像,取而代之的是RGB彩色图像。即在立方体里面进行线性组合。

例如如果检测红色通道里的垂直边缘,那么将绿色和蓝色中的filer参数均设为0.

例如如果不光要检测垂直边缘,还要检测水平边缘,则增加立方体filter的数量。


7.单层卷积网络(One layer of a CNN)

与标准的神经网络进行对比,我们发现CNN的大致计算过程如下所示:


如果有10个filters,每一个过滤器有3*3*3个参数,加上偏差项(bias),总共(27+1)*10=280个参数。无论输入的图片有多大,参数始终都很少,避免过拟合。

下面总结一下卷积神经网络中的记号:


关于高度、宽度、通道的顺序没有统一的标准。

8.一个简单的CNN示例

我们通过一个简单的CNN示例阐述上述记号:


关于f,s,p的超级参数的确定对神经网络工程师是十分重要的事情。

一个构建CNN的经验规律是:初始阶段图片大小基本保持一致,然后慢慢变小,而通道数一直变大。即Nh,Nw变小,Nc变大。

一个典型的CNN网络通常有三种类型的层:

——卷积层(Convolution)CONV

——池化层(Pooling)POOL

——全连接层(Fully connected)FC

虽然仅用卷积可以构造出很好的卷积神经网络,但是大部分工程师会选择加入池化层和全连接层。

9.池化层

通常使用池化层来缩小模型大小、提高计算速度、提高所提取特征的鲁棒性。 

一个重要特征:no parameters to learn!


和卷积层不同的是:输入和输出的通道数相同,也就是说卷积层会改变通道数,以filters数目增加的方式改变;而池化层不会改变,因为它对每个通道都做了相同的池化操作,而不是在立方体中做线性组合。

f=2,s=2的超级参数比较常见,相当于高度和宽度缩小了一半。

10.识别手写RGB数字示例

我们以与LeNet-5大致相仿的包含卷积层、池化层、全连接层的CNN网络架构示例来阐述其基本流程:


其中每一层的激活值尺寸和参数尺寸如下图所示:


可以看出参数主要集中在全连接层,并且激活值尺寸大致趋势是越来越小。

计算层数时,只算有参数的权重。这是我们常见的做法,也有将卷积层、池化层、全连接层单独计算层数的做法。

选择超级参数的常见做法是参考别人已有的项目和文献,而不是闭门造车。

常见的CNN搭建思路是:一个或多个CONV层后接着一层POOL,然后是几个全连接层,最后是分类器或者输出。

11.为什么卷积有效?

和全连接层相比,卷积层有两个显著的优势:

——参数共享(Parameter sharing):一个特征检测(垂直边缘检测)适用于一个区域,同时也适用于其它区域。

——稀疏连接(Sparsity of connections):每一个激活值仅与过滤器大小的数据有关(感受野?)

另外:卷积神经网络善于捕捉平移不变性(translation invariance):向左右平移若干个像素,图中的猫依然可见。

12.如何训练一个CNN?

给定训练集,选取单个样本的损失函数L(y帽子,y),然后在计算整个训练集上的成本函数J,最后使用梯度下降或者其他的优化算法来拟合参数以减小J。

猜你喜欢

转载自blog.csdn.net/sinat_28520127/article/details/81047212
今日推荐