在CV领域大部分问题都是非适定问题(ill-posed problem)。
对于这个“非适定”这一概念,我一直没有探究过。这次看到一篇非常精彩的博客,在这里分享给大家,建议大家查看原文~这里只作笔记,对原文中的错误略有修改。

1. 概念定义

1.1. 病态/ 良态问题

病态问题(ill-conditioned problem):问题的解关于条件非常敏感。条件(或数据)中即使存在极微妙的噪声,也会对问题的解造成剧烈的变化。
反之,关于条件不敏感的问题,我们称之为良态问题(well-conditioned problem)

显然,我们能把这两个概念拓展至病态/ 良态系统(算法),“条件”即系统的输入,“问题的解”即系统的输出。
举一些例子:

  • 人体体温调控系统是良态的,因为体表温度微小的变化也只会带来微小的体温调控;
  • 汽车动力系统是良态的,因为微踩油门时,汽车动力也只会稍作改变。

再延伸至机器学习算法:

  • 如果一个算法对噪声非常敏感,即病态的,那么其健壮性(robustness)也不佳(健壮性就是说系统抗扰动的能力)。
  • 如果一个算法是过拟合的,那么该算法一定是病态的。

1.2. 适定/ 非适定问题

适定问题(ill-posed problem)的定义来源于1903年哈达玛(Hadamard)的演讲:一个问题是适定的,当其满足以下3个条件:

  1. 解存在;
  2. 解是唯一的;
  3. 解连续依赖于输入(解随着初始条件的改变而连续改变)(The solution depends continuously on the input)。

只要不满足其中一个条件,那么该问题就是非适定的(ill-posed)

注意:(非)适定问题既可以是良态的,也可以是病态的。

1.3. 良态/ 病态矩阵和条件数

设有线性方程组\(\mathbf{A} \vec{x} = \vec{b}\),其中\(\mathbf{A}\)是\(n \times n\)方阵,\(\vec{x}\)和\(\vec{b}\)都是\(n \times 1\)列向量。

假设条件\(\vec{x}\)变化了\(\Delta{\vec{x}}\),解相应地变化了\(\Delta{\vec{b}}\),即:
\[
\mathbf{A} (\vec{x} + \Delta{\vec{x}}) = \vec{b} + \Delta{\vec{b}}
\]

由于\(\mathbf{A} \vec{x} = \vec{b}\),因此有\(\mathbf{A} \Delta{\vec{x}} = \Delta{\vec{b}}\)。

假设\(\mathbf{A}\)是非奇异矩阵,即\(\mathbf{A}\)为方阵且存在逆矩阵\(\mathbf{A^{-1}}\),那么有:
\[
\Delta{\vec{x}} = \mathbf{A^{-1}} \cdot \Delta{\vec{b}}
\]

两边取范数,根据范数的特性有:
\[
\Vert \Delta{\vec{x}} \Vert = \Vert \mathbf{A^{-1}} \cdot \Delta{\vec{b}} \Vert \le \Vert \mathbf{A^{-1}} \Vert \cdot \Vert \Delta{\vec{b}} \Vert
\tag{1-1}\]

对\(\mathbf{A} \vec{x} = \vec{b}\)有相同的操作:
\[
\Vert \mathbf{A} \vec{x} \Vert = \Vert \vec{b} \Vert \le \Vert \mathbf{A} \Vert \cdot \Vert \vec{x} \Vert
\tag{1-2}\]

结合(1-1)、(1-2)式有:
\[
\frac{\Vert \Delta \vec{x} \Vert}{\Vert \vec{x} \Vert} \le \Vert \mathbf{A} \Vert \cdot \Vert \mathbf{A^{-1}} \Vert \cdot \frac{\Vert \Delta \vec{b} \Vert}{\Vert \vec{b} \Vert}
\tag{1-3}\]

有东西!

  • \(\frac{\Vert \Delta \vec{x} \Vert}{\Vert \vec{x} \Vert}\)是初始条件的变化率;
  • \(\frac{\Vert \Delta \vec{b} \Vert}{\Vert \vec{b} \Vert}\)是解的变化率;

虽然是不等号,但系数\(\Vert \mathbf{A} \Vert \cdot \Vert \mathbf{A^{-1}} \Vert\)还是有意义的。我们称之为矩阵\(\mathbf{A}\)的条件数(condition number),表示为:
\[
k(\mathbf{A}) = \Vert \mathbf{A} \Vert \cdot \Vert \mathbf{A^{-1}} \Vert
\]
式中的范数可以是0范数,无穷范数等,要注意矩阵\(\mathbf{A}\)必须是非奇异矩阵。

