首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

深度学习机器学习理论知识:范数、稀疏与过拟合合集(4)L2范数对condition number较差情况的缓解

  • 25-03-03 18:01
  • 3454
  • 12383
blog.csdn.net

范数、稀疏与过拟合合集(1)范数的定义与常用范数介绍
范数、稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理
范数、稀疏与过拟合合集(3)范数与稀疏化的原理、L0L1L2范数的比较以及数学分析
范数、稀疏与过拟合合集(4)L2范数对condition number较差情况的缓解
范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧

优化有两大难题

一是:局部最小值

我们的目标是找到全局最小值,如果局部最小值太多,那我们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。

二是:ill-condition病态问题

解释一下ill-condition。ill-condition对应的是well-condition。

那他们分别代表什么?假设我们有个方程组 A X = b AX=b AX=b,我们需要求解 X X X。如果 A A A或者 b b b稍微的改变,会使得 X X X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。我们具体举个例子吧:
 equations   solution  [ 1 2 2 3.999 ] [ x y ] = [ 4 7.999 ] [ x y ] = [ 2 1 ] [ 1 2 2 3.999 ] [ x y ] = [ 4.001 7.998 ] [ x y ] = [ − 3.999 4.000 ] [ 1.001 2.001 2.001 3.998 ] [ x y ] = [ 4 7.999 ] [ x y ] = [ 3.994 0.001388 ]

[1223.999][xy][1223.999][xy][1.0012.0012.0013.998][xy] equations =[47.999]=[4.0017.998]=[47.999] solution [xy][xy][xy]=[21]=[−3.9994.000]=[3.9940.001388] equations  solution [1223.999][xy]=[47.999][xy]=[21][1223.999][xy]=[4.0017.998][xy]=[−3.9994.000][1.0012.0012.0013.998][xy]=[47.999][xy]=[3.9940.001388]
[12​23.999​][xy​][12​23.999​][xy​][1.0012.001​2.0013.998​][xy​]​ equations =[47.999​]=[4.0017.998​]=[47.999​]​ solution [xy​][xy​][xy​]​=[21​]=[−3.9994.000​]=[3.9940.001388​]​

 equations   solution  [ 1 2 2 3 ] [ x y ] = [ 4 7 ] [ x y ] = [ 2 1 ] [ 1 2 2 3 ] [ x y ] = [ 4.001 7.001 ] [ x y ] = [ 1.999 1.001 ] [ 1.001 2.001 2.001 3.001 ] [ x y ] = [ 4 7 ] [ x y ] = [ 2.003 0.997 ]

[1223][xy][1223][xy][1.0012.0012.0013.001][xy] equations =[47]=[4.0017.001]=[47] solution [xy][xy][xy]=[21]=[1.9991.001]=[2.0030.997] equations  solution [1223][xy]=[47][xy]=[21][1223][xy]=[4.0017.001][xy]=[1.9991.001][1.0012.0012.0013.001][xy]=[47][xy]=[2.0030.997]
[12​23​][xy​][12​23​][xy​][1.0012.001​2.0013.001​][xy​]​ equations =[47​]=[4.0017.001​]=[47​]​ solution [xy​][xy​][xy​]​=[21​]=[1.9991.001​]=[2.0030.997​]​

咱们先看上边的那个。第一行假设是我们的 A X = b AX=b AX=b,第二行我们稍微改变下 b b b,得到的 x x x和 y y y没改变前的差别很大。第三行我们稍微改变下系数矩阵 A A A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵 A A A或者 b b b太敏感了。又因为一般我们的系数矩阵 A A A和 b b b是从实验数据里面估计得到的,所以它是存在误差的,如果我们的系统对这个误差是可以容忍的就还好,但系统对这个误差太敏感了,以至于我们的解的误差更大,那这个解就太不靠谱了。所以这个方程组系统就是ill-conditioned病态的,不正常的,不稳定的,有问题的。

下边那个就叫well-condition的系统了。

