地震去噪新探索(二)——无监督卷积神经网络调优实战

地震去噪新探索(二)——无监督卷积神经网络调优实战,第1张

“心中有歌,到处都是舞台”。

自从投入了自编码的深度学习研究后,一路走来就是磕磕碰碰。

上一篇将地震信号用在了自编码卷积神经网络降噪(见《地震去噪新探索——无监督卷积神经网络实战》),结果那叫一个惨。如下面的图示,上边是噪声图,下边是去噪图:

从去噪效果来看,仅能获取到一些支离破碎的有效信号,这是一张完全拿不出手的效果图。

卷积神经网络不是更能学习到特征细节,性能更好吗?为啥我做出来的效果如此之惨?

前期的参数设置包括:使用10000个2828的训练小块,训练epoch:5,学习率:0001,优化器:tftrainAdamOptimizer(learn)minimize(cost),LOSS函数:tfnnsigmoid_cross_entropy_with_logits(labels=targets_, logits=logits_),cost = tfreduce_mean(loss)

网络结构图为:

训练损失曲线:

1归一化的优化

惨不忍睹的LOSS训练结果引起了我的注意。将收敛失败这个问题拿到网上去寻找答案,有大神说这是归一化没做好。

那就先进行2项优化:

一是控制训练样本的取值范围到(-1,1),使用方法是原值除以最大值的方法,就像这样:

noisy_imgs=noisy_imgs/abs(noisy_imgs)max()

二是在训练网络的每个卷积后增加BN,就像这样:

conv1 = tflayersconv2d(inputs_, 64, (3,3), padding='same', activation=tfnnrelu)

conv1 = tflayersbatch_normalization(conv1, training=True)

再进行训练,效果不明显,还是没有收敛。

另外,很多归一化的方法是将取值范围集中在(0,1),使用这样的算法:

imgs= (imgs-imgsmin())/(imgsmax()-imgsmin())#归一化到[0,1]

结果证明对于地震数据完全没法训练,曲线是这样的:

2学习函数的调整

“一计不成,再生一计”。

我想到了对优化器和LOSS函数进行改动。

在神经网络学习中,损失函数的作用是度量神经网络的输出的预测值,计算与实际值之间的差距,可以说是实现学习的关键函数。常见的损失函数包括:最小二乘损失函数、交叉熵损失函数、回归中使用的smooth L1损失函数等。

而优化函数的原理是:把损失值从神经网络的最外层传递到最前面,实现反向传播学习,这是神经网络实现持续学习达到收敛的关键。如最基础的梯度下降算法包括:随机梯度下降算法,批量梯度下降算法,带动量的梯度下降算法,Adagrad,Adadelta,Adam等。

那我就先从优化器函数入手吧。

既然学习率为0001无法收敛,那试试00001呢。结果还真收敛了,如下图:

那预测效果如何呢?结果是一塌糊涂,连基本特征都学习不到,如下图:

这是怎么回事呢?我的理解是学习率太高,就会让神经网络学习到更细粒度的特征,而失去了我们想要的特征。就相当于研究一个人的特征,我们通常是从五官、体型等方面来看,但如果从细胞的角度的去学习,那就无法还原人的外貌特征了。

另外,设置为00005也好不了多少。

那改动LOSS函数能不能起作用呢?

比如改为softmax_cross_entropy_with_logits,像这样:

loss = tfnnsoftmax_cross_entropy_with_logits(labels=targets_, logits=logits_)

结果是无法学习,如下图:

3其它的尝试

两板斧过去,还没有看到变好的迹象。我没有放弃,我开始思考为啥原程序训练Mnist效果都如此好,换到地震数据训练就不行了呢?

我想到了训练样本数据是不是有问题。我又进行了以下尝试:

一是调整训练样本数据的尺寸:有128128,4040,3232,2828等。

二是对样本数据进行截断:地震数据不是异常值多,偏离度大吗。我就筛选数据集中的90%区间,区间外面的进行截断,再进行归一化。这样数据分布就均匀多了。