由(1-3)可得:

  • 当条件数\(k(\mathbf{A})\)较小时,若初始条件发生较小变化,则解的变化也不大;此时的矩阵\(\mathbf{A}\)就是良态矩阵
  • 当条件数\(k(\mathbf{A})\)较大时,即使初始条件发生较小变化,解的变化也会很大;此时的矩阵\(\mathbf{A}\)就是病态矩阵

因此,条件数是用来衡量系统敏感度的指标,可用于判定病态/ 良态矩阵

回到前面的注,显然,病态/ 良态的概念与非适定/ 适定的概念是不一致的。

条件数不小于1:
\[
k(\mathbf{A}) = \Vert \mathbf{A} \Vert \cdot \Vert \mathbf{A^{-1}} \Vert \ge \Vert \mathbf{A} \mathbf{A^{-1}} \Vert = \Vert \mathbf{I} \Vert = 1
\]

2. 病态的根源

病态矩阵的较大条件数,并非其病态的根本原因。其根源在于矩阵列向量相关性过强
病态矩阵,实际上是奇异矩阵和近奇异矩阵的另一个说法。

我们举个例子:
\[
\mathbf{W} = \begin{bmatrix}
1333 & -131 \\
331 & -31 \\
\end{bmatrix},\ \vec{x} = \begin{bmatrix}
1 \\
11 \\
\end{bmatrix}
\]
解为:
\[
\vec{y} = \begin{bmatrix}
-120 \\
-13 \\
\end{bmatrix}
\]

如果我们对输入条件作微调,则结果会变为:
\[
\begin{cases}
\begin{split}
\vec{x_1} &= \begin{bmatrix}
1.0097 \\
11.001 \\
\end{bmatrix} \Longrightarrow \vec{y_1} &= \begin{bmatrix}
-95.2 \\
-6.82 \\
\end{bmatrix} \\
\vec{x_2} &= \begin{bmatrix}
1.0024 \\
11.010 \\
\end{bmatrix} \Longrightarrow \vec y_2 &= \begin{bmatrix}
-106.11 \\
-9.52 \\
\end{bmatrix}
\end{split}
\end{cases}
\]

可见,解变化的程度远远大于输入条件变化的程度。并且,矩阵\(\mathbf{A}\)的列向量之间相关性极强。

3. 计算条件数的方法

虽然我们有条件数的定义,但当矩阵为病态矩阵时,其中的求逆结果往往会有很大误差。因此通常情况下,我们会使用矩阵的特征值或奇异值来计算条件数。

3.1. 与特征值的关系

特征值较大者,变化自由度高,因此会导致解的剧烈变化。这有点类似于病态矩阵的表现。

参见:一篇博文

3.2. 与奇异值的关系

通过SVD分解,解的不稳定性也能用矩阵的性质加以解释。参见:一篇博文

3.3. 自由数计算方法

若我们取二范数,则条件数为矩阵\(\mathbf{A}\)的最大、最小奇异值之商:
\[
k(\mathbf{A}) = \frac{\sigma_{max}{\mathbf{A}}}{\sigma_{min}{\mathbf{A}}}
\]

正规阵条件数

当矩阵\(\mathbf{A}\)为正规阵时,条件数为矩阵\(\mathbf{A}\)的最大、最小特征值的绝对值之商:
\[
k(\mathbf{A}) = \frac{\vert \lambda_{max}{\mathbf{A}} \vert}{\vert \lambda_{min}{\mathbf{A}} \vert}
\]

酉矩阵条件数

当矩阵\(\mathbf{A}\)为酉矩阵时,条件数为1:
\[
k(\mathbf{A}) = 1
\]
当且仅当\(\mathbf{A}\)为酉矩阵时,条件数取得最小值1

奇异矩阵条件数

当\(\mathbf{A}\)为奇异矩阵时,其逆矩阵不存在:
\[
k(\mathbf{A}) \to \infty
\]

4. 解释机器学习中的鲁棒性

假设我们要用SGD,用一批\((X,Y)\)样本训练线性模型:
\[
\mathbf{W} \cdot \mathbf{X} = \mathbf{Y}
\]

变形:
\[
\underbrace{\mathbf{X}}_{A} \cdot \underbrace{\mathbf{Y}^{-1}}_{\vec{x}} = \underbrace{\mathbf{W}^{-1}}_{\vec{b}}
\]

