深度神经网络优化策略汇总

接下来介绍卷积神经网络的各种改进措施,其中经典网络的改进措施已经在前面各个网络中介绍。针对卷积神经网络的改进措施主要在以下几个方面:卷积层,池化层,激活函数,损失函数,网络结构,正则化技术等方面。优化算法对网络的训练至关重要,在这里我们单独列出来了。

1.卷积层

卷积层的改进有以下几种:卷积核小型化,1x1 卷积,Network In Network,Inception机制,卷积分解(Factorization),反卷积运算等

下面分别介绍

Network In Network的主要思想是用一个小规模的神经网络来替代卷积层的线性滤波器,在这篇文献中,小型网络是一个多层感知器卷积网络。显这种小型网络比线性的卷积SIGAI运算有更强的的描述能力。卷积核小型化是现在普遍接受的观点,在VGG 网络中已经介绍了。
1x1 卷积可以用于通道降维,也可以用于全卷积网络,保证卷积网络能接受任意尺寸的输入图像,并能做逐像素的预测。Inception 机制在GoogLeNet 网络中已经介绍,这里也不在重复。卷积操作可以转化为图像与一个矩阵的乘积来实现,反卷积[17]也称为转置卷积,它的操作刚好和这个过程相反,正向传播时左乘矩阵的转置,反向传播时左乘矩阵。注意这里的反卷积和信号处理里的反卷积不是一回事,它只能得到和原始输出图像尺寸相同的图像,并不是卷积运算的逆运算。反卷积运算有一些实际的用途,包括接下来要介绍的卷积网络的可视化;全卷积网络中的上采样,图像生成等。反卷积运算通过对卷积运算得到的输出图像左乘卷积矩阵的转置,可以得到和原始图像尺寸相同的一张图像。

2.池化层

池化层的改进主要有以下几种:L-P 池化,混合池化,随机池化,Spatial pyramid pooling,ROI pooling。Spatial pyramid pooling 在 SPP 网络中提出,之前的“基于深度学习的目标检测算法综述”文章中 SIGAI 已经做了讲解,这里不再重复。ROI pooling 在 Fast R-CNN 算法中提出,同样的在目标检测文章中已经做了介绍。

3.激活函数

除了传统的 sigmoid,tanh 函数,深度卷积神经网络中出现了各种新的激活函数,主要的有:ReLU,ELU,PReLU 等,它们取得了不错的效果,其中 ReLU 以及它的改进型在卷积网络中被普遍采用。这些激活函数在 SIGAI 公众号上一篇文章“理解神经网络的激活函数”中已经做了介绍。

4.损失函数

损失函数也是一个重要的改进点。除了欧氏距离损失之外,交叉熵,对比损失,合页损失等相继被使用。这些基本的损失函数 SIGAI 在后续的文章中会专门介绍,敬请期待!

在一些复杂的任务上,出现了多任务损失损失函数。典型的有目标检测算法,人脸识别算法,图像分割算法等,这些损失函数在人脸识别、目标检测系列综述文章中已经进行介绍,在这里不再重复。

5.网络结构

这里的网络结构指拓扑结构以及层的使用上。连接关系的改进如残差网络和 DenseNet等结构在前面已经做了介绍。

全卷积网络 Fully Convolutional Networks[31],简称 FCN,是在标准卷积网络基础上所做的改变,它将标准卷积网络的全连接层替换成卷积层,以适应图像分割、深度估计等需要对原始图像每个像素点进行预测的情况。一般情况下,全卷积网络最后几个卷积层采用 1x1的卷积核。由于卷积和下采样层导致了图像尺寸的减小,为了得到与原始输入图像尺寸相同的图像,使用了反卷积层实现上采样以得到和输入图像尺寸相等的预测图像。

不同层的卷积核有不同的感受野,描述了图像在不同尺度的信息。多尺度处理也是卷积网络的一种常用手段,将不同卷积层输出图像汇总到一个层中进行处理可以提取图像多尺度的信息,典型的做法包括 GoogLeNet,SSD,Cascade CNN,DenseBox。

6.归一化技术

神经网络在训练过程中每一层的参数会随着迭代的进行而不断变化,这会导致它后面一SIGAI层的输入数据的分布不断发生变化,这种问题称为 internal covariate shift。在训练时,每一层要适应输入数据的分布,这需要我们在迭代过程中调整学习率,以及精细的初始化权重参数。为了解决这个问题,我们需要对神经网络每一层的输入数据进行归一化。其中一种解决方案为批量归一化 Batch Normalization,它是网络中一种特殊的层,用于对前一层的输入数据进行批量归一化,然后送入下一层进行处理,这种做法可以加速神经网络的训练过程。

猜你喜欢

转载自blog.csdn.net/MESSI_JAMES/article/details/81566106