三是扩充采样数据来源,从不同的数据源采样。是不是数据更丰富,训练效果就会改观呢?

……

你可以想象做这些实验有多么琐碎和繁杂,然而现实却是如此的无情。最后结局都是一个——失败,根本拿不出一个像样的效果,连一个较为清晰的结果都没有。

“山穷水复疑无路,柳暗花明又一村”。

在持续N天被现实按在地上摩擦后,我痛定思痛:到底解决的方向在哪里?

在现有这个无可救药的神经网络中,提高学习率可以收敛,但是无法学习到有效特征。降低学习率可以学习到有效特征但是无法收敛,也就是说无法持续优化的学习。整个成了一个悖论。

面对这张丑陋的预测结果图,我意识到可能是网络结构本身出了问题。很有可能是网络对数据学习有效,对地震数据学习就是不行。

在翻阅了其它研究者的论文后,我逐步聚焦到了一个结构——解码。我的程序在这部分是使用卷积核上采样的结构。像这样:

conv4 = tfimageresize_nearest_neighbor(conv3, (8,8))

conv4 = tflayersconv2d(conv4, 32, (3,3), padding='same', activation=tfnnrelu)

而其它地震论文结构却包含了一个我没有的结构——反卷积。

如果我也使用反卷积,甚至就只有卷积和反卷积这种最简单的自编码结构,效果如何呢?像这样的结构:

x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)

x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)

x = Conv2DTranspose(32, (3,3), padding='same', activation='relu', kernel_initializer='glorot_normal')(x)#反卷积

x = Conv2DTranspose(32, (3,3), padding='same', activation='relu', kernel_initializer='glorot_normal')(x)

decoded = Conv2DTranspose(1, (1,1), padding='same', activation='tanh', kernel_initializer='glorot_normal')(x)

结果是令人惊艳的。下图是收敛的效果,很快就能够收敛:

训练的效果更好。以下分别是原图,噪声图和去噪效果图:

可以看到,上面噪声几乎淹没了有效信号。然后通过训练,仅仅5个迭代,就较好的分离出了有效信号。

“既然选择了远方 便只顾风雨兼程”。

看来反卷积是是解决地震学习的一把钥匙。下一步我将研究反卷积能适应地震处理的原因,然后继续进行优化和创新,并使用其它算法做对比实验,争取做出更好的效果。

如果喜欢请点“赞”,如果小伙伴对程序感兴趣,可以联系我获取。

监督学习的过程可以概括为:最小化误差的同时规则化参数。最小化误差是为了让模型拟合训练数据,规则化参数是为了防止过拟合。参数过多会导致模型复杂度上升,产生过拟合,即训练误差很小,但测试误差很大,这和监督学习的目标是相违背的。所以需要采取措施,保证模型尽量简单的基础上,最小化训练误差,使模型具有更好的泛化能力(即测试误差也很小)。

范数规则化有两个作用:

1)保证模型尽可能的简单,避免过拟合。

2)约束模型特性,加入一些先验知识,例如稀疏、低秩​等。

1)实现参数的稀疏有什么好处吗?

一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对 测试 数据就只能呵呵了。另一个好处是参数变少可以使整个模型获得更好的可解释性。

2)参数值越小代表模型越简单吗?

是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

L2范数即欧氏距离:

从两个角度来解释这个问题。

角度一:数学公式

这个角度从权值的更新公式来看权值的收敛结果。

首先来看看L1和L2的梯度(导数的反方向):

所以(不失一般性,我们假定:wi等于不为0的某个正的浮点数,学习速率η 为05):

L1的权值更新公式为wi= wi- η 1  = wi- 05 1,也就是说权值每次更新都固定减少一个特定的值(比如05),那么经过若干次迭代之后,权值就有可能减少到0。

L2的权值更新公式为wi= wi- η wi= wi- 05 wi,也就是说权值每次都等于上一次的1/2,那么,虽然权值不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但不为0。

L1能产生等于0的权值,即能够剔除某些特征在模型中的作用(特征选择),即产生稀疏的效果。

