参考资料:https://blog.csdn.net/weixin_43694096/category_12037897.html
(目标检测蓝皮书专栏,适合新手了解一些专业术语知识,缺点就是图文博客可能有点枯燥。)
有趣的网站 http://deepdreamgenerator.com/ 可以将两张图片结合起来
人工智能的起源
人工智能的发展经历了3个阶段
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来的
计算机视觉CV–机器感知环境的能力
自然语言处理
文本挖掘分类
Facebook研究团队开发出了一个叫 fastText 的库,用于快速文本表征和分类(1016)
文本的挖掘和分析
机器翻译
大致分为三类:
机器人
固定机器人–工业使用
移动机器人
深度学习中经常会用到矩阵计算,需要较强的算力。
CPU:主打的是一个读写能力
IO密集型数据
GPU:主打的是一个计算能力,较大的数据的计算我们优先使用GPU
计算密集型的程序和易于并行的程序都适合在GPU上面运行
参考博主
视频教程
从数据中自动分析获得模型,并利用模型对未知数据进行预测
数据、自动分析、模型、预测
总结:机器学习(Machine Learning) 是让计算机能够自动地从某些数据中总结出规律,并得出某种预测模型,进而利用该模型对未知数据进行预测的方法。它是一种实现人工智能的方式,是一门交叉学科,综合了统计学、概率论、逼近论、凸分析、计算复杂性理论等。
用户数据->数据处理(取消缺失值)->特征工程(数据转换,让数据能被机器识别)-> 机器学习(使用一个算法进行训练)->模型评估 是一个循环的过程
机器学习大致可以分为以下几类:
(1) 有监督学习(Supervised Learning) :当我们已经拥有–些数据及数据对应的类标时,就可以通过这些数据训练出一个模型,再利用这个模型去预测新数据的类标,这种情况称为有监督学习。有监督学习可分为回归问题和分类问题两大类。在回归问题中,我们预测的结果是连续值;而在分类问题中,我们预测的结果是离散值。常见的有监督学习算法包括线性回归、逻辑回归、K-近邻、朴素贝叶斯、决策树、随机森林、支持向量机等。
(1) 无监督学习(Unsupervised Learning):在无监督学习中是没有给定类标训练样本的,这就需要我们对给定的数据直接建模。常见的无监督学习算法包括K-means、EM算法等。
(3) 半监督学习(Semi-supervised Learn-ing):半监督学习介于有监督学习和无监督学习之间,给定的数据集既包括有类标的数据,也包括没有类标的数据,需要在工作量(例如数据的打标)和模型的准确率之间取一个平衡点。
(4)强化学习( Reinforcement Learning):从不懂到通过不断学习、总结规律,最终学会的过程便是强化学习。强化学习很依赖于学习的“周围环境”,强调如何基于“周围环境”而做出相应的动作。
对训练好的模型性能进行评估,发现表达数据的最佳模型和所选模型将来工作的性能如何。
在分类任务中,通常把错分的样本数占样本总数的比例称为错误率(error rate)。比如m个样本有a个预测错了,错误率就是 E = a/m;与错误率相对的 1 - a/m 称为精度(accuracy),或者说正确率,数值上 精度 = 1 - 错误率。
更一般地,我们通常会把学习器的实际预测输出与样本的真实输出之间的差异称为误差(error)。学习器在训练集上的误差称为训练误差(training error)或者经验误差(empirical error)。而在新样本上的误差则称为泛化误差(generalization error)或者测试误差(test error;)。显然,我们希望得到泛化误差小的学习器。所以我们希望模型的泛化误差尽可能小,但现实是,我们无法知道新样本是怎样的,所以只能尽可能地利用训练数据来最小化经验误差。
模型泛化能力:
泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。 不论是过拟合还是欠拟合都是模型泛化能力差的表现。
过拟合:
如果模型相比训练数据来说过于复杂,那就很有可能把训练样本自身的一些特点当作整个样本空间的特点,这样就会导致泛化性能下降,从而使得在训练数据上有很小的经验误差,但一旦面对新样本就会有很大误差,这种情况叫做过拟合(overfitting),亦称过配。相对的是欠拟合(underfitting),亦称欠配。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。
随着模型复杂程度的增加:
欠拟合比较容易克服,只要适当地增加模型复杂度(比方说增加神经网络的层数或者训练轮数,扩展决策树学习中的分支)就好。但过拟合是无法彻底避免的,我们所能做的只是缓解,或者说减小其风险(比如减少模型复杂度/增加训练数据),这也是机器学习发展中的一个关键阻碍。
这样,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度相当的模型,以达到使测试误差最小的学习目的。
参考:博客
**准确度:**准确率是最常用的分类性能指标。Accuracy = (TP+TN)/(TP+FN+FP+TN)
,预测正确的数占样本总数的比例,即正确预测的正反例数 /总数。
**精确率:**精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。Precision = TP/(TP+FP)
,即正确预测的正例数 /预测正例总数。
**召回率:**召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。正确预测为正占全部正校本的比例,Recall = TP/(TP+FN)
,即正确预测的正例数 /实际正例总数。
**F1-score(模型的稳健性):**F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。2/F1 = 1/Precision + 1/Recall
。
**AUC指标:**被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好。
神经网络的计算主要有两种:前向传播与反向传播
前向传播是指在神经网络中从输入层到输出层的信号传递过程,也称为“正向传递”。在前向传播过程中,输入数据首先经过输入层的处理,然后通过一系列的隐藏层,最终得到输出层的输出结果。前向传播过程中,每个神经元都会执行加权和运算和激活函数运算,从而产生输出。
反向传播是指根据网络输出结果与真实结果的差距,从输出层到输入层进行误差反向传播的过程。在反向传播过程中,我们将输出结果和真实结果之间的误差向后传递到每个神经元,并根据误差调整每个神经元的权重和偏置。这个过程是通过计算损失函数的梯度来实现的,通常使用链式法则计算每个神经元的误差贡献和权重更新量。通过反向传播算法,网络可以根据误差不断调整权重和偏置,从而提高网络的性能。
前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法。
例如:神经网络的层数、节点数量、学习率、正则化参数。
因为超参数对于模型的性能和收敛速度有重要的影响,因此通常需要进行调整和优化。超参数的调整可以通过手动调整和试错来完成,也可以使用自动化的超参数优化工具来帮助找到最佳超参数组合。超参数调整的目标是找到一个最优的超参数组合,以达到最好的模型性能。
机器学习模型中有两类参数:
BN
层的参数。训练过程中需要学习的参数,这些参数用于控制模型的输出,以使其与训练数据的真实标签(或目标)尽可能接近。模型参数是在训练过程中通过反向传播算法自动学习的,以最小化损失函数。学习率:学习率是一种超参数,它控制着模型参数在每次迭代中的更新速度。过高,模型可能无法收敛,导致训练不稳定。过低,则模型需要更多的时间来收敛。
正则化参数:正则化是一种超参数,用于防止模型过度拟合。正则化参数控制着正则化的程度。过高,模型可能会欠拟合,导致性能不佳。过低,模型可能会过度拟合,导致性能下降。
神经网络的层数和节点数量:神经网络的层数和节点数量是超参数,它们控制着网络的复杂性。过多,则可能会导致过度拟合,因为模型将过度适应训练数据。过少,则可能会导致欠拟合,因为模型无法捕捉足够的特征信息。
批次大小:批次大小是指在每个训练迭代中使用的样本数量。如果批次大小设置过大,则可能会导致模型过度拟合。过小,则可能会导致训练时间过长。
权重衰减系数:权重衰减系数越大,正则化项就越大,模型就越趋向于简单化,会导致模型的欠拟合,因为模型无法捕捉足够的复杂关系。相反,权重衰减系数越小,模型就越倾向于复杂化,可能会导致模型的过拟合。实践中,可以通过交叉验证等技术来确定最佳的权重衰减系数。如果模型出现欠拟合,可以尝试减小权重衰减系数;如果模型出现过拟合,则可以尝试增加权重衰减系数。
优化器动量:动量是优化器中的一种技术,用于加速模型训练并避免梯度下降算法陷入局部最优解。
卷积核尺寸:卷积核尺寸对于模型的性能有重要影响。较小的卷积核可以提取更为局部的特征,而较大的卷积核可以提取更为全局的特征。较小的卷积核可以提高模型的感受野,从而可以检测输入图像中更小的特征。而较大的卷积核可以提高模型的抽象层次,从而可以检测输入图像中更为全局的特征。
然而,使用较小的卷积核可能需要更多的层数,才能达到相同的感受野和抽象层次,从而增加了模型的计算负担和复杂度。而使用较大的卷积核可能会导致模型过于复杂,容易产生过拟合问题。
网格搜索(Grid Search):指定超参数的值域,穷举所有可能的超参数组合,通过交叉验证评估每个超参数组合的性能,并选择具有最佳性能的超参数组合。网格搜索简单易懂,但是当超参数的数量较多时,计算代价会非常大。
随机搜索(Random Search):在超参数的值域内随机采样一组超参数,通过交叉验证评估其性能,并重复这个过程多次,最终选择具有最佳性能的超参数组合。相比于网格搜索,随机搜索的计算代价更小,且可以发现更优的超参数组合,但是也存在一定的随机性。
贝叶斯优化(Bayesian Optimization):贝叶斯优化通过对模型的先验知识进行建模,结合样本数据来不断更新模型的后验概率分布,从而预测最优的超参数组合。相比于网格搜索和随机搜索,贝叶斯优化的计算代价更高,但是可以在较少的迭代次数内找到更优的超参数组合。
遗传算法(Genetic Algorithm):遗传算法是一种基于生物进化过程的优化算法,通过模拟遗传过程中的选择、交叉和变异等操作,来生成新的超参数组合,并通过交叉验证评估其性能。遗传算法可以发现更优的超参数组合,但是计算代价也比较高。
其主要作用是为网络引入非线性特性。如果网络中没有激活函数,那么神经网络就会变成一个线性模型,无法学习复杂的非线性函数关系。引入激活函数可以使神经网络具备非线性映射能力、提高模型表达能力和泛化能力,同时避免梯度消失和梯度爆炸等问题的发生。
激活函数是非线性函数,主要是因为线性函数的组合依然是一个线性函数,而神经网络需要引入非线性映射才能学习复杂的函数关系。
Sigmoid函数的取值范围是( 0 , 1 ),输入越大,输出越接近于1;输入越小,输出越接近于0 。这意味着,Sigmoid函数可以将任意实数值映射到一个( 0 , 1 ) 的区间内,可以看做是一个概率分布,表示样本属于某一类的概率。
m = nn.Sigmoid()
input = torch.randn(2)
output = m(input)
Sigmoid函数具有以下优点:
但Sigmoid函数也存在以下缺点:
由于Sigmoid函数存在上述缺点,现在较少在深度神经网络中使用。通常情况下,ReLU和其变种是更好的选择。
Tanh函数,也称为双曲正切函数(Hyperbolic Tangent),是一种常用的激活函数。它在数学上是Sigmoid函数的变换版本,与Sigmoid函数类似,主要用于二分类问题。
m = nn.Tanh()
input = torch.randn(2)
output = m(input)
Tanh函数的取值范围是( − 1 , 1 ) ,输入越大,输出越接近于1 ;输入越小,输出越接近于− 1 。因此,Tanh函数可以将任意实数值映射到一个( − 1 , 1 )的区间内。
Tanh函数具有以下优点:
与Sigmoid函数相比,Tanh函数的主要优势是它的输出是以0 为中心的,因此可以避免偏置问题。然而,它也存在梯度消失的问题,对于输入较大或较小的情况,梯度也会接近于0 。
由于Tanh函数也存在梯度消失的问题,现在通常使用ReLU及其变种作为深度神经网络的激活函数。
ReLU(Rectified Linear Unit)是一种常用的非线性激活函数,它被广泛应用于深度神经网络中。ReLU函数在输入为正数时,直接输出该值;在输入为负数时,输出为0 。
优点:
缺点:
针对Dead ReLU问题,现有的一些改进方法包括LeakyReLU、PReLU和ELU等。针对输出不是以0 为中心的问题,可以使用Batch Normalization等方法进行处理。
m = nn.ReLU()
input = torch.randn(2)
output = m(input)
An implementation of CReLU - https://arxiv.org/abs/1603.05201
m = nn.ReLU()
input = torch.randn(2).unsqueeze(0)
output = torch.cat((m(input),m(-input)))
LeakyReLU(Leaky Rectified Linear Unit)是对ReLU激活函数的改进,用于解决ReLU函数出现的Dead ReLU问题。
m = nn.LeakyReLU(0.1)
input = torch.randn(2)
output = m(input)
LeakyReLU函数在输入为负数时,不再输出0 ,而是输出一个较小的值,这个小值称为Leakage
系数,通常取一个接近于0 的小正数。
LeakyReLU函数相对于ReLU函数的优点如下:
需要注意的是,LeakyReLU函数可能会使得神经网络的训练时间增加,因为它增加了一个超参数Leakage系数,需要进行调参。此外,对于某些问题,LeakyReLU函数并不一定比ReLU函数表现更好,具体需要根据实际情况进行选择。
m = nn.Softmax(dim=1)
input = torch.randn(2, 3)
output = m(input)
Softmax激活函数常用于多分类问题中,它可以将一个向量中的每个元素转换为一个介于0和1之间的实数,并且这些实数的和为1,从而方便进行概率预测。
Softmax函数的输出结果满足以下两个性质:
σ ( z ) j
始终介于0和1之间;Softmax函数的输出结果彼此之间是相互关联的,因为它们之和为1。如果Softmax函数的某个输出结果很大,那么其他输出结果的值就会相应地变小。因此,当进行多分类问题时,Softmax函数可以对多个可能的结果进行排除,使得模型预测结果更加准确。
同时,Softmax函数的导数形式简单,可以方便地用于反向传播算法计算梯度,从而进行模型训练。
与ReLU函数相比,SiLU函数的导数更加平滑,没有ReLU函数的导数不连续问题。这种平滑性有助于防止在训练过程中出现梯度消失或梯度爆炸的问题,从而提高了模型的稳定性和收敛速度。
与Sigmoid函数相比,SiLU函数的导数在输入值较大时更接近于ReLU函数,可以避免Sigmoid函数的饱和性问题。同时,SiLU函数的值域也与ReLU函数相同,在输入值较大时,其输出值接近于输入值,可以避免神经元输出饱和的问题。SiLU激活函数在一些深度学习任务中表现良好,特别是在自然语言处理(NLP)领域中,SiLU激活函数有时能够比ReLU和tanh函数获得更好的性能。
m = nn.SiLU()
input = torch.randn(2)
output = m(input)
ReLU6激活函数是在ReLU激活函数的基础上进行的改进,它可以使激活函数的输出范围限制在0到6
之间。
ReLU6激活函数的主要优势在于它可以帮助模型避免输出值过大的问题,从而提高模型的稳定性。此外,由于ReLU6激活函数与ReLU激活函数非常相似,因此它的计算成本也非常低,可以在深度神经网络中快速进行计算。
ReLU6激活函数通常用于卷积神经网络(CNN)中,特别是在图像分类和目标检测等任务中,可以有效地避**免梯度消失和梯度爆炸等问题**,提高模型的性能和稳定性。
m = nn.ReLU6()
input = torch.randn(2)
output = m(input)
Mish激活函数是一种具有自适应性、平滑性和性能优势的激活函数,可以在深度学习中发挥重要作用。
与其他常用的激活函数相比,Mish激活函数具有以下特点:
m = nn.Mish()
input = torch.randn(2)
output = m(input)
Sigmoid
函数,然后其它的所有单元都选择 Relu
函数。Relu
激活函数。有时,也会使用 T a n h
激活函数,但~R e l u~的一个优点是:当是负值的时候,导数等于0。S i g m o i d
激活函数:除了输出层是一个二分类问题基本不会用它。T a n h
激活函数:T a n h 是非常优秀的,几乎适合所有场合。R e L u
激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用R e L u
或者ReLuLeaky
,再去尝试其他的激活函数。L e a k y R e L U
函数。batchsize
:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize
个样本训练;
iteration
:1 11个iteration
等于使用batchsize
个样本训练一次;
epoch
:1 11个epoch
等于使用训练集中的全部样本训练一次;
举个例子,训练集有1000 个样本,batchsize
=10 1010,那么:训练完整个样本集需要:100次iteration
,1 次epoch
。
BatchSize的影响:
不同的BatchSize大小可能会导致模型收敛速度、泛化能力等方面的差异。
Batch的选择决定的事下降方向,越准确的数据量,决定的梯度下降的方向就越准确,对于小的数据集来说,BatchSize可以选择全部数据集大小,但是对于大的数据集来说,如果BatchSize选择的过大,将导致运行内存不足,无法训练下去等问题。BatchSize不宜选的太小,太小了容易修正方向导致不收敛,或者需要经过很大的Epoch才能收敛,太大的话会导致显存爆掉。
总结:
因此,在选择BatchSize大小时需要综合考虑模型的复杂度、训练数据量、硬件设备等因素,一般建议尝试不同的BatchSize大小,选择在一定时间内能够让模型达到较好性能的大小。同时,也可以使用一些加速训练的技巧,如分布式训练、混合精度训练等,以进一步提高训练效率。
就是涉及到所谓的BN(Batch Normalization 批归一化)
优点:
正则化是为了防止过拟合而引入的一种技术。模型可能会过度适应训练数据,从而导致在新数据上的性能下降。这种现象被称为过拟合。正则化通过限制模型的复杂度,减少模型对训练数据的过度拟合,从而提高模型的泛化能力,即在新数据上的性能。
卷积神经网络是一个层次模型,主要包括输入层、卷积层、池化层、激活层、全连接层以及输出层。卷积神经网络专门针对图像而设计,主要特点在于卷积层的特征是由前一层的局部特征通过卷积共享的权重得到。在卷积神经网络中,输入图像通过多个卷积层和池化层进行特征提取,逐步由低层特征变为高层特征; 高层特征再经过全连接层和输出层进行特征分类,产生一维向量,表示当前输入图像的类别。因此,根据每层的功能,卷积神经网络可以划分为两个部分: 由输入层、卷积层、激活层和池化层构成特征提取器,以及由全连接层和输出层构成分类器。
说明:下面的讲解全部联系目标检测方向即图像相关
Input Laye
输入图像,包含三个值(W,H,RGB通道)组成3维像素矩阵H x W x 3,将数据传递到卷积层等一些列的后续步骤。
Convolution Layer
卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,卷积层越多,特征的表达能力越强。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。
涉及到一些基本的属性:
参数名 | 作用 | 常见设置 |
---|---|---|
卷积核大小 (Kernel Size) | 卷积核的大小定义了卷积的感受野 | 卷积核的大小是一个重要参数,它决定了每次卷积操作时要处理的输入数据的大小。卷积核大小通常是一个正方形或长方形矩阵,例如 3 × 3 3\times33×3 或 5 × 5 5\times55×5。 |
步长 (Stride) | 定义了卷积核在卷积过程中的步长 | 步长是卷积操作时卷积核每次移动的步长。步长越大,输出特征图的尺寸就越小,计算量也就越少,但可能会丢失一些细节信息。 |
填充 (Padding) | 在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 | 填充是在输入数据的边缘上填充一些额外的像素值,以保持输出特征图的大小与输入数据的大小相同。填充可以避免边缘像素被卷积核过度压缩而丢失信息。 |
卷积核个数(Channel) | 指定卷积操作时卷积核的宽度 | 每个卷积层包含多个卷积核,每个卷积核可以提取不同的特征。卷积核的个数可以看做是输出通道数,即一个卷积层的输出可以是多个特征图,每个特征图对应一个卷积核。 |
Kernel
控制卷积操作的感受野基本的处理流程:
池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。
缺点:
池化操作通常也叫做子采样(Subsampling)或降采样(Downsampling),在构建卷积神经网络时,往往会用在卷积层之后,对感受野内的特征进行选择,提取区域内最具代表性的特征,能够有效地减少输出特征数 量,进而减少模型参数量。按操作类型通常分为最大值池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受野内最大值、平均与总和的特征值作为输出,最常用的是最大值池化和平均池化 。
池化层主要有以下四点作用:
将前一层的所有神经元与当前层的所有神经元都连接起来。这意味着当前层的每个神经元都会接收前一层所有神经元的输出,并产生自己的输出。在输出层,全连接层可以将神经网络的输出映射到特定的类别或连续值。在隐藏层,全连接层可以充当特征提取器,将输入数据转换为更高级别的特征表示。
神经网络的输出层负责将模型的最终预测输出。输出层的结构和激活函数的选择取决于模型的任务类型。
下面列举一些常见的输出层类型和激活函数:
除了选择合适的输出层和激活函数外,还需要根据不同任务的需求,对输出进行后续处理,比如对分类问题中输出的概率进行阈值判定,对目标检测问题中的框进行后处理等。
不同层次的卷积提取到的特征是不同的,具体如下:
分组卷积:将卷积操作的计算步骤分为多个子操作,降低计算量,提高计算效率。
**基本思想:**将输入的特征图按照通道分为几个子组,然后对每个子组分别进行卷积计算。
缺点:
转置卷积:转置卷积(Transpose Convolution),也称为反卷积(Deconvolution)或上采样卷积(Upsampling Convolution),是卷积神经网络中的一种常见操作,用于将低分辨率的特征图放大到高分辨率,或者将稀疏的特征图转换为密集的特征图。
**基本思想:**基本思想是通过卷积操作对输入张量进行填充(padding)和步长(stride)的扩展,从而将其放大到指定的尺寸
空洞卷积:(膨胀卷积或者扩张卷积)可以在不增加参数和计算量的情况下增大卷积核的感受野,从而提升网络的性能。空洞卷积比起普通的卷积就是多了一个空洞大小D,并且在计算的时候跳过了一些输入特征图中的像素。
深度可分离卷积:将传统的卷积操作分为两部分:深度卷积核逐点卷积。
深度卷积中,每个输入通道都会有一个卷积核进行卷积操作,这样可以捕捉到每个通道的特征信息。
**逐点卷积中,**通过逐点卷积将所有通道的特征融合起来,生成最终的输出特征图。
最后,可以显著减少卷积操作的计算量和参数数量,从而加速网络训练和推理过程,降低过拟合风险。
Ghost卷积:Ghost卷积则引入了幽灵通道的概念,将输入通道分成两个部分:主通道和幽灵通道。主通道和幽灵通道的比例由超参数 α \alphaα 控制,通常取值为1/2 或者 1/4。
相关文章:https://mp.weixin.qq.com/s/FRLgTggdee_G4BcZu1f3XQ
论文地址: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.678.7068&rep=rep1&type=pdf
为了提高训练较大CNN模型的正则化性能,受Dropout(将一半激活函数随机设置为0)的启发,Dingjun Yu等人提出了一种随机池化Mix Pooling[2] 的方法,随机池化用随机过程代替了常规的确定性池化操作,在模型训练期间随机采用了最大池化和平均池化方法,并在一定程度上有助于防止网络过拟合现象。其定义如下:
其中,λ
是 0或1的随机值,表示选择使用最大池化或平均池化,换句话说,混合池化以随机方式改变了池调节的规则,这将在一定程度上解决最大池和平均池所遇到的问题。
优点:混合池化优于传统的最大池化和平均池化方法,并可以解决过拟合问题来提高分类精度。此外该方法所需要的计算开销可忽略不计,而无需任何超参数进行调整,可被广泛运用于CNN。
计算过程如下:
随机池化只需对特征图中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大,而不像max-pooling那样,永远只取那个最大值元素,这使得随机池化具有更强的泛化能力。
- 论文地址: https://arxiv.org/pdf/2101.00440
- 代码链接: https://github.com/alexandrosstergiou/SoftPool
提出背景:
现有的一些池化方法大都基于最大池化和平均池化的不同组合,而软池化Soft Pooling是基于softmax加权的方法来保留输入的基本属性,同时放大更大强度的特征激活。与maxpooling不同,softpool是可微的,所以网络在反向传播过程中为每个输入获得一个梯度,这有利于提高训练效果。
定义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNNswqCf-1681367816830)(null)]
这样的方式让整体的局部数值都有所贡献,重要的特征占有较高的权重。比Max pooling(直接选择最大值)、Average pooling (求平均,降低整个局部的特征强度) 能够保留更多讯息。
作为一种新颖地池化方法,SoftPool可以在保持池化层功能的同时尽可能减少池化过程中带来的信息损失,更好地保留信息特征并因此改善CNN中的分类性能。大量的实验结果表明该算法的性能优于原始的Avg池化与Max池化。随着神经网络的设计变得越来越困难,而通过NAS等方法也几乎不能大幅度提升算法的性能,为了打破这个瓶颈,从基础的网络层优化入手,不失为一种可靠有效的精度提升手段。
论文地址
幂平均池化(Power Mean Pooling)是一种基于参数化的池化方式,它可以根据不同的超参数取值,在平均池化和最大池化之间进行平滑的过渡,提供了一种更灵活的池化方式。
幂平均池化的优点包括:
幂平均池化是一种比较有用的池化方式,可以根据不同的超参数取值,在平均池化和最大池化之间进行平滑的过渡,从而提供了一种更灵活、更有代表性、更具泛化能力的池化方式。
论文地址
DPP(Determinantal Point Processes)池化是一种基于行列式理论的池化方式,它可以通过计算特征矩阵的行列式值,来评估不同特征之间的相关性,从而实现更加有效的特征选取和池化。
DPP池化的优点包括:
DPP池化是一种基于行列式理论的池化方式,可以通过计算特征矩阵的行列式值,来评估不同特征之间的相关性,从而实现更加有效的特征选取和池化,具有很高的实用价值。
论文地址
局部重要性池化(Local Importance Pooling)是一种基于注意力机制的池化方式,可以有效地提取输入特征图中的关键信息,从而实现更加精确和有效的特征池化。
局部重要性池化的具体实现方式如下:
局部重要性池化的优点包括:
局部重要性池化是一种基于注意力机制的池化方式,可以自适应地选择与当前任务相关的关键信息,提高特征池化的效率和准确性,具有很高的实用价值。
提问:卷积层和池化层有什么区别?
它们的相同之处就是在结构上有一定的相似,都是对感受野内特征进行提取,根据步长设置获取不同维度的输出,不同的地方在于其内部操作,以及最后的作用。
卷积层 | 池化层 | |
---|---|---|
结构 | 零填充时输出维度不变,而通道数改变 | 通常特征维度会降低,通道数不变 |
稳定性 | 输入特征发生细微改变时,输出结果会改变 | 感受域内的细微变化不影响输出结果 |
作用 | 感受域内提取局部关联特征 | 感受域内提取泛化特征,降低维度 |
参数量 | 与卷积核尺寸、卷积核个数相关 | 不引入额外参数 |
ResNet、MobileNet等很多网络也采用并发展了这个结构,瓶颈结构的初衷是为了降低大卷积层的计算量。
可以以最小的计算代价达到与之前相似甚至更好的效果,因为瓶颈结构会增加网络层数,所以特征提取能力可能也会有相应提升,瓶颈结构基本上可以用于所有的卷积神经网络中场景,包括物体检测和分割、生成对抗网络等大方向。
神经网络的沙漏结构(hourglass structure)是一种常用于图像处理和计算机视觉任务中的网络结构,也称为“Hourglass Network”。它主要是通过多个重复的编码器-解码器模块来逐步提取并重建图像特征,从而实现对图像中物体的检测和定位。
沙漏结构由一系列的编码器和解码器模块组成,其中编码器用于对输入图像进行特征提取和降维,解码器则用于对提取的特征进行上采样和重建。每个编码器-解码器模块都由下采样、上采样和跳跃连接(skip connection)三个部分组成。
下采样部分通常使用卷积和池化等操作来逐步减小特征图的尺寸和通道数,以提取更高级别的特征。而上采样部分则使用转置卷积等操作来逐步恢复特征图的尺寸和通道数,从而实现对特征的重建和细化。跳跃连接则用于跨层传递信息,将低层次和高层次的特征进行融合,以便更好地利用不同层次的信息。
沙漏结构的优点在于它能够有效地处理图像中的多尺度信息,并能够进行端到端的训练和预测。它在许多计算机视觉任务中得到广泛应用,如人体姿态估计、目标检测和图像分割等。
(未完 持续更新…)