对于一个ill-condition的系统,我的输入稍微改变下,输出就发生很大的改变,这不好啊,这表明我们的系统不能实用啊。你想想看,例如对于一个回归问题 y = f ( x ) y=f(x) y=f(x),我们是用训练样本 x x x去训练模型 f f f,使得 y y y尽量输出我们期待的值,例如0。那假如我们遇到一个样本 x ’ x’ x’,这个样本和训练样本 x x x差别很小,面对他,系统本应该输出和上面的y差不多的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一个人脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。所以如果一个系统是ill-conditioned病态的,我们就会对它的结果产生怀疑。那到底要相信它多少呢?我们得找个标准来衡量吧,因为有些系统的病没那么重,它的结果还是可以相信的,不能一刀切吧。终于回来了,上一篇blog提到的condition number就是拿来衡量ill-condition系统的可信度的。condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

condition number定义

如果方阵 A A A是非奇异的,那么 A A A的condition number定义为:
κ ( A ) = ∥ A ∥ ∥ A − 1 ∥ \kappa(A)=\|A\|\left\|A^{-1}\right\| κ(A)=∥A∥∥∥​A−1∥∥​
也就是矩阵 A A A的norm乘以它的逆的norm。所以具体的值是多少,就要看你选择的norm是什么了。如果方阵 A A A是奇异的,那么 A A A的condition number就是正无穷大了。实际上,每一个可逆方阵都存在一个condition number。但如果要计算它,我们需要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。

为什么要范数?范数就相当于衡量一个矩阵的大小,我们知道矩阵是没有大小的,上面例子中要衡量一个矩阵 A A A或者向量 b b b变化的时候,我们的解 X X X变化的大小。所以肯定得要有一个东西来度量矩阵和向量的大小。就是范数,表示矩阵大小或者向量长度。

经过比较简单的证明,对于 A X = b AX=b AX=b,我们可以得到以下的结论:
∥ Δ x ∥ ∥ x ∥ ≤ ∥ A ∥ ⋅ ∥ A − 1 ∥ ⋅ ∥ Δ b ∥ ∥ b ∥ ∥ Δ x ∥ ∥ x ∥ ≤ κ ( A ) ⋅ ∥ Δ b ∥ ∥ b ∥ ∥ Δ x ∥ ∥ x + Δ x ∥ ≤ κ ( A ) ∥ Δ A ∥ ∥ A ∥

∥Δx∥∥x∥≤∥A∥⋅∥∥A−1∥∥⋅∥Δb∥∥b∥∥Δx∥∥x∥≤κ(A)⋅∥Δb∥∥b∥∥Δx∥∥x+Δx∥≤κ(A)∥ΔA∥∥A∥‖Δx‖‖x‖≤‖A‖⋅‖A−1‖⋅‖Δb‖‖b‖‖Δx‖‖x‖≤κ(A)⋅‖Δb‖‖b‖‖Δx‖‖x+Δx‖≤κ(A)‖ΔA‖‖A‖
∥x∥∥Δx∥​≤∥A∥⋅∥∥​A−1∥∥​⋅∥b∥∥Δb∥​∥x∥∥Δx∥​≤κ(A)⋅∥b∥∥Δb∥​∥x+Δx∥∥Δx∥​≤κ(A)∥A∥∥ΔA∥​​
也就是我们的解 x x x的相对变化和 A A A或者 b b b的相对变化是有像上面那样的关系的,其中 κ ( A ) \kappa(A) κ(A)的值就相当于倍率,相当于 x x x变化的界。

对condition number来个一句话总结:condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。

L 2 L_2 L2​范数对于condition number较差情况的缓解

