导航:首页 > 源码编译 > 优化算法正则化

优化算法正则化

发布时间:2022-09-23 05:48:20

‘壹’ 正则化的通俗解释

正则化:

1. 正则化的目的:防止过拟合!

2. 正则化的本质:约束(限制)要优化的参数。

关于第1点,过拟合指的是给定一堆数据,这堆数据带有噪声,利用模型去拟合这堆数据,可能会把噪声数据也给拟合了,这点很致命,一方面会造成模型比较复杂(想想看,本来一次函数能够拟合的数据,现在由于数据带有噪声,导致要用五次函数来拟合,多复杂!),另一方面,模型的泛化性能太差了(本来是一次函数生成的数据,结果由于噪声的干扰,得到的模型是五次的),遇到了新的数据让你测试,你所得到的过拟合的模型,正确率是很差的。

关于第2点,本来解空间是全部区域,但通过正则化添加了一些约束,使得解空间变小了,甚至在个别正则化方式下,解变得稀疏了。这一点不得不提到一个图,相信我们都经常看到这个图,但貌似还没有一个特别清晰的解释,这里我尝试解释一下,图如下:



这里的w1,w2都是模型的参数,要优化的目标参数,那个红色边框包含的区域,其实就是解空间,正如上面所说,这个时候,解空间“缩小了”,你只能在这个缩小了的空间中,寻找使得目标函数最小的w1,w2。左边图的解空间是圆的,是由于采用了L2范数正则化项的缘故,右边的是个四边形,是由于采用了L1范数作为正则化项的缘故,大家可以在纸上画画,L2构成的区域一定是个圆,L1构成的区域一定是个四边形。

再看看那蓝色的圆圈,再次提醒大家,这个坐标轴和特征(数据)没关系,它完全是参数的坐标系,每一个圆圈上,可以取无数个w1,w2,这些w1,w2有个共同的特点,用它们计算的目标函数值是相等的!那个蓝色的圆心,就是实际最优参数,但是由于我们对解空间做了限制,所以最优解只能在“缩小的”解空间中产生。

蓝色的圈圈一圈又一圈,代表着参数w1,w2在不停的变化,并且是在解空间中进行变化(这点注意,图上面没有画出来,估计画出来就不好看了),直到脱离了解空间,也就得到了图上面的那个w*,这便是目标函数的最优参数。

对比一下左右两幅图的w*,我们明显可以发现,右图的w*的w1分量是0,有没有感受到一丝丝凉意?稀疏解诞生了!是的,这就是我们想要的稀疏解,我们想要的简单模型。

还记得模式识别中的剃刀原理不?倾向于简单的模型来处理问题,避免采用复杂的。【剃刀原理:剃刀是一种经验法则,用于允许排除(刮掉)不可能的解释或者情况。另提一句,剃刀是一种有效的思维方式,但事实上并不是严格意义上的“定理”。】

这里必须要强调的是,这两幅图只是一个例子而已,没有说采用L1范数就一定能够得到稀疏解,完全有可能蓝色的圈圈和四边形(右图)的一边相交,得到的就不是稀疏解了,这要看蓝色圈圈的圆心在哪里。

此外,正则化其实和“带约束的目标函数”是等价的,二者可以互相转换。关于这一点,

通过熟悉的拉格朗日乘子法(注意这个方法的名字),



看到没,这两个等价公式说明了,正则化的本质就是,给优化参数一定约束,所以,正则化与加限制约束,只是变换了一个样子而已。

此外,我们注意,正则化因子,也就是里面的那个lamda,如果它变大了,说明目标函数的作用变小了,正则化项的作用变大了,对参数的限制能力加强了,这会使得参数的变化不那么剧烈(仅对如上数学模型),直接的好处就是避免模型过拟合。反之,自己想想看吧。。。

个人感觉,“正则化”这几个字叫的实在是太抽象了,会吓唬到人,其实真没啥。如果改成“限制化”或者是“约束化”,岂不是更好?

‘贰’ 正则化的方法

求解不适定问题的普遍方法是:用一组与原不适定问题相“邻近”的适定问题的解去逼近原问题的解,这种方法称为正则化方法。如何建立有效的正则化方法是反问题领域中不适定问题研究的重要内容。通常的正则化方法有基于变分原理的Tikhonov 正则化、各种迭代方法以及其它的一些改进方法,这些方法都是求解不适定问题的有效方法,在各类反问题的研究中被广泛采用,并得到深入研究。
正则化:Regularization,代数几何中的一个概念。 就是给平面不可约代数曲线以某种形式的全纯参数表示。
即对于PC^2中的不可约代数曲线C,寻找一个紧Riemann面C*和一个全纯映射σ:C*→PC^2,使得σ(C*)=C 设C是不可约平面代数曲线,S是C的奇点的集合。如果存在紧Riemann面C*及全纯映射σ:C*→PC^2,使得
(1) σ(C*)=C (2) σ^(-1)(S)是有限点集 (3) σ:C*σ^(-1)(S)→CS是一对一的映射
则称(C*,σ)为C的正则化。不至于混淆的时候,也可以称C*为C的正则化。
正则化的做法,实际上是在不可约平面代数曲线的奇点处,把具有不同切线的曲线分支分开,从而消除这种奇异性。 正则化就是对最小化经验误差函数上加约束,这样的约束可以解释为先验知识(正则化参数等价于对参数引入先验分布)。约束有引导作用,在优化误差函数的时候倾向于选择满足约束的梯度减少的方向,使最终的解倾向于符合先验知识(如一般的l-norm先验,表示原问题更可能是比较简单的,这样的优化倾向于产生参数值量级小的解,一般对应于稀疏参数的平滑解)。 同时,正则化解决了逆问题的不适定性,产生的解是存在,唯一同时也依赖于数据的,噪声对不适定的影响就弱,解就不会过拟合,而且如果先验(正则化)合适,则解就倾向于是符合真解(更不会过拟合了),即使训练集中彼此间不相关的样本数很少。