由上面所学的知识,若样本\(\mathbf{X}\)中存在大量相关(相似)样本,或矩阵\(\mathbf{X}\)是病态的,那么当标签\(\mathbf{Y}\)中存在噪声时,会导致解\(\mathbf{W}\)出现剧烈波动!

而在实际情况中,我们很难避免数据噪声。因此我们会对样本进行一些预处理,如异常点检测和离群点检测,目的都是为了获得良态的数据矩阵

5. 病态矩阵规避:正则化(Regularizaiton)

当样本数远小于特征向量维度时,损失函数表示的矩阵往往是稀疏甚至是病态的。

此时我们可以加入正则化项。
正则化项会增加数值解与真实解之间的误差,但增强了稳定性。

参考资料

Maths | 病态问题和条件数的更多相关文章

  1. 机器学习中的矩阵方法(附录A): 病态矩阵与条件数

    1. 病态系统 现在有线性系统: Ax = b, 解方程 很容易得到解为: x1 = -100, x2 = -200. 如果在样本采集时存在一个微小的误差,比如,将 A 矩阵的系数 400 改变成 4 ...

  2. NDT(Normal Distributions Transform)算法原理与公式推导

    正态分布变换(NDT)算法是一个配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.下面的公式推导 ...

  3. Note | 常用指令,工具,教程和经验笔记

    目录 图像处理 机器学习和数学 编程环境和工具 写作工具 其他 图像处理 获取图像频域并分解为高低频:https://www.cnblogs.com/RyanXing/p/11630493.html ...

  4. 【原创】开源Math.NET基础数学类库使用(17)C#计算矩阵条件数

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 上个月 ...

  5. 开源Math.NET基础数学类库使用(17)C#计算矩阵条件数

    原文:[原创]开源Math.NET基础数学类库使用(17)C#计算矩阵条件数                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...

  6. 什么是Condition Number(条件数)?

    In the field of numerical analysis, the condition number of a function with respect to an argument m ...

  7. 条件数(condition number)

    首先引入维基上的解释 In the field of numerical analysis, the condition number of a function with respect to an ...

  8. CF456B Fedya and Maths 找规律

    http://codeforces.com/contest/456/problem/B CF#260 div2 B Fedya and Maths Codeforces Round #260 B. F ...

  9. BZOJ 3665: maths

    Sol 矩阵乘法+快速幂+欧拉定理. 首先观察题目可以发现 \(A_n\) 可以表示成关于 \(K\) 和 \(A_0\) 的几次幂的形式. \(A_0\) 就比较简单了 \(m^n\) 所以第一部分 ...

随机推荐

  1. Android studio下载慢解决,使用阿里云解决(转)

    转自:https://blog.csdn.net/kangweijian/article/details/79120849?%3E 使用开源中国的maven库 阿里云的(速度飞快):http://ma ...

  2. scrapy 断点续爬

    第一步:安装berkeleydb数据库 第二部:pip install bsddb3 第三部:pip install scrapy-deltafetch 第四部: settings.py设置 SPID ...

  3. layui数据表格监听按钮问题

    layui官网文档源码 原始容器 <table id="demo" lay-filter="test"></table> 工具栏模板: ...

  4. 从零开始学spring cloud(三) -------- Eureka简介

    1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...

  5. 【scarletthln 关于算法的一点总结】

    1. 分解问题的角度: fix 某一维度,尝试另一维度上的所有可能   a. 可能是array的(i, j)pointers, b. 可能是矩形的长与宽, c. 可能是tree的每一个subtree, ...

  6. ios 根据 schemes 打开 app

    公司出需求,要让 h5链接直接打开用户的 app,如果没有安装 app 直接跳转到 appStore 这就需要给 app 配置 schemes 即可 1.在Info.plist中 LSApplicat ...

  7. 解决Tomcat文件上传超时问题.

    现象描述: 系统支持多文件分片上传,而且支持进度条实时更新.月底当用户集中大批量做文件上传时,文件经常上传到100%就会卡主.按F12打开管理控制台,报错:“XMLHttpRequest:网络错误 0 ...

  8. winform自定义控件中其他遮挡控件点击事件

    自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...

  9. shell脚本实现svn目录同步和提交

    #/bin/bash set -x #提交变更rpm到svn function commit_to_svn() { target_svn_dir=$1 #新增rpm至svn命令 add_to_svn= ...

  10. 使用svn进行文件和文件夹的忽略

    使用svn进行文件和文件夹的忽略 黑泥卡 关注  0.3 2016.08.16 22:42* 字数 786 阅读 20554评论 7喜欢 15 如何使用svn忽略文件和文件夹如果你之前尝试过git,你 ...