损失函数的可视化——浅论模型的参数空间与正则

前言:

在深度学习中我们总是不可避免会碰到各种各样的损失函数,通常来说,损失函数都是高维的函数,难以可视化为人类可以分辨的二维或者三维形式,因此这里介绍一种通过在高维空间中切片的损失函数可视化手段,并且讨论下模型的参数空间。如有谬误请联系指出,转载请注明出处。

∇ \nabla 联系方式:

e-mail: FesianXu@gmail.com

QQ: 973926198

github: https://github.com/FesianXu

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号
qrcode


模型的参数空间

我们知道,在机器学习,特别是深度学习中,整个模型有着数以万计,百万计的参数,包括有权值,偏置等,这些参数通常来说都是实数,如果用 θ \theta θ表示模型的所有参数,既是 θ ∈ R N \theta \in \mathbb{R}^N θRN,其中 N N N就可以表示模型的参数量。我们可以知道, θ \theta θ的每个分量都是可以自由取值的,当每个分量遍历了所有可能的取值时,我们不妨把模型的所有可能参数取值看成一个空间,名为参数空间(parameter space),用符号 P \mathcal{P} P表示。 也就是说,我们模型中的每一个可能的参数组合 θ \theta θ,都有 θ ∈ P N \theta \in \mathcal{P}^N θPN。为了方便起见,我们接下来的讨论将 N N N设为3,也就是说我们下面讨论的模型只有三个参数。其参数空间绘制出来如下所示:
3dpspace

因为这个空间中的每个点(元素)都代表着一个可能的参数组合,因此都可以看成一个假设相同的模型。我们如下图可以发现,不同参数组合之间可以自由移动,比如从当前的 θ 1 \theta_1 θ1移动到 θ 2 \theta_2 θ2,这个就是模型参数的更新过程。
update

其实我们也可以简单地发现,空间 P \mathcal{P} P其实是一个线性空间,因为无论是数乘还是加法在这个空间都是封闭的,同时,我认为这个空间不是内积空间,因为在参数空间定义内积似乎没有意义,不确定是否是赋范空间,希望有了解的朋友指出。不管怎么说,因为这个参数空间是一个线性空间,我们可以用空间的非线性相关基底表示空间中的任意一个点了。特别的,我们考虑这个空间中的一个平面 S ∈ R 2 \mathcal{S} \in \mathbb{R}^2 SR2,这个平面可以由初始点 θ 0 \theta_0 θ0和两个非线性相关的空间向量 θ 1 \theta_1 θ1, θ 2 \theta_2 θ2组成,既是 θ ∈ S , θ = a θ 1 + b θ 2 + θ 0 \theta \in \mathcal{S}, \theta = a\theta_1+b\theta_2+\theta_0 θS,θ=aθ1+bθ2+θ0,画出图如下所示:
s_space

其实我们可以发现,这个时候,本来是可以在整个3维空间 P \mathcal{P} P中进行参数搜索的,通过限制,或者说正则化手段,将其限制在了只能在一个平面 S \mathcal{S} S上进行参数搜索。

这个行为正是正则的作用,通过引入一些假设或者说偏好,将模型过大的参数空间限制在一个偏好空间中,从而实现更好的泛化和搜索。当然我这里为了可视化方便举的是3维的例子,其实扩展到 N N N维也是一样的。我们接下来考察在 N N N维参数空间中,利用刚才讨论的参数空间的线性特质进行损失函数的可视化。


损失函数的二维可视化

在模型中因为参数数以万计甚至数以百万计,而且我们的损失函数是关于参数的一个函数,因此损失函数也是个极其高高维的函数,难以可视化,但是,通过切片的手段,我们可以可视化出损失函数的一个切片出来,定性观察其局部特性。我们看下如何进行切片。

考虑一个损失函数 L ( ⋅ ) ∈ R \mathcal{L}(\cdot) \in \mathbb{R} L()R,假设其映射为 L : P → R \mathcal{L}: \mathcal{P} \rightarrow \mathbb{R} L:PR,也就是将每一个权值函数都映射到了一个相应的损失值(当然中间需要通过模型函数 f ( ⋅ ) f(\cdot) f()的作用,这里省略了),假设我们的初始参数为 θ 0 \theta_0 θ0,那么假设两个方向的基底,分别为 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2,那么在这个由 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2为基底的平面中,每一个新的参数都可以表示为 θ = θ 0 + a θ 1 + b θ 2 \theta = \theta_0+a\theta_1+b\theta_2 θ=θ0+aθ1+bθ2,也就说我们的损失函数可以从初始的 L ( θ 0 ) \mathcal{L}(\theta_0) L(θ0)更新到 L ( θ 0 + a θ 1 + b θ 2 ) \mathcal{L}( \theta_0+a\theta_1+b\theta_2) L(θ0+aθ1+bθ2),这个过程,只要当初始值 θ 0 \theta_0 θ0和基底 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2决定了(其实初始值可以随机选),就完全由 a , b a,b a,b两个值决定了,因此可以将其画成一个平面图,如下所示[2]:
loss2d
进一步分析我们可以知道,这个过程其实相当于对损失函数进行了一个切片的操作,如下图所示:
clip

因此,这个由 a , b a,b a,b组成的等高线图可以表示整个高维度损失函数的一个切面,提供损失函数的局部信息,当然不能描述整个损失函数,但是不失为一个提供参考的好方法。下图是SVM损失函数依据此方法的可视化结果[1],左图具有正则约束,而右图没有:
svm

总结来说,这种方法通过用 a , b a,b a,b两个维度代表了整个高维度的损失函数,达到了可视化的目的。


再看正则化

正则,常常在统计学和机器学习中提及,其本质是引入一些先验的知识,数据额外的知识解决一些病态(ill-posed)的问题,以缓解过拟合的现象[4]。这个过程中,给参数空间提供了偏好,减小了参数空间的大小,我们以后有机会再继续细谈不同正则的假设的解决的问题,我们这里主要考虑的是,怎么提供正则?我们观察下面图:
reg

我们容易发现,其实参数空间中的每一个点都映射到了损失函数上,其参数空间上的平移相当于损失函数上的“上坡”或者“下坡”,因此损失函数的最小化体现在参数空间上就是参数在寻找一个最优值。那么我们不难推理出,其实参数空间和损失函数是相关的,我们对参数空间进行正则也就是进行偏好假设,在损失函数上,其实就相当于加上一个正则项,控制损失函数的形状罢了。对于在考虑损失函数的情况下加上正则,可以考虑在损失函数中添加正则项,对于考虑参数空间的正则,可以考虑不同的特殊网络结构,这两种方法都是常见的添加正则的方法。

我们以后文章中将会看到,诸如dropout, L2 weight decay, L1 sparse, stochastic depth, weight sharing, sparse connection等等无一不是在我提到的这两种方法中考虑的。


Reference

[1]: 最优化基础:损失函数可视化、折页损失函数 & 梯度计算

[2]: Li H, Xu Z, Taylor G, et al. Visualizing the loss landscape of neural nets[J]. arXiv preprint arXiv:1712.09913, 2017.

[3]: Dinh L, Pascanu R, Bengio S, et al. Sharp minima can generalize for deep nets[J]. arXiv preprint arXiv:1703.04933, 2017.

[4]: Regularization (mathematics)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FesianXu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值