‘叁’ 优化算法是什么呢

优化算法是指对算法的有关性能进行优化,如时间复杂度、空间复杂度、正确性、健壮性。

大数据时代到来,算法要处理数据的数量级也越来越大以及处理问题的场景千变万化。为了增强算法的处理问题的能力,对算法进行优化是必不可少的。算法优化一般是对算法结构和收敛性进行优化。

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。

遗传算法

遗传算法也是受自然科学的启发。这类算法的运行过程是先随机生成一组解,称之为种群。在优化过程中的每一步,算法会计算整个种群的成本函数,从而得到一个有关题解的排序,在对题解排序之后,一个新的种群----称之为下一代就被创建出来了。首先,我们将当前种群中位于最顶端的题解加入其所在的新种群中,称之为精英选拔法。新种群中的余下部分是由修改最优解后形成的全新解组成。

常用的有两种修改题解的方法。其中一种称为变异,其做法是对一个既有解进行微小的、简单的、随机的改变;修改题解的另一种方法称为交叉或配对,这种方法是选取最优解种的两个解,然后将它们按某种方式进行组合。尔后,这一过程会一直重复进行,直到达到指定的迭代次数,或者连续经过数代后题解都没有改善时停止。

‘肆’ LightGBM(lgb)介绍

GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界应用广泛,通常被用于多分类、点击率预测、搜索排序等任务;在各种数据挖掘竞赛中也是致命武器,据统计Kaggle上的比赛有一半以上的冠军方案都是基于GBDT。而LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点。

1.1 LightGBM提出的动机

常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。

LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

1.2 XGBoost的缺点及LightGBM的优化

(1)XGBoost的缺点

在LightGBM提出之前,最有名的GBDT工具就是XGBoost了,它是基于预排序方法的决策树算法。这种构建决策树的算法基本思想是:

这样的预排序算法的优点是能精确地找到分割点。但是缺点也很明显:

首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如,为了后续快速的计算分割点,保存了排序后的索引),这就需要消耗训练数据两倍的内存。

其次,时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。

最后,对cache优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。

(2)LightGBM的优化

为了避免上述XGBoost的缺陷,并且能够在不损害准确率的条件下加快GBDT模型的训练速度,lightGBM在传统的GBDT算法上进行了如下优化:

下面我们就详细介绍以上提到的lightGBM优化算法。

2.1 基于Histogram的决策树算法

(1)直方图算法

Histogram algorithm应该翻译为直方图算法,直方图算法的基本思想是:先把连续的浮点特征值离散化成 个整数,同时构造一个宽度为 的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

