卷积神经网络算法综述

一、原理介绍

1、数据集

  • 根据使用场景自己制作数据集
  • 使用网上开源的数据集

2、前向传播

前向传播核心是介绍如何通过输入的X得到输出的Y,前向传播相对于反向传播比较容易理解。
卷积神经网络算法综述_第1张图片
前向传播公式如下:
卷积神经网络算法综述_第2张图片

3、损失函数

损失函数是主要是用来衡量神经网络输出的值Y’和真实值Y之间的差距,常用的损失函数主要有交叉熵和均方误差损失函数。:

  • 交叉熵损失函数

l o s s = − [ y l o g y ′ + ( 1 − y ) l o g ( 1 − y ′ ) ] loss = -[ylogy' + (1-y)log(1-y')] loss=[ylogy+(1y)log(1y)]

  • 均方误差损失函数

l o s s = 1 2 m ∑ i = 1 m ( Y ′ − Y ) 2 loss = \frac{1}{2m}\sum_{i=1}^m(Y' - Y)^2 loss=2m1i=1m(YY)2

4、优化方法

优化方法是一种能够帮我们最小化或者最大化目标函数(损失函数)的一类算法,通过神经网络输出的值Y’和真实值Y之间存在差距,优化方法的主要目的是让该差距如何尽可能的达到最小。例如一个线性模型 f ( x ) = W x + b f(x) = Wx + b f(x)=Wx+b,根据输入 x x x我们能够得到输出 f ( x ) f(x) f(x),并且可以计算出输出值和实际值之间的差距 ( f ( x ) − Y ) 2 (f(x) - Y){2} (f(x)Y)2,优化方法的最终目的是找出合适 W W W b b b,以使得上述的损失函数达到最小,损失函数的值越小,说明我们的模型越接近实际情形。
目前优化方法的核心思想是对损失函数进行一阶优化或者二阶优化。一阶优化是采用参数的梯度值来最大化或者最小化目标函数,二阶优化是采用二阶导数来进行优化,在实际应用中二阶导数计算量较大,一般很少使用。
常用的优化方法主要有:

  • 批量梯度下降(Batch Gradient Descent)

批量梯度下降是最原始的方式,它在每次迭代时使用了所有的样本来进行梯度的更新,训练速度较慢,但是参数更新的时候考虑了所有的样本,从而能够更准确的朝向极值所在的方向,易于实现并行计算。

  • 随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降是每次迭代使用一个样本来对参数进行更新,使得参数更新速度大大加快,但是准确度有所下降,可能会收敛到局部最优,并且不易于并行实现。

  • 小批量梯度下降(Mini Batch Gradient Descent)

小批量梯度下降综合了上面两种方法的特点,每次迭代使用batch_size个样本进行来对参数进行更新,兼具了上面两种方法的优点,但是batch_size的选择不当能够带来一些问题。

  • Momentum

动量法的主要思想是让早期的梯度对当前梯度的影响越来越小,参数更新公式为:
在这里插入图片描述
将该公式展开为如下:

在这里插入图片描述
可以看出离当前梯度越远,其系数越小,相乘之后导致之前的梯度大大降低。

  • RMSprop

我们希望沿着收敛速度快的方向步长大一些,与其垂直方向步长小一点,即将梯度震荡小的方向,增大其步长,震荡大的方向降低其步长,所以RMSprop的迭代更新公式为:
在这里插入图片描述

  • Adam

Adam算法是上述算法的结合,迭代更新公式为:
卷积神经网络算法综述_第3张图片

5、反向传播

反向传播两大核心就是计算误差和运用链式法则更新参数。误差计算方法上面已经介绍,整个流程如下:

卷积神经网络算法综述_第4张图片

6、常用技巧

  • 数据增强

  • 数据预处理

  • Batch Normalization(BN)

  • 激活函数

  • 正则化

  • drop-out

  • early-stopping

  • 超参数的合理设定

二、应用场景

卷积神经网络算法在计算机视觉中得到了广泛的应用,目前主要用于检测、识别、分割、追踪,在无人驾驶、医疗图像、零售业等领域有广泛的使用。

三、相关算法

随着卷积神经网络的不断发展,一大批基于卷积神经网络的算法应运而生,下面将分别胸检测、识别、分割、追踪四个方面介绍相应的成熟算法。

1、检测算法

在检测领域目前的算法主要分为两个思路,即one-stage和two-stage。one-stage速度较快,但精度略低;two-stage速度略慢,但精度较高。

one-stage的代表算法主要有YOLO V1、YOLO V2、YOLO V3、RetinaNet、SSD等。

two-stage的代表算法主要有Fast-RCNN、Faster-RCNN、FPN等。

anchor-free的代表算法主要有RefineNet、CornerNet、CenterNet等。

轻量级神经网络的代表算法主要有MobileNet 、ShuffleNet 、SqueezeNet等。

2、分类算法

分类算法的基本思路主要有两种,①通过卷积神经网络进行特征提取,然后通过sigmoid和softmax进行二分类和多分类。②通过卷积神经网络进行特征提取,提取出一维特征向量,然后通过计算特征向量之间的L1或者L2距离来判断是否属于一类。

常见的特征提取网络主要有 LeNet、GoogleNet、AlexNet、VGG、ResNet等。

3、分割算法

分割算法是对每一个像素进行二分类的算法,主要分为语义分割和实例分割。语义分割是像素级别的,对图像中的每个像素都划分出对应的类别,即实现像素级别的分类;实例分割不但要进行像素级别的分类,还需在具体的类别基础上区别开不同的实例。

常见的分割算法主要有FCN、Mask-RCNN等。

4、目标追踪算法

目前对该领域没有研究过,所以以后再补充。

四、总结

神经网络算法相比于传统算法有较明显的优势,它能够自动学习图像特征来代替繁琐的手工提取特征,使得涉及到图像的领域都得到了很快的发展。

你可能感兴趣的:(计算机)