L2可以得迅速得到比较小的权值,但是难以收敛到0,所以产生的不是稀疏而是平滑的效果。

角度二:几何空间

这个角度从几何位置关系来看权值的取值情况。

直接来看下面这张图:

高维我们无法想象,简化到2维的情形,如上图所示。其中,左边是L1图示,右边是L2图示,左边的方形线上是L1中w1/w2取值区间,右边得圆形线上是L2中w1/w2的取值区间,绿色的圆圈表示w1/w2取不同值时整个正则化项的值的等高线(凸函数),从等高线和w1/w2取值区间的交点可以看到,L1中两个权值倾向于一个较大另一个为0,L2中两个权值倾向于均为非零的较小数。这也就是L1稀疏,L2平滑的效果。

假设原先损失函数是C0,那么在L2和L1正则条件下对参数求导分别是:

可以想象用梯度下降的方法,当w小于1的时候,L2正则项的惩罚效果越来越小,L1正则项惩罚效果依然很大,L1可以惩罚到0,而L2很难。

L1+L2结合的方式,即elastic net。这种方式同时兼顾特征选择(L1)和权重衰减(L2)。其公式如下这种方式同时兼顾特征选择(L1)和权重衰减(L2)。其公式如下

上式中,t为正则项与L(w)之间的trade-off系数,和之前的描述一致,p是elastic net里独有的参数,它是L1和L2之间的一个trade-off,如果p为0,那么上式退化为L2正则化,如果p为1,那么上式退化为L1正则化。所以当p取值为0到1时(不包含端点),上式兼顾了L1和L2的特点。又由于L1为1范式,L2为2范式,那么elastic net就介于1范式和2范式之间。

总结:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。在所有特征中只有少数特征起重要作用的情况下,选择Lasso比较合适,因为它能自动选择特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也许更合适。

L0/L1/L2范数的联系与区别

L0,L1,L2正则化浅析

为什么L1稀疏,L2平滑? (赞)

l1 相比于 l2 为什么容易获得稀疏解? (赞)

https://wwwzhihucom/question/20473040utm_campaign=rss&utm_medium=rss&utm_source=rss&utm_content=title

机器学习中的正则化技术

深度学习一般什么情况下使用nnL1Loss?? 各个损失函数的使用 一般都是靠什么来决定呢 深度学习一般什么情况下使用nnL1Loss?? 各个损失函数的使用 一般都是靠什么来决定呢

两种方法都是常见的分类算法,从目标函数来看,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss。这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑suppor

更多信息请查看原文:https://wwwyanxishecom/TextTranslation/2447from=jianshu0323

计算机视觉是计算机科学中主要关注“数字图像的信息自动提取”的这么一个领域。

在过去的十年里,深度学习的创新、大量数据的易用性以及GPU($$)单元的可访问性,都将计算机视觉领域推向了聚光灯下。它甚至在人脸验证和手写文本识别等任务中展现了超人一般的性能。(事实上,在如今航班登机的过程中,自动人脸验证应用已经越来越普遍)

 近年来,计算机视觉领域在网络结构、激活函数、损失函数等方面有了许多创新。 

4 个每个机器学习工程师都应该知道的CNN网络!

多年来,CNN的各种架构变形的开发,导致了惊人了进步在深…

mediumcom

正如我上一篇文章中所讨论的,损失函数对模型的性能起着关键作用。选择正确的损失函数可以帮助您的模型学会关注数据中正确的特征,以获得最佳和更快的收敛速度。

损失函数赢家-您应该知道的常见损失函数

每个ML工程师都应该知道的ML中流行常用的损失函数。进一步了解他们的优点…

mediumcom

本文特别总结了计算机视觉中一些重要的损失函数。 

您可以在这个 链接 中找到这里讨论的所有loss函数的PyTorch实现

像素损失函数

(Pixel-wise loss function)

