我是靠谱客的博主 清秀大叔,最近开发中收集的这篇文章主要介绍深度学习正则化-参数范数惩罚(L1,L2范数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

L0范数惩罚

机器学习中最常用的正则化措施是限制模型的能力,其中最著名的方法就是L1和L2范数惩罚。

        假如我们需要拟合一批二次函数分布的数据,但我们并不知道数据的分布规律,我们可能会先使用一次函数去拟合,再使用二次函数、三次、四次、等等次数的函数去拟合,从中选择拟合效果最好的一个函数来作为我们最终的模型。

        上面的方法未免显得有些太繁琐,如果有一批数据输入指数为50的函数分布,按照以上尝试的方法难道我们要尝试50次以上?这显然不太可能。

        我们可以上来就先定义一个高次多项式,例如:

                                                  f(x) = w_{50}x^{50} + w_{49}x^{49} + ... + w_{0}x^{0}

        对于我们刚开始提出的问题,从我们定义的一个n次多项式到最佳的二次多项式:

                                                 f(x) = 0x^{50} +0x^{49} + ... + w_{2}x^{2} + 0x^{0}

我们发现,其实就是限制高次项的系数为0.用数学符号表示:

                                           min(j(w))            s.t.              w_{50} = w_{49} = ... = w_{3} = 0

这样的思路固然好,但是就是不方便实现,我们需要记录所有的函数对应的参数,对于深度学习这种拥有百万级参数规模的学习模型来说,那简直是不可想象的。

        因此我们放松限制,仅仅控制参数的数目,而不是从高到低的顺序限制参数。我们将不为0的参数数量限制再c以内来达到限制模型的目的,如下式子所示:

                                         min(j(w)) s.t.sum_{i=1}^{m} i(w_{i} neq 0) leqslant c

这种方式被称为L0范数惩罚。

L1范数惩罚

虽然我们已经放松了限制,但是以上表达式并不完美,对于实际应用并不是太友好,那么我们不妨再放松一下限制,不要求非零的参数个数控制再c以内,但要求参数绝对值数值的和控制再c以内,如下式所示:

                                         min(j(w)) s.t.sum_{i=1}^{m} |w_{i}| leqslant c

这种参数数值总和的限制被称之为L1范数惩罚,也被成为参数稀疏性惩罚。

虽然高次项系数可能不为0,但如果发生如下式子中的情况,那么高次项也可以被轻松忽略了:

                                f(x) = 0.0001x^{50} +0.0003x^{49} + ... + w_{2}x^{2} + w_{1}x^{0}

加入L1范数惩罚项的代价函数如下所示:

                             j(w) = j(w) + lambda ||w||_{1}

计算加入L1范数惩罚函数的代价函数的梯度:(由于绝对值不可导,我们其实只是在原代价函数梯度的基础上再加上lambda与参数本身的符号函数乘积。

                frac{partial j(w) }{partial w_{i}} = frac{partial j(w) }{partial w_{i}} + lambda sign(w_{i})

相对于权重衰减,L1范数限制的更为严格,因此也就更加稀疏,稀疏性也就是我们最终优化所得的参数中有很多0,稀疏性一大好处就是有利于特征选择

L2范数惩罚

虽然我们已经更加放松了限制,但是这还是不完美,因为带有绝对值,我们都知道,绝对值函数再求梯度时不可导,因此我们再次放宽限制,将求绝对值和变为求平方和,如下式所示,这就是L2范数惩罚,也就是我们熟悉的权重衰减惩罚。

                             min(j(w)) s.t.sum_{i=1}^{m} (w_{i})^{2} leqslant c

我们可以通过控制c值的大小来限制模型的学习能力,c越大,模型能力就越强(过拟合),c越小,模型能力就越弱(欠拟合)。该条件极值可以通过拉格朗日乘子法来进行求解。

对于L2范数求梯度:

                            frac{partial j(w) }{partial w_{i}} = frac{partial j(w) }{partial w_{i}} + 2lambda w_{i}

对于以上式子,若lambda为0,则新的代价函数与原代价函数等价。(lambda>=0)

最后

以上就是清秀大叔为你收集整理的深度学习正则化-参数范数惩罚(L1,L2范数)的全部内容,希望文章能够帮你解决深度学习正则化-参数范数惩罚(L1,L2范数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部