求助,fisher判别法对多类进行判别的程序

求助,fisher判别法对多类进行判别的程序,第1张

Fisher判别的基本思路就是投影,针对P维空间中的某点x=(x1,x2,x3,…,xp)寻找一个能使它降为一维数值的线性函数y(x):

y(x)= ∑Cjxj

然后应用这个线性函数把P维空间中的已知类别总体以及求知类别归属的样本都变换为一维数据,再根据其间的亲疏程度把未知归属的样本点判定其归属。这个线性函数应该能够在把P维空间中的所有点转化为一维数值之后,既能最大限度地缩小同类中各个样本点之间的差异,又能最大限度地扩大不同类别中各个样本点之间的差异,这样才可能获得较高的判别效率。在这里借用了一元方差分析的思想,即依据组间均方差与组内均方差之比最大的原则来进行判别。

论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

1.数值问题。

    输入变量的数量级不一致可能会引起数值问题。因为tansig的非线性区间大约在[-1.7,1.7]。意味着要使神经元有效,tansig( w1*x1 + w2*x2 +b) 里的 w1*x1 +w2*x2 +b 数量级应该在 1 (1.7所在的数量级)左右。这时输入较大,就意味着权值必须较小,一个较大,一个较小,两者相乘,就引起数值问题了。

2.求解需要

    在训练前我们将数据归一化是为了更方便的求解。

     那么,究竟给求解带来了什么方便呢?

    这个问题不能一概而论,不同的算法,在归一化中得到的好处各不相同。目前大部算法,都比较需要归一化,特别是常用的梯度下降法(或梯度下降的衍生方法),归一化和不归一化,对梯度下降法的影响非常大。不同的算法,对归一化的依赖程序不同。

    Batch Normalization(简称BN)就是对每一批数据进行归一化,确实如此,对于训练中某一个batch的数据{x1,x2,...,xn},注意这个数据是可以输入也可以是网络中间的某一层输出。在BN出现之前,我们的归一化 *** 作一般都在数据输入层,对输入的数据进行求均值以及求方差做归一化,但是BN的出现打破了这一个规定,我们可以在网络中任意一层进行归一化处理,因为我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化 *** 作就成为Batch Normalization。

    因为深层神经网络在做非线性变换前的 激活输入值 (就是那个x=WU+B,U是输入) 随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近 (对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这 导致反向传播时低层神经网络的梯度消失 ,这是训练深层神经网络收敛越来越慢的 本质原因 , 而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布 ,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是 这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

我们把网络中间层在训练过程中,数据分布的改变称之为:“ Internal Covariate Shift ”。 BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

怎么做?

1、求每一个训练批次数据的均值和方差

2、使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。

3、尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。 这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。γ和β是在训练时网络自己学习得到的。

解决了什么?

一个标准的归一化步骤就是减均值除方差,在这种归一化中引入了两个需要学习的参数。

    a中左图是没有经过任何处理的输入数据,曲线是sigmoid函数,如果数据在梯度很小的区域,那么学习率就会很慢甚至陷入长时间的停滞。减均值除方差后,数据就被移到中心区域如右图所示,对于大多数激活函数而言,这个区域的梯度都是最大的或者是有梯度的(比如ReLU),这可以看做是一种对抗梯度消失的有效手段。 对于一层如此,如果对于每一层数据都那么做的话,数据的分布总是在随着变化敏感的区域,相当于不用考虑数据分布变化了,这样训练起来更有效率。

    减均值除方差得到的分布是正态分布。 如果数据本身就很不对称,或者激活函数未必是对方差为1的数据最好的效果,比如Sigmoid激活函数,在-1~1之间的梯度变化不大,那么非线性变换的作用就不能很好的体现 ,换言之就是,减均值除方差 *** 作后可能会削弱网络的性能。针对该情况,在前面三步之后加入第4步完成真正的batch normalization。

     BN的本质就是利用优化变一下方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。

如何在验证集中使用?

    对于预测阶段时所使用的均值和方差,其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差,待训练完毕后,我们求整个训练样本的均值和方差期望值,作为我们进行预测时进行BN的的均值和方差

CNN中的BN

    卷积神经网络的特征是对应到一整张特征响应图上的,所以做BN时也应以响应图为单位而不是按照各个维度。比如在某一层,batch大小为m,响应图大小为w×h,则做BN的数据量为m×w×h。

    BN在深层神经网络的作用非常明显:若神经网络训练时遇到收敛速度较慢,或者“梯度爆炸”等无法训练的情况发生时都可以尝试用BN来解决。同时,常规使用情况下同样可以加入BN来加速模型训练,甚至提升模型精度。

    BN对batch是independent的,过小的batch size会导致其性能下降,一般来说每GPU上batch设为32最合适。但是对于一些其他深度学习任务batch size往往只有1-2,比如目标检测,图像分割,视频分类上,输入的图像数据很大,较大的batchsize显存吃不消。

深度网络中的数据维度一般是[N, C, H, W]或者[N, H, W,C]格式,N是batch size,H/W是feature的高/宽,C是feature的channel,压缩H/W至一个维度,其三维的表示如上图,假设单个方格的长度是1,那么其表示的是[6, 6,*, * ]

BN在batch的维度上norm,归一化维度为[N,H,W],对batch中对应的channel归一化;

LN避开了batch维度,归一化的维度为[C,H,W];

IN 归一化的维度为[H,W];

而GN介于LN和IN之间,其首先将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N, G,C//G , H, W],归一化的维度为[C//G , H, W]

    传统角度来讲,在深度学习没有火起来之前,提取特征通常是使用SIFT,HOG和GIST特征,这些特征有一个共性,都具有按group表示的特性,每一个group由相同种类直方图的构建而成,这些特征通常是对在每个直方图(histogram)或每个方向(orientation)上进行组归一化(group-wise norm)而得到。而更高维的特征比如VLAD和Fisher Vectors(FV)也可以看作是group-wise feature,此处的group可以被认为是每个聚类(cluster)下的子向量sub-vector。

    从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。

    导致分组(group)的因素有很多,比如频率、形状、亮度和纹理等,HOG特征根据orientation分组,而对 神经网络 来讲,其提取特征的机制更加复杂,也更加难以描述,变得不那么直观。

    另在神经科学领域,一种被广泛接受的计算模型是对cell的响应做归一化,此现象存在于浅层视觉皮层和整个视觉系统。

    作者基于此,提出了组归一化(Group Normalization)的方式,且效果表明,显著优于BN、LN、IN等。GN的归一化方式避开了batch size对模型的影响,特征的group归一化同样可以解决$Internal$ $Covariate$ $Shift$的问题,并取得较好的效果。

1. The Holm-Sidak Test can be used for both pairwise comparisons and comparisons versus a control group. It is more powerful than the Tukey and Bonferroni tests and is recommended as the first line procedure for most multiple comparison testing.

Holm-Sidak 检验可用于成对比较和与对照组的比较。它比 Tukey 和 Bonferroni 检验更强大,推荐作为大多数多重比较检验的第一行程序。

2. The Tukey Test is used for all pairwise comparisons of the mean responses to the different treatment groups. The Tukey Test is more conservative than the SNK test, i,e., it is less likely to determine that a given difference is statistically significant.

Tukey 检验用于对不同治疗组的平均响应的所有成对比较。 Tukey 检验比 SNK 检验更保守,即确定给定差异具有统计显着性的可能性较小。

3. The SNK (student-newman-keuls) Test is used for all pairwise comparisons of the mean responses among the different treatment groups. The SNK Test is less conservative than the Tukey test, i,e., it is more likely to declare an observed difference statistically significant.

SNK (student-newman-keuls) 检验用于不同治疗组之间平均反应的所有成对比较。 SNK 检验不如 Tukey 检验保守,即它更有可能声明观察到的差异具有统计显着性。

4. Dunnett's Test is used to compare several treatment groups to a single control group.

Dunnett 检验用于将几个治疗组与单个对照组进行比较。

5. The Bonferroni t-test can be used for both pairwise comparisons and comparisons versus a control group.

Bonferroni t 检验可用于成对比较和与对照组的比较。

6. Fisher's LSD Test can be used for pairwise comparisons. It is included for the sake of completeness. The Holm-Sidak test is preferred over Fisher's LSD test.

Fisher 的 LSD 检验可用于成对比较。为了完整起见,将其包括在内。 Holm-Sidak 检验优于 Fisher 的 LSD 检验。

7. Duncan's Test is an obsolete test for all pairwise comparisons. It is included for the sake of completeness. It is computed the same as the SNK test but uses a different table of critical values. The Holm-Sidak test is preferred over Duncan's test.

邓肯检验是一种用于所有成对比较的过时检验。为了完整起见,将其包括在内。它的计算方法与 SNK 测试相同,但使用不同的临界值表。 Holm-Sidak 检验优于 Duncan 检验。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7989033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存