顾名思义,这种损失函数计算预测图像和目标图像间像素对像素的损失。前一篇文章中讨论的大多数损失函数,如MSE(L2 loss)、MAE(L1 loss)、交叉熵损失(cross-entropy loss)等,都可以应用于计算预测变量和目标变量的每一对像素之间的损失。

由于这些损失函数先分别对每个像素向量进行类预测的评估,然后对所有像素点的评估结果进行平均,因此可以明确地说它们在学习过程中对图像中的每个像素一视同仁。对于需要进行像素级预测地语义分割模型,这一点十分有用。

U-Net  等模型对这些损失函数进行了一定变形。明确来说也就是,为了解决图像分割中的类不平衡问题,人们采用了加权像素交叉熵损失函数。

类不平衡是像素级分类任务中常见的问题。当图像数据中的各个类数量相差较大时便会出现这种问题。由于像素损失将所有像素的损失平均了,所以训练过程中数量最多的类将占主导地位。

感知损失函数

(Perceptual loss function)

Johnson等人(2016) 提出,当比较两个看起来相似的不同图像,比如只移动了一个像素点的同一张或不同分辨率的相同时,感知损失函数比较适用。尽管图像非常相似,但是使用逐像素损失函数会造成很大的误差,在这种情况下,使用能够比较图像之间高级感知和语义差异的感知损失函数会更妥当。

