卷积神经网络(CNN) 具有局部互联、权值共享、下采样(池化)和使用多个卷积层的特点。
局部互联 是指每个神经元只感受局部的图像区域,也就是卷积操作。
权值共享 是指当前层所有特征图共用一个卷积核,每个卷积核提取一种特征,参数量明显下降;使用多个卷积核可以提取多种特征。
下采样 每次对输入的特征图错开一行或一列,能够压缩特征图大小,特征降维,提取主要特征,将语义相似的特征融合,对平移形变不敏感,提高模型泛化能力。
使用多个卷积层 能够提取更深层次的特征,组合特征实现从低级到高级、局部到整体的特征提取。
卷积层 任务是检测前一层的局部特征,即用来进行特征提取,用不同的卷积核卷积得到不同的特征,通过多层卷积实现特征的组合,完成从低级到高级、局部与整体的特征提取。例如,图像先提取边缘特征,组合成形状特征,再得到更高级的特征;语音和文本具有相似特征,从声音到语音,再到音素、音节、单词、句子。
下采样(池化)层 对输入的特征图错开行或列,压缩特征图大小,降低参数量和计算复杂度,也对特征进行了压缩,提取主要特征,将语义相似的特征融合起来,对微小的平移和形变不敏感。包括平均池化和最大池化和随机池化,平均池化领域内方差小,更多的保留图像的背景信息,最大池化领域内均值偏移大,更多的保留图像的纹理信息,随机池化(Stochastic Pooling)则介于两者之间。
全连接层 将二维空间转化成一维向量,将全连接层的输出送入分类器或回归器来做分类和回归。
在卷积神经网络中,前面的卷积层的参数少但计算量大,后面的全连接层则相反,因此加速优化重心放在前面的卷积层,参数调优的重心放在后面的全连接层。
全卷积网络 将一般的卷积神经网络的全连接层替换成1x1的卷积层,使得网络可以接受任意大小的输入图像,网络输出的是一张特征图,特征图上的每个点对应其输入图像上的感受野区域。
多个3x3卷积比7x7卷积的优点在于,参数量减少并且非线性表达能力增强;1x1卷积的作用在于,可以用于特征降维与升维,各通道特征融合,以及全卷积网络(支持任意输入图像大小)。
深度神经网络具有从低级到高级、局部到整体的特征表达和学习能力,相比于浅层网络能更简洁紧凑的提取特征,但训练时容易发生过拟合、梯度弥散和局部极值的问题。
过拟合(Overfitting) 一般发生在数据量较少而模型参数较多时,其表现是模型在训练时变现的很好(error和loss很低)、但在测试时较差(error和loss较大),使得模型的泛化能力不行。归根结底是数据量不够多不够好,最好的办法是通过增加数据量(更多更全的数据、数据增广、数据清洗),还可以通过使用dropout、BN、正则化等来防止过拟合,训练时的trick是适当增加训练时的batchsize、适当降低学习率。
梯度弥散(Gradient Vanish) 是指在靠近输出层的隐层训练的好,但在靠近输入层的隐层几乎无法训练,是多层使用sigmoid激活函数所致(sigmoid函数在接近1的部分梯度下降的太快),用ReLu激活函数可以缓解这个问题。
局部极值 是指在训练深度网络时求解一个高度非凸的优化问题如最小化训练误差loss可能会得到坏的局部极值而非全局极值。采用梯度下降法也可能存在这种问题。
Dropout 是在训练时随机抛弃隐层中的部分神经元,在某次训练时不更新权值,防止过拟合(过拟合发生在模型参数远大于数据量时,而dropout变相的减少了模型参数),提高泛化能力,在全连接层使用。感觉是模仿了生物神经系统。Dropout使得随机抛弃的神经元既不参加前向计算,也不需要反向传播。
归一化(Normalization) 用于加速收敛,提高模型精度,包括LRN(Local Response Normalization)、BN(Batch Normalization)等,有助于模型泛化。
BN(Batch Normalization) 希望激活函数的输出尽量满足高斯分布,可以在全连接层后、激活层前加上BN,本质目的是促进模型收敛,降低初始值对模型训练的影响,提高模型精度和泛化能力。使用了BN,就不需要使用LRN(AlexNet中用到的局部响应归一化),也不需要过多的考虑权重初始值、Dropout和权重惩罚项的参数设置问题。
正则化(Regularization)包括L1、L2范数正则化,加入正则化惩罚项,能够防止过拟合,提高模型泛化能力。
梯度下降 包括批量梯度下降、随机梯度下降。可以比作下山问题,下山方向永远是梯度下降最快的方向,学习率即下山的步长。
批量梯度下降 每次迭代使用全部训练样本来计算损失函数和梯度,来更新模型参数。每次迭代都朝着正确的方向进行,保证收敛于极值点(也可能是局部极值点..),但迭代太慢,计算冗余,消耗大量内存。
随机梯度下降 实际上是小批量梯度下降,每次迭代随机使用小批量例如k个训练样本计算损失函数和梯度,来更新模型参数。每次迭代不一定会朝着正确方向进行,可能会有波动,但也会收敛于极值点,即保证收敛性又保证收敛速度。
激活函数 主要有ReLu激活函数、Sigmoid激活函数、Tanh激活函数。它们都是非线性激活函数(ReLu是规整化线性函数),比线性激活函数具有更强的特征表达能力。Sigmoid函数的x越大,导数越接近0,反向传播到远离输出层时容易出现梯度弥散,现在一般用ReLu用作激活函数来防止梯度弥散。
数据预处理 数据归一化(去均值归一化)、PCA主成分分析、ZCA白化。数据归一化的好处在于使得训练数据和测试数据具有一致的数据分布,增强模型的泛化能力。
PCA主分量分析 用于数据降维和降低特征间相关度,需要特征均值接近0且各特征的方差接近,因此需要先做去均值,一般情况下都不需要做方差归一化。
ZCA白化 用于降低特征冗余度(不降维),需要特征间相关度较低且特征具有相同的方差,因此ZCA白化一般是在PCA白化的基础上做的,可以看做是各个特征的幅度归一化。
图像处理与数据增广 颜色转换、对比度拉伸、直方图均衡、局部直方图均衡、加随机噪声、平移、缩放、旋转、镜像、投影变换、随机裁剪等。
如何提高深度学习算法性能?
1.通过数据
更多的数据样本
数据的代表性、全面性
数据预处理
图像处理与数据增广
数据清洗
难例
2.通过算法
选择合适的网络模型(包括网络结构和网络参数)
在已有模型上进行fine-tune
dropout、normalization、正则化
合理调节训练参数(学习率、batchsize等)
根据具体应用场景还可能需要修改损失函数
版权声明:本文为CSDN博主「HamTam12」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_14916279/article/details/72453227