从优化或者数值计算的角度来说, L 2 L_2 L2​范数有助于处理condition number不好的情况下矩阵求逆很困难的问题。因为目标函数如果是二次的,对于线性回归来说,那实际上是有解析解的,求导并令导数等于零即可得到最优解为:
w ^ = ( X T X ) − 1 X T y \hat{\mathbf{w}}=\left(X^{T} X\right)^{-1} X^{T} \mathbf{y} w^=(XTX)−1XTy
然而,如果当我们的样本 X X X的数目比每个样本的维度还要小的时候,矩阵 X T X X^TX XTX将会不是满秩的,也就是 X T X X^TX XTX会变得不可逆,所以 w ∗ w_* w∗​就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(因为我们方程组的个数小于未知数的个数)。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们过拟合了。

但如果加上 L 2 L_2 L2​规则项,就变成了下面这种情况,就可以直接求逆了:
w ∗ = ( X T X + λ I ) − 1 X T y w^{*}=\left(X^{T} X+\lambda I\right)^{-1} X^{T} y w∗=(XTX+λI)−1XTy
这里面,专业点的描述是:要得到这个解,我们通常并不直接求矩阵的逆,而是通过解线性方程组的方式(例如高斯消元法)来计算。考虑没有规则项的时候,也就是 λ = 0 \lambda=0 λ=0的情况,如果矩阵XTX的condition number很大的话,解线性方程组就会在数值上相当不稳定,而这个规则项的引入则可以改善condition number。

另外,如果使用迭代优化的算法,condition number太大仍然会导致问题:它会拖慢迭代的收敛速度,而正则项从优化的角度来看,实际上是将目标函数变成λ-strongly convex(λ强凸)的了。这里又出现个λ强凸,啥叫λ强凸呢?

当 f f f满足:
f ( y ) ≥ f ( x ) + < ∇ f ( x ) , y − x > + λ 2 ∥ y − x ∥ 2 f(\mathrm{y}) \geq \mathrm{f}(\mathrm{x})+<\nabla f(\mathrm{x}), \mathrm{y}-\mathrm{x}>+\frac{\lambda}{2}\|\mathrm{y}-\mathrm{x}\|^{2} f(y)≥f(x)+<∇f(x),y−x>+2λ​∥y−x∥2
时,我们称f为λ-strongl yconvex函数,其中参数 λ > 0 \lambda>0 λ>0。当 λ = 0 \lambda=0 λ=0时退回到普通convex函数的定义。

在直观的说明强凸之前,我们先看看普通的凸是怎样的。假设我们让f在x的地方做一阶泰勒近似(一阶泰勒展开忘了吗? f ( x ) = f ( a ) + f ’ ( a ) ( x − a ) + o ( ∣ ∣ x − a ∣ ∣ ) ) f(x)=f(a)+f’(a)(x-a)+o(||x-a||)) f(x)=f(a)+f’(a)(x−a)+o(∣∣x−a∣∣)):
f ( y ) ≥ f ( x ) + < ∇ f ( x ) , y − x > + o ( ∥ y − x ∥ ) f(\mathrm{y}) \geq \mathrm{f}(\mathrm{x})+<\nabla f(\mathrm{x}), \mathrm{y}-\mathrm{x}>+o(\|\mathrm{y}-\mathrm{x}\| ) f(y)≥f(x)+<∇f(x),y−x>+o(∥y−x∥)
直观来讲,convex 性质是指函数曲线位于该点处的切线,也就是线性近似之上,而 strongly convex 则进一步要求位于该处的一个二次函数上方,也就是说要求函数不要太“平坦”而是可以保证有一定的“向上弯曲”的趋势。专业点说,就是convex 可以保证函数在任意一点都处于它的一阶泰勒函数之上,而strongly convex可以保证函数在任意一点都存在一个非常漂亮的二次下界quadratic lower bound。当然这是一个很强的假设,但是同时也是非常重要的假设。可能还不好理解,那我们画个图来形象的理解下
image-20210126220235029