以一个图像分类网络比如已经在ImageNet数据集的数百万个图像上进行了训练的VGG为例,该网络的第一层倾向于提取低级特征(比如线、边或颜色梯度,最终卷积层则更倾向于处理更复杂的特征(例如特定的形状和图案)。根据Johnson等人的说法,在前几层中捕获的低层特征对于比较非常相似的图像十分有用。

例如,我们构建一个网络以生成输入的超分辨率。训练过程中,我们将会得到一系列中间目标,它们是输入的超分辨版本。我们的目标是比较输出与目标之间的差异。为此,我们使这些图像通过预先训练的VGG网络,并提取VGG中前几个块的输出值,从而提取图像的低级特征信息, 然后我们用一个简单的逐像素损失来比较这些低层特征张量。

图像分类的预训练损失网络

感知损失的数学表示

其中,V_j(Y)表示在处理图像Y时VGG网络第j层的激活,其大小为(C_j,H_j,W_j)。我们使用L2 loss比较真实图像Y和预测图像Y的激活,并利用图像形状对其进行归一化。 如果您想使用VGG网络的多个特性映射作为损失计算的一部分,只需将多个j层的L_j值相加。

内容风格损失函数-神经风格转移

(Content - Style loss functions — Neural style transfer)

风格转换是将图像的语义内容呈现为不同风格的过程。样式转换模型的目标是,给定一个内容图像(C)和一个样式图像(S),使用C的内容和S的样式生成输出图像 。

在这里,我们将讨论用于训练这种风格转换模型的内容风格损失函数的简单实现之一。内容风格损失函数的许多变体已在后续的研究中的得到应用,下一节将讨论这些变体的其中一种,纹理损失。

内容风格损失的数学表示

研究发现,CNNs在较高的层次上捕获内容的信息,而在较低的层次上更关注单个像素值

因此,我们取CNN的一个或多个高层,计算原始内容图像(C)和预测输出(P)的激活图——

类似地,可以通过计算预测图像(P)和样式图像(S)低层特征映射的L2距离来计算风格损失。由此净损失函数定义为

alpha和beta是可以调节的超参数。 

注意:仅通过减少内容风格损失来进行优化会导致高像素的噪声输出。为了解决这个问题,保证生成图像的空间连续性和平滑性, 全变分损失(total variation loss) 上用场。

纹理损失函数

(Texture loss function)

为计算图像风格转换中的风格损失, Gatys等人(2016) 引入了纹理损失。

纹理损失是一种基于感知函数来加以改进的损失函数,特别适用于捕获图像风格样式。 Gatys等人 发现,我们可以通过观察VGG网络中的激活或特征映射,利用它们值的空间相关性来提取图像的风格表示。这可以Gram矩阵来实现——

对于VGG网络的l层,Gram矩阵是该层矢量化特征映射F_i和F_j的内积,它可以捕捉特征在图像不同部分共同出现的趋势。

纹理损失的数学表示

这里,G^l和A^l分别是模型输出和目标图像的l层风格表示,N_l是层l中不同特征映射的数量,M_l是层l中特征地图的大小(即通道宽度高度,E_l是层l的纹理损失。

净纹理损失是所有纹理损失的加权和,如下所示——

这里,a为原始图像,x为预测图像。

注意:虽然这里的数学看起来有点复杂,但是实际上纹理损失只是一个应用在特征映射的gram矩阵上的感知损失。

拓扑感知损失函数

(Topology-aware loss function)

最近 Mosinska等人(2017) 在文献中介绍了另一个有趣的损失函数,拓扑感知损失函数。它应用于分割掩模预测,可以视作感知损失的拓展。

Mosinska等人认为,在图像分割问题中使用的逐像素损失,如交叉熵损失,仅依赖于局部测度而不考虑拓扑结构的特征,如连接部件或孔洞的数量。因此,传统的分割模型,比如U-Net,往往会对薄层结构进行错误分类。这是因为使用逐像素损失时,薄层像素错误分类的成本低。因此,他们建议引入基于VGG-19网络生成的特征映射的惩罚项(类似于感知损失)以用来计入拓扑信息的影响,从而对逐像素损失进行改进。

来自 论文 :(c)利用逐像素损失法检测神经元膜后得到的分割结果;(d) 利用拓扑损失法检测神经元膜后得到的分割结果。

这种方法也特别适用于对有所遮挡(比如树木遮挡)的卫星图像中道路的分割。

拓扑感知损失的数学表示

这里,l(m,n)表示VGG19网络中第n层中的第m个特征映射。Mu是衡量像素损失和拓扑损失相对重要性的标量

对比损失/三重损失

(Contrastive Losses / Triplet Losses)

Florian Schroff等人 在 FaceNet(2015) 中引入了三重态损失,其文章旨在用一个有限小规模的数据集构建一个人脸识别系统(例如办公室的人脸识别系统)。传统的CNN人脸识别体系结构在无法应对这一情况。

Florian-Schroff等人 等人的研究重点是,在一个小样本空间内进行人脸识别,其不仅要能够正确识别人脸匹配,而且要能够准确区分两个不同的人脸。为了解决这个问题,FaceNet的论文引入了一个叫做孪生神经网络(Siamese Network)的概念。

在孪生神经网络中,我们将一个图像A输入网络,将其转换为一个称为嵌入的较小表示。现在,在不更新网络的任何权重或偏差的情况下,我们对一个与A不同的图像B重复此过程并提取其嵌入。如果图像B与图像A中的人相同,则其对应的嵌入必须非常相似。如果它们属于不同的人,那么它们相应的嵌入必须非常不同。

重申一下,孪生神经网络的目标 —— 确保一个人(锚 anchor)的,相比其他人(负 negative)的来说,更接近他本人的(正 positive)的任意一张。

为了训练这样的网络,他们引入了三重损失函数。输入一个三元组-[锚,正,负](见)。三重损失定义如下——

1 定义距离度量d=L2范数

2 计算锚图像嵌入与正图像嵌入之间的距离=d(a,p) 

3 计算锚图像嵌入与负图像嵌入之间的距离=d(a,n)

4 三重损失=d(a,p)-d(a,n)+偏移量

三重损失的数学表示

这里,x^a->锚,x^p->正,x^n->负。

注:为了实现快速收敛,在损失计算中选取正确的三重样本是至关重要的。FaceNet的文章讨论了两种实现此功能的方法:三元组离线生成和三元组在线生成。我们将改天详细讨论这个问题,与此同时,你可以参考一下 FaceNet论文 。

生成性对抗网络损失

(GAN Loss)

最早由 Ian Goodfellow等人(2014) 提出的生成性对抗网络(generative Adversarial Networks, GANs),是目前最流行的图像生成任务解决方案。GANs受到博弈论的启发,使用一种对抗性的方案,以使其可以在无监督的情况下接受训练。

GANs可以被看作是一个二人博弈,在这里我们将生成器(比如生成一个超级分辨率的图像)与另一个网络(鉴别器)进行对抗。鉴别器的任务是,评估图像是来自原始数据集(真实图像)还是由其他网络生成(假图像)。虽然生成器使用鉴别器作为损失函数,但鉴别器模型与其他深度学习神经网络一样也会更新,这意味着生成器的损失函数是隐式的,并且在训练过程中可以不断学习。对于典型的机器学习模型而言,收敛性是所选损失函数在训练数据集上的最小限度。在GAN中,收敛标志着二人博弈的结束。取而代之的是寻找生成器和鉴别器损失之间的平衡点。 

对于GAN,生成器和鉴别器是博弈双方,它们的模型权重将被轮流更新。这里我们将总结一些用于GAN网络的损失函数。

1 最小-最大损失函数

(Min-Max Loss function)

然而,在实际应用中,人们发现这种损失函数对于生成器来说容易饱和。也就是说,如果它不能像鉴别器那样快速地学习,鉴别器就赢了,游戏也就结束了,模型也就不能得到有效的训练。

2 非饱和GAN损失

(Non-Saturating GAN Loss)

非饱和GAN损失是对生成器损失的一种修正。其利用一个细微的变化克服了饱和问题。生成器没有最小化生成图像的鉴别器反向概率的对数,而是最大化生成图像的鉴别器概率的对数。

3 最小二乘GAN损失

(Least squares GAN loss) 

该损失由 Xudong Mao等人(2016) 。当生成图像与真实图像非常不同时,此损失函数特别有用 它可以使梯度非常小或消失,进而导致模式更新很少或没有。

4 Wasserstein GAN 损失

(Wasserstein GAN Loss)

该损失由 Martin Arjovsky等人(2017年) 提出。他们观察到,传统的GAN关注于最小化真实图像和生成图像的实际和预测概率分布之间的距离,即所谓的Kullback-Leibler(KL)散度。然而他们的建议是,对 搬土距离问题 进行建模,根据将一个分布转换为另一个分布的成本来计算两个概率分布之间的距离。

使用Wasserstein损失的GAN将鉴别器的概念转变为了比生成器更新更频繁(例如,比生成器快5倍)的评判器。评论器给图像一个实数评分而不是预测概率。它还要求模型权重保持在较小值。分数的计算使得真假图像分数之间的距离最大化。Wasserstein损失的好处是,它几乎一直提供了一个有用的梯度以允许模型持续训练。

5 循环一致性损失

(Cycle Consistency Loss)

图像到图像的转换是一个图像合成任务,需要对给定图像进行定向修改,生成一个新的图像。例如,把马翻译成斑马(或相反),把画翻译成照片(或相反)等。 

该损失由 Jun-Yan Zhu等人(2018) 提出,用于图像到图像的转换。训练用于图像到图像转换的模型通常需要大量成对示例的数据集,这些示例很难找到。CycleGAN是一种没有成对例子的自动训练技术。这些模型是在无监督的情况下,使用来自源域和目标域的不需要任何关联的图像集合来进行训练。

CycleGAN是GAN体系结构的衍生,它包括两个生成器模型和两个鉴别器模型的同时训练。一个生成器从第一个域获取图像作为输入并输出图像到第二个域,另一个生成器从第二个域获取图像作为输入并生成图像至第一个域。然后使用鉴别器模型来确定生成的图像的合理性,并相应地更新生成器模型。 

循环一致性是指第一生成器输出的图像可以用作第二生成器的输入,并且第二生成器的输出应该与原始图像匹配。反之亦然。

 CycleGAN通过添加额外的损失来衡量生成器2的输出图像与原始图像(即生成器1的输入图像)之间的差异,以及其反循环(即生成器1的输出图象与生成器2的输入图像)的结果,从而鼓励循环一致性。这种损失被用作生成器模型的正则化项,引导新域中的图像生成过程朝原图像转换。 

本文总结了计算机视觉中一些重要损失函数术语集。感谢您的阅读,希望对您有所帮助。

更多信息请查看原文:https://wwwyanxishecom/TextTranslation/2447from=jianshu0323

1增大数据量

2early stoping

通过在模型的训练的过程中同时通过验证集测试模型的准确率,如果模型在测试集上效果上升但是验证集上的效果下降就停止训练,防止过拟合。

3加入正则化项

正则化项包括L1正则化和L2正则化,其中L1正则化让参数等于零,L2正则化会让参数更加平均

因为L1正则化是加入的是权重的绝对值,把这个L1加入损失函数之后,如果使用梯度下降的算法更新权重,我们会对损失函数求每个参数的倒数,对正则化项求导之后如果原来的w大于零那么 w(新的)=w(老的)-(损失函数求导部分+λ sgn(w))。sgn(w)就大于零让新的w减小,如果原来的w小于零那么sgn(w)就是负的让变大,所以总体来说就是会导致w一直靠近零,这样就就导致权重稀疏。

如果是L2正则 w(新的)=w(老的)-(损失函数求导部分+(λ w(老的)))=(1-λ)w(老的)-损失函数求导部分。这样就相当于一直让w变小(无论正负),但是方向不是不会趋于零。

4dropout

随机失活就是让神经网络当中隐藏层的神经单元随机的不被激活,这样的理由是对于神经网络来说我们也是更倾向于每个神经元都是同等重要的,但是在训练的过程中会导致某些神经元上的权重极大,随机失活就会告诉神经网络不要集中于网络中的某几个主要节点,应该面面俱到,这样的本质也是和正则化一样的。如果将权重集中在某些特征当中容易造成过拟合,如果数据的分布情况变了就会导致模型整体的预测能力下降。

5 决策树剪枝

决策树损失函数里加入叶子节点的个数和树的颗数

从底层开始对于每一个中间节点计算剪枝钱的损失函数和剪枝后的损失函数。如果剪枝后的损失小于剪枝前的损失那么就把两个叶子节点上的样本样本合并赋予给这个中间节点,如果是回归树就用所有样本的均值,如果是分类树就采用投票多数的样本作为该叶子节点的预测值。

在这里我们首先需要明白 结构风险最小化 原理:

我们所谓的正则化,就是在原来 Loss Function 的基础上,加了一些正则化项,或者叫做模型复杂度惩罚项。以我们的线性回归为例子。

优化目标(损失函数):

加上L1正则项(lasso回归):

加上L2正则项(Ridge回归):

下面我们需要理解加了正则化项之后,对于目标函数求解的时候,最终解有什么变化。

我们从图像角度来理解:

假设X是一个二维样本,那么要求解的参数也 也是二维的。下图叫做原函数曲线等高线图。目标函数在图中的等高线(同颜色)每一组 , ​ 带入值都想同,这里代表着多组解。

下面看L1和L2正则项加入后的函数图像:

对比两幅图我们可以看出来:

下面看这几步:

L2正则化(岭回归)的证明类似。不过结论是L1正则化比L2正则化更加容易获得稀疏解。

我们总结一下,正则化之所以能够降低的原因在于,正则化是结构风险最小化的一种策略实现。

给 loss function 加上正则项,新得到的目标函数 h = f+normal,需要在 f 和 normal 中做一个 trade-off。如果还是像原来只优化 f,那么normal就比较大, h 就不能得到最优解。因此可以看出加正则项可以让解更加简单,符合奥卡姆剃刀理论;同时也符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合。

看一下L1正则化和L2正则化的区别:

L1正则化就是在 loss function 后面加上L1范数,这样比较容易求到稀疏解。L2 正则化是在 LF 后面加 L2范数 平方,相比L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(不等0)的维度比较多,降低模型的复杂度。

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

原文地址: http://outofmemory.cn/langs/12188183.html

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

发表评论

登录后才能评论

评论列表(0条)

保存