水很深的深度学习-Task04卷积神经网络CNN

Posted GoAl的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了水很深的深度学习-Task04卷积神经网络CNN相关的知识,希望对你有一定的参考价值。

参考资料:

​​​​​​​​​​​​​​​​​​​​​1.水很深的深度学习-CNN

2.卷积神经网络超详细介绍_呆呆的猫的博客-CSDN博客_卷积神经网络

卷积神经网络的概念

计算机视觉和 CNN 发展十一座里程碑

上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。

卷积神经网络是多层感知机(MLP)的变种,由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来,视觉皮层的细胞存在一个复杂的构造,这些细胞对视觉输入空间的子区域非常敏感,称之为感受野。

CNN由纽约大学的Yann Lecun于1998年提出,其本质是一个多层感知机,成功的原因在于其所采用的局部连接和权值共享的方式:

  • 一方面减少了权值的数量使得网络易于优化

  • 另一方面降低了模型的复杂度,也就是减小了过拟合的风险

该优点在网络的输入是图像时表现的更为明显,使得图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建的过程,在二维图像的处理过程中有很大的优势,如网络能够自行抽取图像的特征包括颜色、纹理、形状及图像的拓扑结构,在处理二维图像的问题上,特别是识别位移、缩放及其他形式扭曲不变性的应用上具有良好的鲁棒性和运算效率等。

名称特点
LeNet5没啥特点-不过是第一个CNN应该要知道
AlexNet引入了ReLU和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层
VGGNet采用11和33的卷积核以及2*2的最大池化使得层数变得更深。常用VGGNet-16和VGGNet19
Google Inception Net这个在控制了计算量和参数量的同时,获得了比较好的分类性能,和上面相比有几个大的改进:1、去除了最后的全连接层,而是用一个全局的平均池化来取代它; 2、引入Inception Module,这是一个4个分支结合的结构。所有的分支都用到了11的卷积,这是因为11性价比很高,可以用很少的参数达到非线性和特征变换。3、Inception V2第二版将所有的55变成2个33,而且提出来著名的Batch Normalization;4、Inception V3第三版就更变态了,把较大的二维卷积拆成了两个较小的一维卷积,加速运算、减少过拟合,同时还更改了Inception Module的结构。
微软ResNet残差神经网络(Residual Neural Network)1、引入高速公路结构,可以让神经网络变得非常深2、ResNet第二个版本将ReLU激活函数变成y=x的线性函数


卷积神经网络基本原理

卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。

卷积层

二维卷积运算:给定二维的图像I作为输入,二维卷积核K,卷积核需要进行上下翻转和左右反转

feature_map尺寸计算公式:[ (原图片尺寸 -卷积核尺寸)/ 步长 ] + 1

卷积实际上就是互相关

**卷积的步长(stride)**:卷积核移动的步长

卷积的模式:Full**,** Same和Valid

数据填充:如果我们有一个 𝑛×𝑛 的图像,使用𝑓×𝑓 的卷积核进行卷积操作,在进行卷积操作之前我们在图像周围填充 𝑝 层数据,输出的维度:

感受野:卷积神经网络每一层输出的特征图(featuremap)上的像素点在输 入图片上映射的区域大小,即特征图上的一个点对应输入图上的区 域。

那么如何计算感受野的大小,可以采用从后往前逐层的计算方法:

  • 第 i 层的感受野大小和第 i - 1 层的卷积核大小和步长有关系,同时也与第 (i - 1)层感受野大小有关
  • 假设最后一层(卷积层或池化层)输出特征图感受野的大小(相对于其直 接输入而言)等于卷积核的大小

**卷积层的深度(卷积核个数)**:一个卷积层通常包含多个尺寸一致的卷积核

激活函数

激活函数是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。

  

1. ReLU函数

f(x)=\\left\\\\beginarrayl0, x<0 \\\\ x, x \\geq 0\\endarray\\right.f(x)=0,x<0x,x≥0​

ReLU函数的优点:

  • 计算速度快,ReLU函数只有线性关系,比Sigmoid和Tanh要快很多
  • 输入为正数的时候,不存在梯度消失问题