大家一看到上面这个图就全明白了吧。不用我啰嗦了吧。还是啰嗦一下吧。我们取我们的最优解 w ∗ w_* w∗​的地方。如果我们的函数 f ( w ) f(w) f(w),见左图,也就是红色那个函数,都会位于蓝色虚线的那根二次函数之上,这样就算 w t w_t wt​和 w ∗ w_* w∗​离的比较近的时候, f ( w t ) f(w_t) f(wt​)和 f ( w ∗ ) f(w_*) f(w∗​)的值差别还是挺大的,也就是会保证在我们的最优解 w ∗ w_* w∗​附近的时候,还存在较大的梯度值,这样我们才可以在比较少的迭代次数内达到 w ∗ w_* w∗​ 。但对于右图,红色的函数 f ( w ) f(w) f(w) 只约束在一个线性的蓝色虚线之上,假设是如右图的很不幸的情况(非常平坦),那在 w t w_t wt​还离我们的最优点 w ∗ w_* w∗​很远的时候,我们的近似梯度 f ( w t ) − f ( w ∗ ) w t − w ∗ \frac{f(w_t)-f(w_*)}{w_t-w_*} wt​−w∗​f(wt​)−f(w∗​)​就已经非常小了,在 w t w_t wt​处的近似梯度 ∂ f ∂ u \frac{\partial f }{\partial u} ∂u∂f​就更小了,这样通过梯度下降 w t + 1 = w t − α ∗ ∂ f ∂ u w_t+1=w_t-\alpha*\frac{\partial f }{\partial u} wt​+1=wt​−α∗∂u∂f​,我们得到的结果就是 w w w的变化非常缓慢,像蜗牛一样,非常缓慢的向我们的最优点 w ∗ w_* w∗​爬动,那在有限的迭代时间内,它离我们的最优点还是很远。

所以仅仅靠convex 性质并不能保证在梯度下降和有限的迭代次数的情况下得到的点 w w w会是一个比较好的全局最小点 w ∗ w_* w∗​的近似点(插个话,有地方说,实际上让迭代在接近最优的地方停止,也是一种规则化或者提高泛化性能的方法)。正如上面分析的那样,如果 f ( w ) f(w) f(w)在全局最小点 w ∗ w_* w∗​周围是非常平坦的情况的话,我们有可能会找到一个很远的点。但如果我们有“强凸”的话,就能对情况做一些控制,我们就可以得到一个更好的近似解。至于有多好嘛,这里面有一个bound,这个 bound 的好坏也要取决于strongly convex性质中的常数 α \alpha α的大小。看到这里,不知道大家学聪明了没有。如果要获得strongly convex怎么做?最简单的就是往里面加入一项 ( α / 2 ) ∗ ∣ ∣ w ∣ ∣ 2 (\alpha/2)*||w||2 (α/2)∗∣∣w∣∣2。

呃,讲个strongly convex花了那么多的篇幅。实际上,在梯度下降中,目标函数收敛速率的上界实际上是和矩阵 X T X X^TX XTX的 condition number有关, X T X X^TX XTX的 condition number越小,上界就越小,也就是收敛速度会越快。

L 2 L_2 L2​范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。

LAST、参考文献

各种范数的解释_u011484045的专栏-CSDN博客
如何通俗易懂地解释「范数」? - 知乎
范数_weixin_34233618的博客-CSDN博客
范数、L1范数和L2范数的基本概念_lioncv的专栏-CSDN博客_l1范数的定义
过拟合以及正则化(L0,L1,L2范数)_yeal-CSDN博客
谱范数的理解与论述_MathThinker的博客-CSDN博客
向量范数与矩阵范数 - 知乎
L1范数和L2范数的区别 - 程序员大本营
L1范数与L2范数的区别 - 知乎
范数、L1范数和L2范数的基本概念_lioncv的专栏-CSDN博客_l1范数的定义
机器学习中的范数规则化之(一)L0、L1与L2范数_bitcarmanlee的博客-CSDN博客
L1范数与L2范数的区别_不二的博客-CSDN博客_l2范数

文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树OpenCV中的深度学习图像分类26361 人正在系统学习中
注:本文转载自blog.csdn.net的呆呆象呆呆的文章"https://blog.csdn.net/qq_41554005/article/details/113200208"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top