范数+低秩
文章目录
监督学习理念:“minimize your error while regularizing your parameters”,也就是在 规则化参数的同时最小化误差。
最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。
令模型“简单”的基础上最终目标是为了“泛化误差小”(测试误差小),能让模型具有我们想要的特性,例如稀疏、低秩、平滑等。
规则项是一个调节模型的参数,其对应于模型的先验概率。规则化符合奥卡姆剃刀(Occam’s razor)原理:在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)。
可看做最小化以下函数:
ω
∗
=
a
r
g
min
ω
∑
i
L
(
y
i
,
f
(
x
i
;
ω
)
)
+
λ
Ω
(
ω
)
\omega^*=arg \min_\omega \sum_i L(y_i,f(x_i;\omega))+\lambda \Omega(\omega)
ω∗=argωmini∑L(yi,f(xi;ω))+λΩ(ω)
第一项
L
(
y
i
,
f
(
x
i
;
ω
)
)
L(y_i,f(x_i;\omega))
L(yi,f(xi;ω)) 衡量我们的模型(分类或者回归)对第
i
i
i个样本的预测值
f
(
x
i
;
ω
)
f(x_i;\omega)
f(xi;ω)和真实的标签
y
i
y_i
yi之间的误差。因为我们的模型是要拟合我们的训练样本的嘛,所以我们要求这一项最小,也就是要求我们的模型尽量的拟合我们的训练数据。但正如上面说言,我们不仅要保证训练误差最小,我们更希望我们的模型测试误差小,所以我们需要加上第二项,也就是对参数
ω
\omega
ω的规则化函数
Ω
(
ω
)
Ω(\omega)
Ω(ω)去约束我们的模型尽量的简单。
第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了;还有等等。不同的loss函数,具有不同的拟合特性,这个也得就具体问题具体分析的。
第二项规则化函数 Ω ( ω ) \Omega(\omega) Ω(ω),一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。比如,规则化项可以是模型参数向量的范数。然而,不同的选择对参数w的约束不同,取得的效果也不同,但我们在论文中常见的都聚集在:零范数、一范数、二范数、迹范数、Frobenius范数和核范数等等。
这么多范数,到底它们表达啥意思?具有啥能力?什么时候才能用?什么时候需要用呢?不急不急,下面我们挑几个常见的娓娓道来。
L1与L2范数
定义1 向量 p p p范数。向量 a = ( a 1 , a 2 , … , a n ) T ∈ R n × 1 \mathbf{a}=(a_1,a_2,\dots,a_n)^T \in \mathbf{R}^{n\times1} a=(a1,a2,…,an)T∈Rn×1 的 p p p 范数为 ∥ a ∥ p = ( ∑ i = 1 n ∣ a i ∣ p ) 1 / p \left \| \mathbf{a} \right \|_p = (\sum_{i=1}^n|a_i|^p)^{1/p} ∥a∥p=(∑i=1n∣ai∣p)1/p ,其中 p > 0 p>0 p>0.
特殊的,当 p = 1 p=1 p=1 时, ∥ a ∥ 1 = ∑ i = 1 n ∣ a i ∣ \left \|\mathbf{a} \right \|_1 = \sum_{i=1}^n|a_i| ∥a∥1=∑i=1n∣ai∣; 当 p = 2 p=2 p=2时, ∥ a ∥ 2 = ∑ i = 1 n a i 2 \left \|\mathbf{a} \right \|_2 = \sqrt{\sum_{i=1}^n a_i^2} ∥a∥2=∑i=1nai2; 此外,规定 ∥ a ∥ 0 \left \| \mathbf{a} \right\|_0 ∥a∥0 为向量 a \mathbf{a} a 的非零元素的个数, ∥ a ∥ ∞ = max 1 ≤ i ≤ n ∣ a i ∣ \|\mathbf{a}\|_{\infty}=\max _{1 \leq i \leq n}\left|a_{i}\right| ∥a∥∞=max1≤i≤n∣ai∣;
定义2 矩阵的内积。对于两个同型的 m × n m\times n m×n维实矩阵 A A A 和 B B B,他们的内积为 ⟨ A , B ⟩ = ∑ i = 1 m ∑ j = 1 n a i j b i j \left \langle A,B \right \rangle=\sum_{i=1}^m\sum_{j=1}^n a_{ij}b_{ij} ⟨A,B⟩=∑i=1m∑j=1naijbij.
定义3 矩阵的范数。矩阵 A = ( a i j ) m × n ∈ R m × n A=(a_{ij})_{m\times n}\in \mathbf{R}^{m \times n} A=(aij)m×n∈Rm×n 的 F r o b e n i u s Frobenius Frobenius 范数为 ∥ A ∥ F = ∑ i = 1 m ∑ j = 1 n a i j 2 \left \| A \right \|_F=\sqrt{\sum_{i=1}^m \sum_{j=1}^n a_{ij}^2} ∥A∥F=∑i=1m∑j=1naij2, 0 0 0 范数 ∥ A ∥ 0 \left \| A \right \|_0 ∥A∥0 为非零元素的个数, ∞ \infty ∞范数为 ∥ A ∥ ∞ = max i , j ∣ a i j ∣ \left \| A \right \|_\infty=\max_{i,j}|a_{ij}| ∥A∥∞=maxi,j∣aij∣, ( 1 , 1 ) (1,1) (1,1)范数为 ∥ A ∥ 1 , 1 = ∑ i = 1 m ∑ j = 1 n ∣ a i j ∣ \left \| A \right \|_{1,1}=\sum_{i=1}^m\sum_{j=1}^n|a_{ij}| ∥A∥1,1=∑i=1m∑j=1n∣aij∣, ( 2 , 1 ) (2,1) (2,1)范数为 ∥ A ∥ 2 , 1 = ∑ j = 1 n ∑ i = 1 m a i j 2 \left \| A \right \|_{2,1}=\sum_{j=1}^n \sqrt{\sum_{i=1}^ma_{ij}^2} ∥A∥2,1=∑j=1n∑i=1maij2.
L0范数与L1范数
L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。矩阵W为稀疏矩阵,但都用L1范数去实现稀疏。
L1范数是指向量中各个元素绝对值之和,也有个美称叫 “稀疏规则算子”(Lasso regularization)。
为什么L1范数会使权值稀疏?
- 它是L0范数的最优凸近似;
- 任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。(详情见)
不用L0范数实现稀疏,一是因为很难优化求解(NP难问题),二是L1范数是L0的最优凸近似,更易求解。
min
s
.
t
.
A
x
=
b
∥
x
∥
0
⇔
min
s
.
t
.
A
x
=
b
∥
x
∥
1
\min_{s.t.\ Ax=b} \left \| x \right \|_0 \qquad \Leftrightarrow \qquad \min_{s.t.\ Ax=b} \left \| x \right \|_1
s.t. Ax=bmin∥x∥0⇔s.t. Ax=bmin∥x∥1
为什么要稀疏?
-
特征选择(Feature Selection)
关键原因在于它能实现特征的自动选择。xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
-
可解释性(Interpretability)
另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000*x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w*就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。
L2范数
它有两个美称,在回归里面,有人把有它的回归叫 “岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。这用的很多吧,因为它的强大功效是改善机器学习里面一个非常重要的问题:过拟合。至于过拟合是什么,上面也解释了,就是模型训练时候的误差很小,但在测试的时候误差很大,也就是我们的模型复杂到可以拟合到我们的所有训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力很差。擅长背诵知识,却不懂得灵活利用知识。例如下图所示(来自Ng的course):
上面的图是线性回归,下面的图是Logistic回归,也可以说是分类的情况。从左到右分别是**欠拟合(underfitting,也称High-bias)、合适的拟合和过拟合(overfitting,也称High variance)**三种情况。可以看到,如果模型复杂(可以拟合任意的复杂函数),它可以让我们的模型拟合所有的数据点,也就是基本上没有误差。对于回归来说,就是我们的函数曲线通过了所有的数据点,如上图右。对分类来说,就是我们的函数曲线要把所有的数据点都分类正确,如下图右。这两种情况很明显过拟合了。
L2范数如何防止过拟合?
L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项 ∥ W ∥ 2 \left\| W \right\|_2 ∥W∥2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。
通过L2范数,我们可以实现了对模型空间的限制,从而在一定程度上避免了过拟合。
L2范数的好处是什么呢?
-
学习理论的角度
L2范数可以防止过拟合,提升模型的泛化能力。
-
优化计算的角度
L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。
优化的两大难题:
-
局部最小值
我们要找的是全局最小值,如果局部最小值太多,那我们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。
-
ill-condition病态问题
ill-condition对应的是well-condition。那他们分别代表什么?假设我们有个方程组AX=b,我们需要求解X。如果A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。我们具体举个例子吧:
咱们先看左边的那个。第一行假设是我们的AX=b,第二行我们稍微改变下b,得到的x和没改变前的差别很大,看到吧。第三行我们稍微改变下系数矩阵A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵A或者b太敏感了。又因为一般我们的系数矩阵A和b是从实验数据里面估计得到的,所以它是存在误差的,如果我们的系统对这个误差是可以容忍的就还好,但系统对这个误差太敏感了,以至于我们的解的误差更大,那这个解就太不靠谱了。所以这个方程组系统就是ill-conditioned病态的,不正常的,不稳定的,有问题的,哈哈。这清楚了吧。右边那个就叫well-condition的系统了。
对于一个ill-condition的系统,我的输入稍微改变下,输出就发生很大的改变,这不好啊,这表明我们的系统不能实用啊。例如对于一个回归问题y=f(x),我们是用训练样本x去训练模型f,使得y尽量输出我们期待的值,例如0。那假如我们遇到一个样本x’,这个样本和训练样本x差别很小,面对他,系统本应该输出和上面的y差不多的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一个人脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。所以如果一个系统是ill-conditioned病态的,我们就会对它的结果产生怀疑。那到底要相信它多少呢?我们得找个标准来衡量吧,因为有些系统的病没那么重,它的结果还是可以相信的,不能一刀切吧。终于回来了,上面的condition number就是拿来衡量ill-condition系统的可信度的。condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。
如果方阵A是非奇异的,那么A的conditio nnumber定义为:
κ ( A ) = ∥ A ∥ ∥ A − 1 ∥ \kappa(A)=\left\| A \right\|\left\| A^{-1} \right\| κ(A)=∥A∥∥∥A−1∥∥
也就是矩阵A的norm乘以它的逆的norm。所以具体的值是多少,就要看你选择的norm是什么了。如果方阵A是奇异的,那么A的condition number就是正无穷大了。实际上,每一个可逆方阵都存在一个condition number。但如果要计算它,我们需要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。
为什么要范数?
范数就相当于衡量一个矩阵的大小,我们知道矩阵是没有大小的,当上面不是要衡量一个矩阵A或者向量b变化的时候,我们的解x变化的大小吗?所以肯定得要有一个东西来度量矩阵和向量的大小吧?对了,他就是范数,表示矩阵大小或者向量长度。OK,经过比较简单的证明,对于AX=b,我们可以得到以下的结论:
∥
Δ
x
∥
∥
x
∥
≤
∥
A
∥
⋅
∥
A
∥
⋅
∥
Δ
b
∥
∥
b
∥
∥
Δ
x
∥
∥
x
∥
≤
K
(
A
)
⋅
∥
Δ
b
∥
∥
b
∥
∥
Δ
x
∥
∥
x
+
Δ
x
∥
≤
K
(
A
)
∥
Δ
A
∥
∥
A
∥
\frac{\left\| \Delta x \right\|}{\left\| x \right\|}\leq\left\| A \right\|\cdot\left\| A \right\|\cdot \frac{\left\| \Delta b \right\|}{\left\| b \right\|} \qquad \frac{\left\| \Delta x \right\|}{\left\| x \right\|}\leq \mathbf{K(A)}\cdot \frac{\left\| \Delta b \right\|}{\left\| b \right\|} \qquad \frac{\left\| \Delta x \right\|}{\left\| x + \Delta x \right\|}\leq \mathbf{K(A)}\frac{\left\| \Delta \mathbf{A} \right\|}{\left\| \mathbf{A} \right\|}
∥x∥∥Δx∥≤∥A∥⋅∥A∥⋅∥b∥∥Δb∥∥x∥∥Δx∥≤K(A)⋅∥b∥∥Δb∥∥x+Δx∥∥Δx∥≤K(A)∥A∥∥ΔA∥
也就是我们的解x的相对变化和A或者b的相对变化是有像上面那样的关系的,其中
K
(
A
)
K(A)
K(A)的值就相当于倍率,看到了吗?相当于x变化的界。
condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。
**从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。**因为目标函数如果是二次的,对于线性回归来说,那实际上是有解析解的,求导并令导数等于零即可得到最优解为:
w
^
=
(
X
T
X
)
−
1
X
T
y
\hat{\mathrm{w}}=(X^TX)^{-1}X^T\mathrm{y}
w^=(XTX)−1XTy
然而,如果当我们的样本X的数目比每个样本的维度还要小的时候,矩阵XTX将会不是满秩的,也就是XTX会变得不可逆,所以
w
^
\hat{\mathrm{w}}
w^就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(因为我们方程组的个数小于未知数的个数)。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们过拟合了。
但如果加上L2规则项,就变成了下面这种情况,就可以直接求逆了:
w
∗
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
w^*=(X^TX+\lambda I)^{-1}X^Ty
w∗=(XTX+λI)−1XTy
这里面,专业点的描述是:要得到这个解,我们通常并不直接求矩阵的逆,而是通过解线性方程组的方式(例如高斯消元法)来计算。考虑没有规则项的时候,也就是λ=0的情况,如果矩阵XTX的 condition number 很大的话,解线性方程组就会在数值上相当不稳定,而这个规则项的引入则可以改善condition number。
另外,如果使用迭代优化的算法,condition number 太大仍然会导致问题:它会拖慢迭代的收敛速度,而规则项从优化的角度来看,实际上是将目标函数变成λ-strongly convex(λ强凸)的了。
当f满足:
f ( y ) ≥ f ( x ) + < ▽ f ( x ) , y − x > + λ 2 ∥ y − x ∥ 2 f(\mathrm{y})\geq \mathrm{f}(\mathrm{x})+<\triangledown f(\mathrm{x}),\mathrm{y}-\mathrm{x}>+\frac{\lambda}{2}\left\| \mathrm{y}-\mathrm{x} \right\|^2 f(y)≥f(x)+<▽f(x),y−x>+2λ∥y−x∥2
时,我们称f为λ-stronglyconvex函数,其中参数λ>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(\left\|x-a\right\|) 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})+< \triangledown f(\mathrm{x}),\mathrm{y}-\mathrm{x}>o(\left\| \mathrm{y}-\mathrm{x} \right\|) f(y)≥f(x)+<▽f(x),y−x>o(∥y−x∥)
直观来讲,convex 性质是指函数曲线位于该点处的切线,也就是线性近似之上,而 strongly convex 则进一步要求位于该处的一个二次函数上方,也就是说要求函数不要太“平坦”而是可以保证有一定的“向上弯曲”的趋势。专业点说,就是convex 可以保证函数在任意一点都处于它的一阶泰勒函数之上,而strongly convex可以保证函数在任意一点都存在一个非常漂亮的二次下界quadratic lower bound。当然这是一个很强的假设,但是同时也是非常重要的假设。可能还不好理解,那我们画个图来形象的理解下。我们取我们的最优解w*的地方。如果我们的函数f(w),见左图,也就是红色那个函数,都会位于蓝色虚线的那根二次函数之上,这样就算wt和w*离的比较近的时候,f(wt)和f(w*)的值差别还是挺大的,也就是会保证在我们的最优解w*附近的时候,还存在较大的梯度值,这样我们才可以在比较少的迭代次数内达到w*。但对于右图,红色的函数f(w)只约束在一个线性的蓝色虚线之上,假设是如右图的很不幸的情况(非常平坦),那在wt还离我们的最优点w*很远的时候,我们的近似梯度(f(wt)-f(w*))/(wt-w*)就已经非常小了,在wt处的近似梯度∂f/∂w就更小了,这样通过梯度下降wt+1=wt-α*(∂f/∂w),我们得到的结果就是w的变化非常缓慢,像蜗牛一样,非常缓慢的向我们的最优点w*爬动,那在有限的迭代时间内,它离我们的最优点还是很远。
所以仅仅靠convex 性质并不能保证在梯度下降和有限的迭代次数的情况下得到的点w会是一个比较好的全局最小点w*的近似点(插个话,有地方说,实际上让迭代在接近最优的地方停止,也是一种规则化或者提高泛化性能的方法)。正如上面分析的那样,如果f(w)在全局最小点w*周围是非常平坦的情况的话,我们有可能会找到一个很远的点。但如果我们有“强凸”的话,就能对情况做一些控制,我们就可以得到一个更好的近似解。至于有多好嘛,这里面有一个bound,这个 bound 的好坏也要取决于strongly convex性质中的常数α的大小。看到这里,不知道大家学聪明了没有。如果要获得strongly convex怎么做?最简单的就是往里面加入一项(α/2)*||w||2。
L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。
L1和L2的差别
L1在江湖上人称Lasso,L2人称Ridge。
为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?
两个几何直观解析:
-
下降速度
我们知道,L1和L2都是规则化的方式,我们将权值参数以L1或者L2的方式放到代价函数里面去。然后模型就会尝试去最小化这些权值参数。而这个最小化就像一个下坡的过程,L1和L2的差别就在于这个“坡”不同,如下图:L1就是按绝对值函数的“坡”下降的,而L2是按二次函数的“坡”下降。所以实际上在0附近,L1的下降速度比L2的下降速度要快。所以会非常快得降到0。不过我觉得这里解释的不太中肯,当然了也不知道是不是自己理解的问题。
-
模型空间的限制
实际上,对于L1和L2规则化的代价函数来说,我们可以写成以下形式:
L a s s o : min w 1 n ∥ y − X w ∥ 2 , s . t . ∥ w ∥ 1 ∈ C R i d g e : min w 1 n ∥ y − X w ∥ 2 , s . t . ∥ w ∥ 2 ∈ C Lasso: \min_\mathrm{w}\frac{1}{n}\left\| \mathrm{y}-X\mathrm{w} \right\|^2, \qquad s.t. \left\| \mathrm{w} \right\|_1\in C \\ Ridge: \min_\mathrm{w}\frac{1}{n}\left\| \mathrm{y}-X\mathrm{w} \right\|^2, \qquad s.t. \left\| \mathrm{w} \right\|_2\in C Lasso:wminn1∥y−Xw∥2,s.t.∥w∥1∈CRidge:wminn1∥y−Xw∥2,s.t.∥w∥2∈C
也就是说,我们将模型空间限制在w的一个L1-ball 中。为了便于可视化,我们考虑两维的情况,在(w1, w2)平面上可以画出目标函数的等高线,而约束条件则成为平面上半径为C的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解:可以看到,L1-ball 与L2-ball 的不同就在于L1在和每个坐标轴相交的地方都有“角”出现,而目标函数的测地线除非位置摆得非常好,大部分时候都会在角的地方相交。注意到在角的位置就会产生稀疏性,例如图中的相交点就有w1=0,而更高维的时候(想象一下三维的L1-ball 是什么样的?)除了角点以外,还有很多边的轮廓也是既有很大的概率成为第一次相交的地方,又会产生稀疏性。
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。
核范数与规则项参数选择
核范数
核范数 ∥ W ∥ ∗ \left\| W \right\|^* ∥W∥∗是指矩阵奇异值的和,英文称呼叫Nuclear Norm。作用:约束Low-Rank(低秩)。
矩阵中的秩:
{ x 1 − x 2 + x 3 = 5 x 1 + x 2 + x 3 = 7 2 x 1 − 2 x 2 + 2 x 3 = 14 \left\{\begin{matrix} x_1 - x_2 + x_3 = 5 \\ x_1 + x_2 + x_3 = 7 \\ 2x_1-2x_2+2x_3=14 \end{matrix}\right. ⎩⎨⎧x1−x2+x3=5x1+x2+x3=72x1−2x2+2x3=14
第3个方程是“多余”的,因为它没有带来任何的信息量,把它去掉,所得的方程组与原来的方程组同解。为了从方程组中去掉多余的方程,自然就导出了“矩阵的秩”这一概念。从物理意义上讲,**矩阵的秩度量的就是矩阵的行列之间的相关性。**如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。回到上面线性方程组来说吧,因为线性方程组可以用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,所以对应的矩阵的秩就是2了。
既然秩可以度量相关性,而矩阵的相关性实际上有带有了矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达了,它就是低秩的。所以我们总结的一点就是:如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在着一定的相关性,那这个矩阵一般就是低秩的。
如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。
好了,低秩有了,那约束低秩只是约束rank(w)呀,和我们这节的核范数有什么关系呢?他们的关系和L0与L1的关系一样。因为rank()是非凸的,在优化问题里面很难求解,那么就需要寻找它的凸近似来近似它了。对,你没猜错,rank(w)的凸近似就是核范数 ∥ W ∥ ∗ \left\| W \right\|^* ∥W∥∗。
低秩矩阵在图像中的意义
我们认为图像有一些公共的模式,所有图像都由这些基本的模式组成。
图像处理中,rank可以理解为图像所包含的信息的丰富程度,在显示生活中,一张图片中大部分成分是相似的。比如给一张大草原的图片
可以理解为,额,草原是由很多草组成的,而草是相似的,所以如果全是草,那么这张图所包含的信息量是很少的的,因为可以理解为草是草的复制品。而上图的蒙古包,人,马之类的则可以理解为图片所包含的信息,实际上,相对于只有草的草原图片和有草和蒙古包的草原图片,后者的秩是较高的。
例如,如果图像是一个叉,可以看成是一个正斜线和反斜线的叠加。只要我们找到了所有的基底(称作字典,就是上面说的正斜线和反斜线之类的东西),就能通过基底的线性组合表示出所有的图像。
几个典型应用
-
矩阵填充(Matrix Completion)
一个主流的应用是在推荐系统里面。我们知道,推荐系统有一种方法是通过分析用户的历史记录来给用户推荐的。例如我们在看一部电影的时候,如果喜欢看,就会给它打个分,例如3颗星。然后系统,例如Netflix等知名网站就会分析这些数据,看看到底每部影片的题材到底是怎样的?针对每个人,喜欢怎样的电影,然后会给对应的用户推荐相似题材的电影。但有一个问题是:我们的网站上面有非常多的用户,也有非常多的影片,不是所有的用户都看过所有的电影,不是所有看过某电影的用户都会给它评分。假设我们用一个“用户-影片”的矩阵来描述这些记录,例如下图,可以看到,会有很多空白的地方。如果这些空白的地方存在,我们是很难对这个矩阵进行分析的,所以在分析之前,一般需要先对其进行补全。也叫矩阵填充。
那到底怎么填呢?如何才能无中生有呢?每个空白的地方的信息是否蕴含在其他已有的信息之上了呢?如果有,怎么提取出来呢?Yeah,这就是低秩生效的地方了。这叫低秩矩阵重构问题,它可以用如下的模型表述:已知数据是一个给定的m*n矩阵A,如果其中一些元素因为某种原因丢失了,我们能否根据其他行和列的元素,将这些元素恢复?当然,如果没有其他的参考条件,想要确定这些数据很困难。但如果我们已知A的秩rank(A)<<m且rank(A)<<n,那么我们可以通过矩阵各行(列)之间的线性相关将丢失的元素求出。你会问,这种假定我们要恢复的矩阵是低秩的,合理吗?实际上是十分合理的,比如一个用户对某电影评分是其他用户对这部电影评分的线性组合。所以,通过低秩重构就可以预测用户对其未评价过的视频的喜好程度。从而对矩阵进行填充。
-
鲁棒PCA
主成分分析,这种方法可以有效的找出数据中最“主要"的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。我们知道,最简单的主成分分析方法就是PCA了。从线性代数的角度看,PCA的目标就是使用另一组基去重新描述得到的数据空间。希望在这组新的基下,能尽量揭示原有的数据间的关系。这个维度即最重要的“主元"。PCA的目标就是找到这样的“主元”,最大程度的去除冗余和噪音的干扰。
鲁棒主成分分析(Robust PCA) 考虑的是这样一个问题:一般我们的数据矩阵X会包含结构信息,也包含噪声。那么我们可以将这个矩阵分解为两个矩阵相加,一个是低秩的(由于内部有一定的结构信息,造成各行或列间是线性相关的),另一个是稀疏的(由于含有噪声,而噪声是稀疏的),则鲁棒主成分分析可以写成以下的优化问题:
min A , E r a n k ( A ) + λ ∣ E ∣ 0 s . t . X = A + E \min_{A,E} rank(A)+\lambda\left| E \right|_0 \qquad s.t.\ X=A+E A,Eminrank(A)+λ∣E∣0s.t. X=A+E
与经典PCA问题一样,鲁棒PCA本质上也是寻找数据在低维空间上的最佳投影问题。对于低秩数据观测矩阵X,假如X受到随机(稀疏)噪声的影响,则X的低秩性就会破坏,使X变成满秩的。所以我们就需要将X分解成包含其真实结构的低秩矩阵和稀疏噪声矩阵之和。找到了低秩矩阵,实际上就找到了数据的本质低维空间。那有了PCA,为什么还有这个Robust PCA呢?Robust在哪?因为PCA假设我们的数据的噪声是高斯的,对于大的噪声或者严重的离群点,PCA会被它影响,导致无法正常工作。而Robust PCA则不存在这个假设。它只是假设它的噪声是稀疏的,而不管噪声的强弱如何。由于rank和L0范数在优化上存在非凸和非光滑特性,所以我们一般将它转换成求解以下一个松弛的凸优化问题:
min A , E ∥ A ∥ ∗ + λ ∥ E ∥ 1 X = A + E \min_{A,E}\left\| A \right\|_*+\lambda\left\| E \right\|_1 \qquad\ X=A+E A,Emin∥A∥∗+λ∥E∥1 X=A+E
说个应用吧。考虑同一副人脸的多幅图像,如果将每一副人脸图像看成是一个行向量,并将这些向量组成一个矩阵的话,那么可以肯定,理论上,这个矩阵应当是低秩的。但是,由于在实际操作中,每幅图像会受到一定程度的影响,例如遮挡,噪声,光照变化,平移等。这些干扰因素的作用可以看做是一个噪声矩阵的作用。所以我们可以把我们的同一个人脸的多个不同情况下的图片各自拉长一列,然后摆成一个矩阵,对这个矩阵进行低秩和稀疏的分解,就可以得到干净的人脸图像(低秩矩阵)和噪声的矩阵了(稀疏矩阵),例如光照,遮挡等等。至于这个的用途,你懂得。 -
背景建模
背景建模的最简单情形是从固定摄相机拍摄的视频中分离背景和前景。我们将视频图像序列的每一帧图像像素值拉成一个列向量,那么多个帧也就是多个列向量就组成了一个观测矩阵。由于背景比较稳定,图像序列帧与帧之间具有极大的相似性,所以仅由背景像素组成的矩阵具有低秩特性;同时由于前景是移动的物体,占据像素比例较低,故前景像素组成的矩阵具有稀疏特性。视频观测矩阵就是这两种特性矩阵的叠加,因此,可以说视频背景建模实现的过程就是低秩矩阵恢复的过程。
-
变换不变低秩纹理(LILT)
以上章节所介绍的针对图像的低秩逼近算法,仅仅考虑图像样本之间像素的相似性,却没有考虑到图像作为二维的像素集合,其本身所具有的规律性。事实上,对于未加旋转的图像,由于图像的对称性与自相似性,我们可以将其看做是一个带噪声的低秩矩阵。当图像由端正发生旋转时,图像的对称性和规律性就会被破坏,也就是说各行像素间的线性相关性被破坏,因此矩阵的秩就会增加。
低秩纹理映射算法(Transform Invariant Low-rank Textures,TILT)是一种用低秩性与噪声的稀疏性进行低秩纹理恢复的算法。它的思想是通过几何变换τ把D所代表的图像区域校正成正则的区域,如具有横平竖直、对称等特性,这些特性可以通过低秩性来进行刻画。
-
规则化参数的选择
现在我们回过头来看看我们的目标函数:
ω ∗ = a r g min ω ∑ i L ( y i , f ( x i ; ω ) ) + λ Ω ( ω ) \omega^*=arg\min_\omega \sum_i L(y_i,f(x_i;\omega))+\lambda\Omega(\omega) ω∗=argωmini∑L(yi,f(xi;ω))+λΩ(ω)
里面除了loss和规则项两块外,还有一个参数λ。它也有个霸气的名字,叫hyper-parameters(超参)。你不要看它势单力薄的,它非常重要。它的取值很大时候会决定我们的模型的性能,事关模型生死。它主要是平衡loss和规则项这两项的,λ越大,就表示规则项要比模型训练误差更重要,也就是相比于要模型拟合我们的数据,我们更希望我们的模型能满足我们约束的Ω(w)的特性。反之亦然。举个极端情况,例如λ=0时,就没有后面那一项,代价函数的最小化全部取决于第一项,也就是集全力使得输出和期待输出差别最小,那什么时候差别最小啊,当然是我们的函数或者曲线可以经过所有的点了,这时候误差就接近0,也就是过拟合了。它可以复杂的代表或者记忆所有这些样本,但对于一个新来的样本泛化能力就不行了。毕竟新的样本会和训练样本有差别的嘛。那我们真正需要什么呢?我们希望我们的模型既可以拟合我们的数据,又具有我们约束它的特性。只有它们两者的完美结合,才能让我们的模型在我们的任务上发挥强大的性能。所以如何讨好它,是非常重要。在这点上,大家可能深有体会。还记得你复现了很多论文,然后复现出来的代码跑出来的准确率没有论文说的那么高,甚至还差之万里。这时候,你就会怀疑,到底是论文的问题,还是你实现的问题?实际上,除了这两个问题,我们还需要深入思考另一个问题:论文提出的模型是否具有hyper-parameters?论文给出了它们的实验取值了吗?经验取值还是经过交叉验证的取值?这个问题是逃不掉的,因为几乎任何一个问题或者模型都会具有hyper-parameters,只是有时候它是隐藏着的,你看不到而已,但一旦你发现了,证明你俩有缘,那请试着去修改下它吧,有可能有“奇迹”发生哦。
OK,回到问题本身。我们选择参数λ的目标是什么?我们希望模型的训练误差和泛化能力都很强。这时候,你有可能还反应过来,这不是说我们的泛化性能是我们的参数λ的函数吗?那我们为什么按优化那一套,选择能最大化泛化性能的λ呢?Oh,sorry to tell you that,因为泛化性能并不是λ的简单的函数!它具有很多的局部最大值!而且它的搜索空间很大。所以大家确定参数的时候,一是尝试很多的经验值,这和那些在这个领域摸爬打滚的大师是没得比的。当然了,对于某些模型,大师们也整理了些调参经验给我们。例如Hinton大哥的那篇A Practical Guide to Training RestrictedBoltzmann Machines等等。还有一种方法是通过分析我们的模型来选择。怎么做呢?就是在训练之前,我们大概计算下这时候的loss项的值是多少?Ω(w)的值是多少?然后针对他们的比例来确定我们的λ,这种启发式的方法会缩小我们的搜索空间。另外一种最常见的方法就是交叉验证Cross validation了。先把我们的训练数据库分成几份,然后取一部分做训练集,一部分做测试集,然后选择不同的λ用这个训练集来训练N个模型,然后用这个测试集来测试我们的模型,取N模型里面的测试误差最小对应的λ来作为我们最终的λ。如果我们的模型一次训练时间就很长了,那么很明显在有限的时间内,我们只能测试非常少的λ。例如假设我们的模型需要训练1天,这在深度学习里面是家常便饭了,然后我们有一个星期,那我们只能测试7个不同的λ。这就让你遇到最好的λ那是上辈子积下来的福气了。那有什么方法呢?两种:一是尽量测试7个比较靠谱的λ,或者说λ的搜索空间我们尽量广点,所以一般对λ的搜索空间的选择一般就是2的多少次方了,从-10到10啊什么的。但这种方法还是不大靠谱,最好的方法还是尽量让我们的模型训练的时间减少。例如假设我们优化了我们的模型训练,使得我们的训练时间减少到2个小时。那么一个星期我们就可以对模型训练7*24/2=84次,也就是说,我们可以在84个λ里面寻找最好的λ。这让你遇见最好的λ的概率就大多了吧。这就是为什么我们要选择优化也就是收敛速度快的算法,为什么要用GPU、多核、集群等来进行模型训练、为什么具有强大计算机资源的工业界能做很多学术界也做不了的事情(当然了,大数据也是一个原因)的原因了。
-
其他运用
-
低秩矩阵恢复应用
- 图像恢复
- 图像去光照影响恢复
- 视频背景建模
- 图像类别标签净化
- 文本主题分析
- 音乐词曲分离
- 图像矫正与去噪
- 图像对齐
-
低秩矩阵补全应用
- 智能推荐系统
- 电影去雨线处理
-
低秩矩阵表示应用
- 图像分割
- 显著性检测
参考
[2] 机器学习中的范数规则化之(二)核范数与规则项参数选择
[3] 矩阵低秩分解理论