直方图算法简单理解为:首先确定对于每一个特征需要多少个箱子(bin)并为每一个箱子分配一个整数;然后将浮点数的范围均分成若干区间,区间个数与箱子个数相等,将属于该箱子的样本数据更新为箱子的值;最后用直方图(#bins)表示。看起来很高大上,其实就是直方图统计,将大规模的数据放在了直方图中。

我们知道特征离散化具有很多优点,如存储方便、运算更快、鲁棒性强、模型更加稳定等。对于直方图算法来说最直接的有以下两个优点:

当然,Histogram算法并不是完美的。由于特征被离散化后,找到的并不是很精确的分割点,所以会对结果产生影响。但在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点。原因是决策树本来就是弱模型,分割点是不是精确并不是太重要;较粗的分割点也有正则化的效果,可以有效地防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下没有太大的影响。

(2)直方图做差加速

LightGBM另一个优化是Histogram(直方图)做差加速。一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,在速度上可以提升一倍。通常构造直方图时,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。在实际构建树的过程中,LightGBM还可以先计算直方图小的叶子节点,然后利用直方图做差来获得直方图大的叶子节点,这样就可以用非常微小的代价得到它兄弟叶子的直方图。

注意:XGBoost 在进行预排序时只考虑非零值进行加速,而 LightGBM 也采用类似策略:只用非零特征构建直方图。

2.2 带深度限制的 Leaf-wise 算法

在Histogram算法之上,LightGBM进行进一步的优化。首先它抛弃了大多数GBDT工具使用的按层生长 (level-wise) 的决策树生长策略,而使用了带有深度限制的按叶子生长 (leaf-wise) 算法。

XGBoost 采用 Level-wise 的增长策略,该策略遍历一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,实际上很多叶子的分裂增益较低,没必要进行搜索和分裂,因此带来了很多没必要的计算开销。

LightGBM采用Leaf-wise的增长策略,该策略每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;Leaf-wise的缺点是:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

Gradient-based One-Side Sampling 应该被翻译为单边梯度采样(GOSS)。GOSS算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。

AdaBoost中,样本权重是数据重要性的指标。然而在GBDT中没有原始样本权重,不能应用权重采样。幸运的是,我们观察到GBDT中每个数据都有不同的梯度值,对采样十分有用。即梯度小的样本,训练误差也比较小,说明数据已经被模型学习得很好了,直接想法就是丢掉这部分梯度小的数据。然而这样做会改变数据的分布,将会影响训练模型的精确度,为了避免此问题,提出了GOSS算法。

GOSS是一个样本的采样算法,目的是丢弃一些对计算信息增益没有帮助的样本留下有帮助的。根 据计算信息增益的定义,梯度大的样本对信息增益有更大的影响。因此,GOSS在进行数据采样的 时候只保留了梯度较大的数据,但是如果直接将所有梯度较小的数据都丢弃掉势必会影响数据的总 体分布。所以,GOSS首先将要进行分裂的特征的所有取值按照绝对值大小降序排序(XGBoost一 样也进行了排序,但是LightGBM不用保存排序后的结果),选取绝对值最大的 个数 据。然后在剩下的较小梯度数据中随机选择 个数据。接着将这 个数据乘 以一个常数 这样算法就会更关注训练不足的样本, 而不会过多改变原数据集的分布。最 后使用这 个数据来计算信息增益。下图是GOSS的具体算法。

2.4 互斥特征捆绑算法

高维度的数据往往是稀疏的,这种稀疏性启发我们设计一种无损的方法来减少特征的维度。通常被 抹绑的特征都是互斥的(即特征不会同时为非零值,像one-hot),这样两个特征描绑起来才不会 丢失信息。如果两个特征并不是完全互斥 (部分情况下两个特征都是非零值),可以用一个指标对 特征不互斥程度进行像量,称之为冲突比率,当这个值较小时,我们可以选择把不完全互斥的两个 特征肺绑,而不影响最后的精度。

互斥特征肺绑算法 (Exclusive Feature Bundling, EFB) 指出如 果将一些特征进行融合绑定,则可以降低特征数量。这样在构建直方图时的时间复杂度从O(#data* # feature)变为 O(#data* # bundle), 这里 bundle 指特征融合绑 定后特征包的个数, 且 #bundle 远小于 # feature 。

我们将论文《Lightgbm: A highly efficient gradient boosting decision tree》中没有提到的优化方案,而在其相关论文《A communication-efficient parallel algorithm for decision tree》中提到的优化方案,放到本节作为LightGBM的工程优化来向大家介绍。

3.1 直接支持类别特征

实际上大多数机器学习工具都无法直接支持类别特征,一般需要把类别特征,通过 one-hot 编码,转化到多维的0/1特征,降低了空间和时间的效率。但我们知道对于决策树来说并不推荐使用 one-hot 编码,尤其当类别特征中类别个数很多的情况下,会存在以下问题:

1,会产生样本切分不平衡问题,导致切分增益非常小(即浪费了这个特征)。使用 one-hot编码,意味着在每一个决策节点上只能使用one vs rest(例如是不是狗,是不是猫等)的切分方式。

例如,动物类别切分后,会产生是否狗,是否猫等一系列特征,这一系列特征上只有少量样本为 1,大量样本为 0,这时候切分样本会产生不平衡,这意味着切分增益也会很小。较小的那个切分样本集,它占总样本的比例太小,无论增益多大,乘以该比例之后几乎可以忽略;较大的那个拆分样本集,它几乎就是原始的样本集,增益几乎为零。比较直观的理解就是不平衡的切分和不切分没有区别。

2,会影响决策树的学习。因为就算可以对这个类别特征进行切分,独热编码也会把数据切分到很多零散的小空间上,如下图左边所示。而决策树学习时利用的是统计信息,在这些数据量小的空间上,统计信息不准确,学习效果会变差。但如果使用下图右边的切分方法,数据会被切分到两个比较大的空间,进一步的学习也会更好。下图右边叶子节点的含义是X=A或者X=C放到左孩子,其余放到右孩子。

算法流程如下图所示,在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序; 然后按照排序的结果依次枚举最优分割点。从下图可以看到, 为类别的均值。当然,这个方法很容易过拟合,所以LightGBM里面还增加了很多对于这个方法的约束和正则化。

在Expo数据集上的实验结果表明,相比0/1展开的方法,使用LightGBM支持的类别特征可以使训练速度加速8倍,并且精度一致。更重要的是,LightGBM是第一个直接支持类别特征的GBDT工具。

3.2 支持高效并行

(1)特征并行

特征并行的主要思想是不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。XGBoost使用的就是这种特征并行方法。这种特征并行方法有个很大的缺点:就是对数据进行垂直划分,每台机器所含数据不同,然后使用不同机器找到不同特征的最优分裂点,划分结果需要通过通信告知每台机器,增加了额外的复杂度。

LightGBM 则不进行数据垂直划分,而是在每台机器上保存全部训练数据,在得到最佳划分方案后可在本地执行划分而减少了不必要的通信。具体过程如下图所示。

(2)数据并行

传统的数据并行策略主要为水平划分数据,让不同的机器先在本地构造直方图,然后进行全局的合 并,最后在合并的直方图上面寻找最优分割点。这种数据划分有一个很大的缺点:通讯开销过大。 如果使用点对点通信,一台机器的通讯开销大约为 O(#machine* # feature*#bin) 如果使用集成的通信,则通讯开销为

LightGBM在数据并行中使用分散规约 (Rece scatter) 把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。具体过程如下图所示。

(3)投票并行

基于投票的数据并行则进一步优化数据并行中的通信代价,使通信代价变成常数级别。在数据量很大的时候,使用投票并行的方式只合并部分特征的直方图从而达到降低通信量的目的,可以得到非常好的加速效果。具体过程如下图所示。

大致步骤为两步:

XGBoost对cache优化不友好,如下图所示。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。为了解决缓存命中率低的问题,XGBoost 提出了缓存访问算法进行改进。

而 LightGBM 所使用直方图算法对 Cache 天生友好:

4.1 优点
这部分主要总结下 LightGBM 相对于 XGBoost 的优点,从内存和速度两方面进行介绍。

(1)速度更快

(2)内存更小

4.2 缺点

训练配置
6307410个样本做训练集

训练出的LightGBM模型文件及其含义解析:

第1棵树

树的结构

第二棵树,含义参考第一棵树

特征重要性

重要性值是统计特征在所有树中作为中间节点(分裂节点)的分裂特征且分裂增益为正的次数,可以理解成是对分裂作用越大的特征越重要

参考自:
Microstrong
鱼达尔

‘伍’ AI面试题第二弹(神经网络基础)

提取主要特征,减小网络参数量,减小计算量

层层传递的梯度>1 梯度爆炸

层层传递的梯度<1 梯度消失

与权重有很大关系,激活函数的影响较小。

每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。

这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

比较常见的是l1l1l1正则,和l2l2l2正则,在各个深度框架中都有相应的API可以使用正则化

反向传播中,经过每一层的梯度会乘以该层的权重。

举个简单例子:

为了得到一致假设而使假设变得过度复杂称为过拟合(overfitting), 过拟合表现在训练好的模型在训练集上效果很好,但是在测试集上效果差 。也就是说模型的泛化能力弱。

过拟合主要由两个原因造成,数据集太小或模型太复杂

(1). 数据集扩增(Data Augmentation)

(2). 改进模型

·Early Stopping。在模型效果比较好的时候便提前停止训练

 ·正则化(regularization)

L1:稀疏参数

L2:更小参数

·Dropout

·多任务学习

深度学习中两种多任务学习模式:隐层参数的硬共享和软共享

硬共享机制是指在所有任务中共享隐藏层,同时保留几个特定任务的输出层来实现。硬共享机制降低了过拟合的风险。多个任务同时学习,模型就越能捕捉到多个任务的同一表示,从而导致模型在原始任务上的过拟合风险越小。

软共享机制是指每个任务有自己的模型,自己的参数。模型参数之间的距离是正则化的,以便保障参数相似性。

见后文

leaky relu

输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成如下:

(1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图中虚线为部分临时被删除的神经元)

(2) 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。

(3)然后继续重复这一过程:

恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)

从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。

对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。

不断重复这一过程。

没有对数据进行归一化

忘记检查输入和输出

没有对数据进行预处理

没有对数据正则化

使用过大的样本

使用不正确的学习率

在输出层使用错误的激活函数

网络中包含坏梯度

初始化权重错误

过深的网络

隐藏单元数量错误

网络设计不合理(任务-网络不匹配)

机器学习有个很重要的假设:就是假设训练数据和测试数据是满足独立同分布的,这保障了通过训练数据获得的优秀模型也能够在测试集获得好的效果。但是在机器学习训练中输入层的每个批量(X,Y)中X的分布是不一致的,并且神经网络的隐藏层的输入分布在每次训练迭代中发生变化。 BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

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

但是接下来的问题是:如果都通过BN,那么不就跟把非线性函数替换成线性函数效果相同了,意味着网络的非线性表达能力下降了, 所以BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift), 每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者右移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于激活前的值经过标准正太分布归一化后再从正中心周围的线性区往非线性区动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢

Batch Normalization 好处:(1)提高了训练速度,收敛速度也大大加快(2)另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等 (3)可以防止梯度消失(4)BN类似于Dropout的一种防止过拟合的正则化表达方式,可以有效防止过拟合,不用太依赖dropou和正则化

以下情况最好不要使用BN:(1)数据不平衡(2)batch_size太小

batch_size是机器学习中的一个重要参数,决定了梯度下降的方向,如果数据集比较小,完全可以采用全数据集的形式计算梯度,由全数据集确定的梯度方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。对于大型数据集则需要使用mini-batch_size,因为随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。

当batch_size=1,即在线学习,模型难以达到收敛 。

合理增加batch_size好处 :

(1)内存利用率提高了,大矩阵乘法的并行化效率提高

(2)跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。

(3)在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小

盲目增大 Batch_Size 坏处 :

(1)内存利用率提高了,但是内存容量可能撑不住了

(2)跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同精度所需要的 epoch 数量越来越多,花费的时间越长

(3)大的batchsize收敛到sharp minimum,而小的batchsize收敛到flat minimum,后者具有更好的泛化能力。

总之batchsize在变得很大(超过一个临界点)时,会降低模型的泛化能力。在这个临界点之下,模型的性能变换随batch size通常没有学习率敏感

    目标所在的真实框(ground truth) 与算法预测的目标所在的框(bounding box)的交集与并集的比值,我们会用IOU阈值来判定预测的bounding box是否有效。一般阈值会设定在0.5,当IOU的值大于等于0.5时,我们会把这个预测的bounding box 归为正类,而小于0.5的归为负类。

牛顿法使用的是目标函数的二阶导数,在高维情况下这个Hessian(n*n维度)矩阵非常大,计算复杂度是n*n,计算和存储都是问题

(1) 通过控制卷积核个数实现升维或者降维,从而减少模型参数和计算量

(2) 用于不同channel上特征的融合

(3)1x1的卷积相当于全连接层的计算过程,并且加入了非线性激活函数,从而增加了网络的非线性,使得网络可以表达更加复杂的特征。

它能够把输入的连续实值变换为0和1之间的输出,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1

缺点:

(1)函数的饱和区,导致梯度几乎为0,造成梯度消失问题

(2)Sigmoid 的 output 不是0均值,具体解释见 https://blog.csdn.net/tyhj_sf/article/details/79932893

(3)其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

它解决了Sigmoid函数的不是零均值输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

(1)在正区间解决了梯度消失的问题

(2)函数简单,计算速度快,收敛速度远快于sigmoid和tanh

缺点:

(1)Relu函数输出不是0均值

(2)神经元坏死问题:指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新,有两个主要原因导致这种状况发生

        (1) 非常不幸的参数初始化,这种情况比较少见 

        (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法

为了解决ReLU函数带来的神经元坏死问题 , 提出了将ReLU的前半段设为αx,α通常设为0.01,,另外一种直观的想法是基于参数的方法PReLU函数, α可由方向传播算法学习出来。

ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:(1)不会有神经元坏死现象(2)函数输出均值接近于0

但是ELU的小问题就是计算量稍微有点大。

1、使用不同的激活函数,比如Relu,Leak-Relu,PRelu,elu等激活函数代替sigmoid函数

2、使用Batch Normalizaion(批量归一化)

3、使用残差网络

4、预训练加微调

1、梯度裁剪

2、权重正则化

两个3x3的卷积核的感受野比5x5的卷积核的感受野大,在保持相同感受野的同时,用3x3的卷积核可以提升网络的深度,可以很明显的减少计算量。

1、局部连接

2、权值共享:减小参数量

3、池化操作:增大感受野

4、多层次结构:可以提取low-level以及high-level的信息

1、数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。

2、数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果。

作用 :对输入的特征图进行压缩

一方面使特征图变小,简化网络计算复杂度;

一方面进行特征压缩,提取主要特征。

通常来讲,max-pooling的效果更好,虽然max-pooling和average-pooling都对数据做了下采样,但是 max-pooling感觉更像是做了特征选择,选出了分类辨识度更好的特征,提供了非线性 。 pooling的主要作用一方面是去掉冗余信息,一方面要保留feature map的特征信息,在分类问题中,我们需要知道的是这张图像有什么object,而不大关心这个object位置在哪,在这种情况下显然max pooling比average pooling更合适。在 网络比较深的地方,特征已经稀疏了,从一块区域里选出最大的,比起这片区域的平均值来,更能把稀疏的特征传递下去 。

average-pooling更强调对整体特征信息进行一层下采样,在减少参数维度的贡献上更大一点,更多的体现在 信息的完整传递这个维度 上,在一个很大很有代表性的模型中,比如说DenseNet中的模块之间的连接大多采用average-pooling,在减少维度的同时,更有利信息传递到下一个模块进行特征提取。

average-pooling在 全局平均池化操作 中应用也比较广,在ResNet和Inception结构中最后一层都使用了平均池化。有的时候在模型接近 分类器的末端使用全局平均池化还可以代替Flatten操作 ,使输入数据变成一位向量。

CNN网络中另外一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化(步长也为2),假设那么第l+1层的feature map有16个梯度,那么第l层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的

mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把 某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变 ,图示如下 :

(2) max pooling

max pooling也要满足梯度之和不变的原则 ,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么 反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。 所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示 :

28、细粒度分类

29、LSTM&RNN

30、解释LSTM结构(相对于RNN)的好处

31、RNN的梯度消失原因和解决办法

32、Object Detection

33、Unet的介绍

34、FCN和Unet的区别

35、RCNN系列的算法流程和区别

36、Fast RCNN中 bbox 回归的损失函数什么

37、解释 ROI Pooling 和 ROI Align

38、Mask RCNN中 mask branch 如何接入 Faster RCNN中

39、解释 FPN

40、解释 ROI Align

41、简述 YOLO 和 SSD

42、简述 Hough 直线检测、Sobel 边缘检测算法流程

43、Mask RCNN中的anchors如何判定为正负样本

44、简述 NMS 算法流程

45、attention起源是用在哪里?pixel还是frame,是soft还是hard

46、anchor的正负样本比是多少

47、算法和激活函数等

48、BN的原理和作用

49、BN层反向传播,怎么求导

50、BN 的作用和缺陷,以及针对batch_size小的情况的改进(GN)

51、BN层,先加BN还是激活,有什么区别

52、手推BP

53、优化算法举例和他们的区别(SGD、SGDM、RMSprop、Adam)

54、随机梯度下降和梯度下降

55、训练不收敛的原因有哪些

56、简述 SVM 流程、核函数寻参及常见的核函数举例

57、batch_size 和 learning rate 的关系(怎么平衡和调整二者)

58、解释过拟合和欠拟合,以及解决方法

59、激活函数有哪些,各自区别

60、损失函数有哪些

61、Sigmoid 和 ReLu 对比(各自优缺点)

62、为什么不用sigmoid而用relu?做出了哪些改进?

63、梯度消失和梯度爆炸的原因和解决方法

64、Precision 和 Recall 的定义

65、精确率高、召回率低是为什么

66、SVM,线性回归和逻辑回归的原理及区别

67、PCA原理,PCA和SVD的区别和联系

68、正则化怎么选择,有哪些方式

69、L1、L2范数,区别

70、boost、Adaboost

71、dropout和batch normalization

72、讲一下决策树和随机森林

73、讲一下GBDT的细节,写出GBDT的目标函数。 GBDT和Adaboost的区别与联系

74、偏差、方差

75、距离度量公式哪些,区别

76、多标签识别怎么做

77、data argumentation怎么处理的

78、数据不均衡怎么处理、只有少量带标签怎么处理

79、权重初始化方法都有哪些

80、权值衰减这个参数怎么设置

81、分类问题有哪些评价指标?每种的适用场景。

82、无监督学习了解哪些

83、图像处理Opencv

84、边缘检测算子有哪些

85、霍夫变换

86、直方图是什么

87、canny算子是怎么做的

88、图像的特征提取有哪些算法,适用范围、优缺点

参考:

https://blog.csdn.net/bluesliuf/article/details/89389117

https://zhuanlan.hu.com/p/107279000

https://zhuanlan.hu.com/p/56475281

‘陆’ 想知道优化算法是什么

优化算法是通过改善计算方式来最小化或最大化损失函数E(x)。模型内部有些参数是用来计算测试集中目标值Y的真实值和预测值的偏差程度的,基于这些参数就形成了损失函数E(x),比如说,权重(W)和偏差(b)就是这样的内部参数,一般用于计算输出值,在训练神经网络模型时起到主要作用。

优化算法分的分类

一阶优化算法是使用各参数的梯度值来最小化或最大化损失函数E(x),最常用的一阶优化算法是梯度下降。函数梯度导数dy/dx的多变量表达式,用来表示y相对于x的瞬时变化率。

二阶优化算法是使用了二阶导数也叫做Hessian方法来最小化或最大化损失函数,由于二阶导数的计算成本很高,所以这种方法并没有广泛使用。

‘柒’ Xgboost原理分析

从陈天奇的PPT中进行总结,重点了解模型的构建,策略的选择和优化算法的选取。

机器学习的目标函数基本都是:

也就是 损失函数和正则化项的组合。

在目标函数,偏差和方差之间 做trade-off

也称分类回归树

上图可以看出来,每个叶子结点都有一个分数,那么被分到该结点的数据获得这个分数。

我们通过将多个这样的回归树集成起来,获得我们的集成算法。

上图可以看出来,对于小男孩的总体分数,就是两棵树的加和结果。

集成树的特点有:

模型假设我们有K棵树(上面提到的回归树):

F就是我们的假设空间(函数空间,包含k个回归树)

这个模型中的参数包括:

定义目标函数,然后去优化这个目标函数

上图中,是以时间为变量,来构建回归树,评价个人随着时间t是否喜欢浪漫音乐。

将一个回归树等价到一个分段函数中,那么我们从中需要学习的“参数”也就是我们的:

上面四幅图中,给出了不同划分位置和划分高度,最后的参数模型也就是图四的效果。

那么从一棵树开始,我们可以来定义我们模型的目标函数。

我们有K棵树

目标函数是:

第一项是我们的损失函数项,第二项是我们的正则化项。

当我们讨论决策树的时候,都是启发式的从一些方面进行考虑:

我们使用决策树算法时候,就是通过信息增益来划分分支,那么这里我们可以用每一次划分的信息增益当做我们的损失函数。(划分后的信息增益-划分前的信息增益)

决策树中的剪枝,就是为了控制决策树的模型复杂度,这里我们也通过控制叶子节点的个数,来实现正则化,控制模型的复杂度。

限制树的深度,也是一定程度上限制我们的模型复杂度。

尽可能的让我们的叶子上的score平滑,使用L2正则化来控制叶子结点上的权重。

目标函数是:

那我们是如何学习这个目标函数的呢?

我们不能使用梯度下降算法来进行计算损失函数,因为我们这里的参数是回归树,而不是一些数值型数据(类比线性模型里面的参数 w)

从常数开始,然后每次加入一棵新树(一个新的函数)

其中,我们的 是第t轮的训练模型, 是t轮前我们的训练结果, 是新加入的函数(新加入的一棵树)

那么我们怎么样决定一个新加入的树(函数 ),这个函数就是我们上面提到的我们的参数,即如何选择一个参数来优化我们的模型,当然从优化目标函数中找。

上述目标函数还是很复杂,于是作者引入了泰勒展开式来替换损失函数。

类比泰勒展开式的

在我们的目标函数中损失函数 相当于函数

所以我们可以得到我们的目标函数带入泰勒展开之后的结果是:

这里面 是我们前t-1轮的对 预测和 的目标的损失,这是一个常数项。因为我们优化的是第t轮,研究怎么选择第t轮需要加进去的树,所以前面的 我们都可以看作是一个常量。

给目标函数对权重求偏导,得到一个能够使目标函数最小的权重,把这个权重代回到目标函数中,这个回代结果就是 求解后的最小目标函数值

是一个叶子结点上的 每一个样本的梯度值,同理理解

从我们的损失函数 ,说起,看我们如何定义这个 ,不如这里我们以简单的 为例子:

针对我们的平方差损失函数来说, 就是如下式子:

其中 项也就是我们常说的残差项。

从例子中理解各个参数的含义,

比如叶子结点1代表的权重(分数)是+2,叶子结点2对应的是+0.1,叶子结点3对应是-1

然后看我们的正则化项,其中T代表叶子结点的数目, 从上面的例子可以很容易的计算得到我们的正则化结果。

我们定义: 就是第i个数据属于第j个叶子结点。

然后我们将属于同一个叶子结点的数据放入一个group里面得到

也就是将从各个样本上的遍历,映射到了对叶子结点的遍历(叶子结点里可能包含多个样本)

重新定义G 和H ,也将其从单个样本上的遍历,映射到对叶子结点的遍历。

其中的 是来评价一棵树的结构是否很好,分数越小,结构越好。

但是仍然有无数颗树可以进行选择,那么我们如何选择才能保证最优化呢?

从常数0开始,我们选择一个树加入,每一次尝试去对已有的叶子加入一个分割。

然后我们来计算分割后的结构分数(左子树+右子树)与我们不进行分割的结构分数进行做差,同时还要减去因为分割引入的结构复杂度。

也可以很好的处理非数值型特征,并且不需要将类别特征(离散的)和数值型特征(连续的)分开进行处理。

我们可以通过one-hot编码将离散的特征类别映射到数值型。

如果类别特别多,向量会非常稀疏,但是这个算法也很擅长处理稀疏的数据。

设置最大树深度,然后递归的去剪裁 所有叶子节点出现负的Gain的分裂情况

更细节的问题是,我们不会每个树做到最优化,这样容易过拟合,我们赋予一个参数,来控制每次的优化(不让优化效果太好),这样留下更多的优化空间给后边的树。

分类回归树的集成算法可以用来做回归,分类,ranking等等,这取决于我们的损失函数如何定义。

(1)objective [ default=reg:linear ] 定义学习任务及相应的学习目标,可选的目标函数如下:

(2)’eval_metric’ The choices are listed below,评估指标:

(3)lambda [default=0] L2 正则的惩罚系数

(4)alpha [default=0] L1 正则的惩罚系数

(5)lambda_bias 在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)

(6)eta [default=0.3]
为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3
取值范围为:[0,1]

(7)max_depth [default=6] 数的最大深度。缺省值为6 ,取值范围为:[1,∞]

(8)min_child_weight [default=1]
孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该参数越大算法越保守。
取值范围为: [0,∞]

‘捌’ L0,L1,L2范数及其应用

原文作者链接

L0,L1,L2范数及其应用

在线性代数,函数分析等数学分支中,范数(Norm)是一个函数,其赋予某个向量空间(或矩阵)中的每个向量以长度或大小。对于零向量,另其长度为零。直观的说,向量或矩阵的范数越大,则我们可以说这个向量或矩阵也就越大。有时范数有很多更为常见的叫法,如绝对值其实便是一维向量空间中实数或复数的范数,而Euclidean距离也是一种范数。

范数的一般化定义:设p≥1p≥1的实数,p-norm定义为:

此处,当p=1时,我们称之为taxicab Norm,也叫Manhattan Norm。其来源是曼哈顿的出租车司机在四四方方的曼哈顿街道中从一点到另一点所需要走过的距离。也即我们所要讨论的l1范数。其表示某个向量中所有元素绝对值的和。 

而当p=2时,则是我们最为常见的Euclidean norm。也称为Euclidean distance。也即我们要讨论的l2范数。 

而当p=0时,因其不再满足三角不等性,严格的说此时p已不算是范数了,但很多人仍然称之为l0范数。 这三个范数有很多非常有意思的特征,尤其是在机器学习中的正则化(Regularization)以及稀疏编码(Sparse Coding)有非常有趣的应用。

下图给出了一个Lp球的形状随着P的减少的可视化图。

1- L0 范数

虽然L0严格说不属于范数,我们可以采用等式 1 1来给出l0-norm得定义:

上面的公式仍然让人不是很明白,0的指数和平方根严格意义上是受限条件下才成立的。因此在实际应用中,多数人给出下面的替代定义:

其表示向量中所有非零元素的个数。正是L0范数的这个属性,使得其非常适合机器学习中 稀疏编码 ,特征选择的应用。通过最小化L0范数,来寻找最少最优的稀疏特征项。但不幸的是,L0范数的最小化问题在实际应用中是NP难问题。因此很多情况下,L0优化问题就会被relaxe为更高维度的范数问题,如L1范数,L2范数最小化问题。

2- L1 范数

对于向量X,其L1范数的定义如下:

其应用范围非常的广泛。如在计算机视觉中的 Sum of Absolute Differents , Mean Absolute Error ,都是利用L1范式的定义。

L1最优化问题的解是稀疏性的 , 其倾向于选择很少的一些非常大的值和很多的insignificant的小值。而L2最优化则更多的非常少的特别大的值,却又很多相对小的值,但其仍然对 最优化解有significant的贡献。 但从最优化问题解的平滑性来看,L1范数的最优解相对于L2范数要少,但其往往是最优解,而L2的解很多,但更多的倾向于某种局部最优解。

但由于L1范数并没有平滑的函数表示,起初L1最优化问题解决起来非常困难,但随着计算机技术的到来,利用很多凸优化算法使得L1最优化成为可能。

3- L2 范数

当然范数中最常见,也最着名的非L2范数莫属。其应用也几乎包括科学和工程的各个领域。定义公式如下:

也Euclidean Norm,如果用于计算两个向量之间的不同,即是Euclidean Distance.

欧几里德范数的最优化问题可以用如下公式表述:

借助拉格朗日乘子,我们便可以解决该最优化问题。由L2衍生,我们还可以定义无限norm,即l-infinity norm:

无穷范数

一眼看上去上面的公式还是有点tricky的。我们通过一个简单的数学变换,假设X_j是向量中最大的元素,则根据无限大的特性,我们可以得到:

则根据公式无穷范数的定义,我们可以得到:

因此我们便可以说l-infinity norm是X向量中最大元素的长度。

4- 机器学习中的应用

不知道有多少人是因为机器学习中的正则化和特征选择等才开始了解这些范数的,至少我是。L0范数本身是特征选择的最直接最理想的方案,但如前所述,其不可分,且很难优化,因此实际应用中我们使用L1来得到L0的最优凸近似。L2相对于L1具有更为平滑的特性,在模型预测中,往往比L1具有更好的预测特性。当遇到两个对预测有帮助的特征时,L1倾向于选择一个更大的特征。而L2更倾向把两者结合起来。

4-1 正则化

在机器学习中正则化是指在损失函数中通过引入一些额外的信息,来防止 ill-posed 问题或 过拟合 问题。一般这些额外的信息是用来对模型复杂度进行惩罚( Occam's razor )。其一般形式如下:

||w||||w||便可以选取L1或是L2范数来作为惩罚项,不同的模型,其损失函数也不同,对于线性回归而言,如果惩罚项选择L1,则是我们所说的 Lasso回归 ,而L2则是 Ridge回归 。下面我们列出了不同模型中的正则化的损失函数(来自Andrew Ng的 Machine Learning 课程):

Regularized Logistic Regression

Regularized Neural Network

Soft Margin SVM

从上面可以看出常用的正则化项多是L2范数,除了防止过拟合的问题,还有一个好处就是能否改善ill-posed(condition)问题。尤其是当训练样本相对于特征数非常少时,其矩阵便是非满秩的,往往倾向于有无数个解,且是不可逆的。其 condition num 便会很大。一方面,根据此得到的最优化值很不稳定,往往某个特征变量很小的变动都会引发最终结果较大的偏差。另外通过矩阵求逆从而求的最优解就会变的非常困难。如对于线性回归而言,求的最优解析解为:

而加上L2正则项后,其变为:

从而可以直接求逆,改善了condition number。

而对于无解析解,通过迭代优化的算法,L2正则化通过将目标函数变为λ-strongly convex(λ强凸),有效的加快了其收敛速度。

4-2 贝叶斯先验

正则化项从贝叶斯学习理论的角度来看,其相当于一种先验函数。即当你训练一个模型时,仅仅依靠当前的训练集数据是不够的,为了实现更好的预测(泛化)效果,我们还应该加上先验项。而L1则相当于设置一个Laplacean先验,去选择MAP(maximum a posteriori)假设。而L2则类似于 Gaussian先验。如下图所示:

从上图可以看出,L1先验对大值和小值的tolerate都很好,而L2先验则倾向于均匀化大值和小值。

4-3 特征选择与稀疏编码

机器学习社区里通常把特征选择的方法分为三种。一种是基于统计学的一些方法,对特征进行预筛选,选出子集作为模型输入。如统计推理使用的假设检验,P值。另一种是采用某种成熟的学习算法进行特征选择,如决策树中采用信息增益来选择特征。还有一种便是在模型算法中进行自动特征选择。而L1范数作为正则化项,其特征选择的图谱倾向于spiky,实现了有效的特征选择。

稀疏编码也是想通过寻找尽可能少的特征表达某个输入的向量X。

其中ϕiϕi是所要寻找的基向量,a(j)iai(j)是我们要优化的各个基向量的权重。最右边的表达式便是其正则化惩罚项,在这里也称Sparse Cost。实际中我们通常便用L1范数。

加入两个题目

L1最优化问题的解是稀疏性的 , 其倾向于选择很少的一些非常大的值和很多的insignificant的小值。而L2最优化则更多的非常少的特别大的值,却又很多相对小的值,但其仍然对 最优化解有significant的贡献。 但从最优化问题解的平滑性来看,L1范数的最优解相对于L2范数要少,但其往往是最优解,而L2的解很多,但更多的倾向于某种局部最优解。

5 参考

[1.] Wiki: Norm .

[2.] Rorasa's blog .

[3.] MaxJax .

[4.] 机器学习中的范数规范化 .

[5.] Difference between l1 and l2 .

[6.] gradient-descent-wolfe-s-condition-and-logistic-regression .

‘玖’ 什么是正则化希望得到详细定义和例子

图像复原从数学角度考虑,它等价于第一类fredholm积分方程,是一种反问题,具有很大的病态性,因此,必须进行正则化处理。从统计的角度看,正则化处理其实就是一种图像的先验信息约束 。假设图像退化过程用如下模型描述:
g=hf+n (1)
则图像复原即根据观测图像g恢复原始图像f。正则化图像复原从贝叶斯角度来说,可以用map(最大后验概率估计)方法实现,即:
f=argmax{p(f|g)=p(g|f)p(f)/p(g)} (2)
先验分布函数 p(f)可以看成一正则化项。图像复原关键问题是先验模型p(f) 的选取,也可以说图像建模在图像复原中起者中心作用。早期的图像复原方法假设 服从平稳高斯分布,从而导致约束最小二乘图像复原方法;但许多统计试验表明大部分自然图像都不能用平稳高斯分布准确的描述,模型的不准确导致复原的图像质量较差,图像边缘不能很好的保持。mrf (markov random field)在图像复原中起很重要的作用,如果将原始图像看作mrf的一次实现,根据mrf的局部性,可以用局部gmrf(gauss markov random field)对图像进行建模,按照这种方式建立的模型比用平稳高斯分布更为准确,因此所复原的质量也较好。现代很多人热衷于小波变换的图像复原,其原因是图像的小波系数可近似认为互相独立,且能够用简单的统计模型描述(如广义高斯分布等)。我认为小波在图像复原中主要起工具的作用,现在关于小波方法进行图像复原,研究重点应放在对小波系数的统计建模(如小波系数尺度间、尺度内、方向间的相关性等)。由于一般正交小波变换不具有平移不变性和方向较少的特点,基于这些不足,现在的发展是在其他变换域内建立模型,如(冗余小波变换,复小波变换,脊波,曲波等)这仍是一个正在发展的课题,关于对这些变换域系数进行统计建模用于图像复原能够弥补正交小波变换的不足,然而重点仍是对变换系数的统计建模。
正如我们如上所说,图像建模对图像复原起很重要的作用。然而,从计算复杂度的角度考虑,一个好的模型常导致计算上的困难。因为一个好的模型最终导致一个(2)式有多个极值点,从而在计算上必须用一些全局优化算法(如模拟退火等),这导致很大的计算量。
综上分析,图像复原需要两方面的知识需要考虑:1统计建模的知识2计算方法的知识。
两者任一方面的改进,都会推动图像复原的发展。因此,必须懂得数理统计,贝叶斯分析,随机场,优化算法,矩阵论,小波分析等数学课程。

‘拾’ 正则化 到底指什么

正则化是为了使用正则表达式用以在海量数据中迅速查找匹配的数据方法。

阅读全文

与优化算法正则化相关的资料

热点内容
京东直营网挣用什么APP 浏览:825
杰克豆车机怎么安装app 浏览:32
app查余额怎么有两个金额 浏览:303
小程序仿今日头条源码 浏览:277
框架源码研读 浏览:446
仙侣奇缘3如何架设服务器 浏览:954
单片机RRC指令 浏览:889
默认加密文件密码 浏览:5
怎么用反诈中心app查询电话 浏览:710
linuxvi操作 浏览:298
什么是实木压缩板 浏览:641
加密空投与硬分叉指南 浏览:17
加密wps文档密码忘了怎么办 浏览:687
冲程算法 浏览:990
鸡料与鸡粪的算法 浏览:835
phpif变量为空值 浏览:59
iot编译器异常 浏览:602
代理服务器被禁用怎么上网 浏览:413
隐私加密怎么设置密码 浏览:942
马丁靴补色解压 浏览:567