ReLU函数的缺点:

  • 强制性把负值置为0,可能丢掉一些特征
  • 当输入为负数时,权重无法更新,导致“神经元死亡”(学习率不 要太大)

2. Parametric ReLU

f(x)=\\left\\\\beginarrayl\\alpha x, x<0 \\\\ x, x \\geq 0\\endarray\\right.f(x)=αx,x<0x,x≥0​

  • 当 𝛼=0.01 时,称作Leaky ReLU
  • 当 𝛼 从高斯分布中随机产生时,称为Randomized ReLU(RReLU)

PReLU函数的优点:

  • 比sigmoid/tanh收敛快
  • 解决了ReLU的“神经元死亡”问题

PReLU函数的缺点:需要再学习一个参数,工作量变大

3. ELU函数

f(x)=\\left\\\\beginarrayl\\alpha (e^x-1), x<0 \\\\ x, x \\geq 0\\endarray\\right.f(x)=α(ex−1),x<0x,x≥0

ELU函数的优点:

  • 处理含有噪声的数据有优势
  • 更容易收敛

ELU函数的缺点:计算量较大,收敛速度较慢

  • CNN在卷积层尽量不要使用Sigmoid和Tanh,将导致梯度消失。
  • 首先选用ReLU,使用较小的学习率,以免造成神经元死亡的情况。
  • 如果ReLU失效,考虑使用Leaky ReLU、PReLU、ELU或者Maxout,此时一般情况都可以解决

特征图

  • 浅层卷积层:提取的是图像基本特征,如边缘、方向和纹理等特征
  • 深层卷积层:提取的是图像高阶特征,出现了高层语义模式,如“车轮”、“人脸”等特征

池化层

池化操作使用某位置相邻输出的总体统计特征作为该位置 的输出,常用最大池化(max-pooling)和均值池化(average- pooling)。

池化层不包含需要训练学习的参数,仅需指定池化操作的核大小、操作步幅以及池化类型。

池化的作用:

  • 减少网络中的参数计算量,从而遏制过拟合
  • 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微 小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/ 平均值)
  • 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为 这样我们就可以探测到图片里的物体,不管它在哪个位置

全连接层

  • 对卷积层和池化层输出的特征图(二维)进行降维
  • 将学到的特征表示映射到样本标记空间的作用

输出层

对于分类问题:使用Softmax函数

y_i = \\frace^z_i\\sum_i = 1^ne^z_iyi​=∑i=1n​ezi​ezi​​

对于回归问题:使用线性函数

y_i = \\sum_m = 1^Mw_imx_myi​=m=1∑M​wim​xm​

卷积神经网络的训练

Step 1:用随机数初始化所有的卷积核和参数/权重

Step 2:将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。

Step 3:计算输出层的总误差

Step 4:反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的卷积核和参数/权重的值,以使输出误差最小化

注:卷积核个数、卷积核尺寸、网络架构这些参数,是在 Step 1 之前就已经固定的,且不会在训练过程中改变——只有卷 积核矩阵和神经元权重会更新。

和多层神经网络一样,卷积神经网络中的参数训练也是使用误差反向传播算法,关于池化层的训练,需要再提一下,是将池化层改为多层神经网络的形式

将卷积层也改为多层神经网络的形式

主要应用

图像处理领域主要应用

  • 图像分类(物体识别):整幅图像的分类或识别
  • 物体检测:检测图像中物体的位置进而识别物体
  • 图像分割:对图像中的特定物体按边缘进行分割
  • 图像回归:预测图像中物体组成部分的坐标

以上是关于水很深的深度学习-Task04卷积神经网络CNN的主要内容,如果未能解决你的问题,请参考以下文章

水很深的深度学习-Task05循环神经网络RNN

水很深的深度学习-Task03前馈神经网络

水很深的深度学习-Task01

水很深的深度学习-Task02机器学习基础

Pytorch写CNN

《深度学习》李宏毅 -- task6卷积神经网络