前言
几次接触机器学习的第一部分(像我背单词只记得abandoned一样),都会被线性模型中直接求解的这个正规方程(Normal Equation)搞得一头雾水,梯度下降还好理解些,但这个正规方程是真的一点头绪没有,西瓜书的周老师和统计学习方法的李老师都是传统的“抽象大师”,愚笨的我完全看不懂啊,在网上找到的博客也都是直接矩阵求导得到的,知其然不知其所以然。直到有一天突然遇到一个奇怪的老教师,仅仅用了不到一个小时就给我讲明白了,特来记录一下,也借此感谢这位奇怪但不失幽默的大师。
问题重述
我们有必要再回顾一下线性模型是解决什么问题:
问题的大意就是:如果给定某些确定的点,能否找到一个确定的线(hypothesis),把点连起来,使得这条线能过经过尽可能多的点。(以机器学习目标的角度来看,就是能否找到一个假设可以有更好的泛化性,对未知的x能预测出较为准确的y)
方法
当然,我们熟悉的就是最小二乘法,指定loss函数,然后使用梯度下降的方法,一次次更新参数,这个方法在吴恩达老师的视频里讲述的非常形象,这里不在赘述,主要想说一说另一种比较简单粗暴的“正规方程”做法。
这里我想先把正规方程放在这里,让大家有个印象,然后我们一步一步把它推出来:
Θ
=
(
X
T
X
)
−
1
X
T
y
\Theta = (X^TX)^{-1} X^Ty
Θ=(XTX)−1XTy
正规方程
线性方程组
我们不妨换一个角度思考这个问题,如果这些点本来就在一条直线上呢? 那这个问题就和解多元线性方程组没有任何差别了,每一个点都是一个方程,我们很容易求解出一个 X X X满足所有方程,而这个 X X X 在一维上,就是我们题设里面要求直线(hypothesis)的两个参数 w w w 和 b b b,同时呢,如果扩展到多维上,也不过是 X X X 变成多维向量,也一一对应着线性模型中的参数 w w w
问题所在
所以问题在哪呢?问题就是这些点不在一条直线上啊! 举一个简单的例子,考虑下面这三个点
(
1
,
1
)
(1,1)
(1,1)
(
2
,
2
)
(2,2)
(2,2)
(
3
,
2
)
(3,2)
(3,2):
假设我们要求解的直线为
y
=
b
+
w
x
y = b + wx
y=b+wx它们所对应的线性方程组
A
x
=
b
Ax =b
Ax=b(注意这里的b对应直线里面的y)是:
{
b
+
w
=
1
b
+
2
w
=
2
b
+
3
w
=
2
\begin{cases} b+w=1\\ b+2w = 2\\ b+3w=2\\ \end{cases}
⎩⎪⎨⎪⎧b+w=1b+2w=2b+3w=2
这里矩阵形式为:
A ∗ x = b [ 1 1 1 2 1 3 ] ∗ [ w b ] = [ 1 2 2 ] \begin{matrix} & A & * & x & = & b \\ & \begin{bmatrix}1&1\\ 1&2\\ 1&3\\\end{bmatrix} & * & \begin{bmatrix}w\\b\\\end{bmatrix} & = & \begin{bmatrix}1\\2\\2\\\end{bmatrix} \\ \end{matrix} A⎣⎡111123⎦⎤∗∗x[wb]==b⎣⎡122⎦⎤
我们可以很明显的看出,这个方程并没有解,因为这里有两个未知数,但是有三个方程,同时 b b b 不在 A A A的列向量空间。
这里稍微解释一下 矩阵的列向量空间的概念:
从理解上讲就是,矩阵
A
A
A的所有列的线性组合所构成的空间。以上面这里方程组为例,如果
A
A
A矩阵的第三行第二列是
2
2
2而不是
3
3
3的话,那么即使这个方程组有三个方程两个未知数,它也是有解的,因为
b
b
b在
A
A
A的列向量空间里,换句话说,就是可以通过对
A
A
A的列的线性组合得到b(
0
c
o
l
1
+
1
c
o
l
2
)
0col_1 + 1col_2)
0col1+1col2),如果再观察一下矩阵A的话,我们发现
A
A
A的第三行没有任何贡献,考量A的秩我们知道它的秩为
2
2
2,这里也能看出方程应该是有解的。
解决问题
我们发现了问题,线性方程组可能由于样例(方程数)过多而出现无解,我们这个时候要做的,就是找到一条误差最小的线,对应线性代数就是,找到一个
x
^
\hat{x}
x^,使得
A
x
^
=
p
A\hat{x} = p
Ax^=p得到的p与b最接近,从几何上讲,这个最接近就是投影的概念
因为
b
b
b不在A的列向量空间内,那我们就找
b
b
b在列向量空间上的投影
p
p
p,这个
p
p
p就是理论上最接近
b
b
b(误差最小)的那个值,满足我们的需求。
所以问题转化为,我们如何找到
b
b
b在
A
A
A的列空间上的投影
p
p
p,一旦找到这个
p
p
p,就只剩下解一个简单的方程组啦~
下面我们就来看看怎么找到一个向量在一个空间上的投影
一维投影
先来看看简单的
这里,我们要求的是向量b在向量a上投影p,这里,我们假设
p
=
x
a
(1)
p = xa\tag{1}
p=xa(1)
由于垂直,我们可以得到:
a
T
(
b
−
x
a
)
=
0
(2)
a^T(b-xa) = 0\tag{2}
aT(b−xa)=0(2)
化简:
x
a
T
a
=
a
T
b
(3)
xa^Ta=a^Tb\tag{3}
xaTa=aTb(3)
由于,
a
T
a
a^Ta
aTa是一个常数,把它放到右面:
x
=
a
T
b
a
T
a
(4)
x=\frac{a^Tb}{a^Ta}\tag{4}
x=aTaaTb(4)
推到这里是不是感觉和正规方程有那么点像了?哈哈,别着急,后面更像!
我们把公式4带入到1中,有:
p
=
a
a
T
b
a
T
a
(5)
p = a\frac{a^Tb}{a^Ta}\tag{5}
p=aaTaaTb(5)
我们稍微动一下括号的顺序,有:
p
=
a
a
T
a
T
a
b
(6)
p=\frac{aa^T}{a^Ta} b\tag{6}
p=aTaaaTb(6)
这里面这个比较厉害的
a
a
T
a
T
a
\frac{aa^T}{a^Ta}
aTaaaT,我们管它叫大P,或者是P矩阵,(perpendicular matrix),意思就是这个把这个矩阵乘到原矩阵上,我们就得到了对应的投影(projection)
p
=
P
b
p = Pb
p=Pb
这里我们可以注意到这个大P有许多有趣的性质,首先,它是一个秩为1的对称矩阵,其次,有 P 2 = P P^2 = P P2=P,几何意义上就是,如果我对一个b做两次投影,其实和我做一次的效果是一样的,想一想,经过一次就把他变到线上来了,再做投影,那不还是自己本身吗?
一维的情况看起来还不错,但是能不能推广到二维甚至多维上呢?当然可以!
二维投影
我们还是从一个例子入手,这里,平面A可以表示为它的两个基的列向量组合形式:
A
=
[
a
1
,
a
2
]
A= [a1, a2]
A=[a1,a2],我们想找到
b
b
b 在平面
A
A
A上的投影
p
p
p ,假设p是
(
a
1
,
a
2
)
(a1,a2)
(a1,a2)的线性组合:
p
=
x
1
^
a
1
+
x
2
^
a
2
(7)
p = \hat{x_1}a_1+\hat{x_2}a_2\tag{7}
p=x1^a1+x2^a2(7)
不妨简化成矩阵形式:
p
=
A
x
^
(8)
p=A\hat{x}\tag{8}
p=Ax^(8)
公式的推导仍然从垂直入手:
b
b
b的另一个分向量
e
=
b
−
p
e=b-p
e=b−p垂直于整个平面,所以,我们有:
{ a 1 ( b − A x ^ ) = 0 a 2 ( b − A x ^ ) = 0 (9) \begin{cases} a_1(b-A\hat{x}) = 0\\ a_2(b-A\hat{x})=0\\ \end{cases}\tag{9} {a1(b−Ax^)=0a2(b−Ax^)=0(9)
写成矩阵形式就是:
A
T
(
b
−
A
x
^
)
=
0
(10)
A^T(b-A\hat{x}) = 0\tag{10}
AT(b−Ax^)=0(10)
括号拆开:
A
T
A
x
^
=
A
T
b
(11)
A^TA\hat{x}=A^Tb\tag{11}
ATAx^=ATb(11)
两边同时乘
(
A
T
A
)
−
1
(A^TA)^{-1}
(ATA)−1,有:
x
^
=
(
A
T
A
)
−
1
A
T
b
(12)
\hat{x} = (A^TA)^{-1}A^Tb\tag{12}
x^=(ATA)−1ATb(12)
我们终于推出来啦(o゜▽゜)o☆,这个 x ^ \hat{x} x^ 就是正规方程里面的参数 Θ \Theta Θ ,就像我们之前说的,这个 x ^ \hat{x} x^ 就是对垂直于 b b b的 p p p的解,是最接近原解的那一个,也就是机器学习里面我们常说的,损失函数最小的那个hypothesis。
虽然方程推出来了,但是我们还差一步不是吗,我们的问题是找到那个二维(多维)里面的大P矩阵,把公式12带入8中,有:
p
=
A
(
A
T
A
)
−
1
A
T
b
(13)
p=A(A^TA)^{-1}A^Tb\tag{13}
p=A(ATA)−1ATb(13)
这样,我们就成功找到了大P的矩阵形式:
P
=
A
(
A
T
A
)
−
1
A
T
(14)
P=A(A^TA)^{-1}A^T\tag{14}
P=A(ATA)−1AT(14)
我们再来看一看一维大P的性质是否也保留了下来:
对称性:
P
T
=
(
A
(
A
T
A
)
−
1
A
T
)
T
=
A
(
A
T
A
)
−
1
A
T
=
P
(15)
P^T=(A(A^TA)^{-1}A^T)^T=A(A^TA)^{-1}A^T = P\tag{15}
PT=(A(ATA)−1AT)T=A(ATA)−1AT=P(15)
二次投影不变性
P
2
=
A
(
A
T
A
)
−
1
A
T
A
(
A
T
A
)
−
1
A
T
=
A
(
A
T
A
)
−
1
(
A
T
A
(
A
T
A
)
−
1
)
A
T
=
A
(
A
T
A
)
−
1
A
T
=
P
(16)
P^2=A(A^TA)^{-1}A^TA(A^TA)^{-1}A^T=A(A^TA)^{-1}(A^TA(A^TA)^{-1})A^T=A(A^TA)^{-1}A^T = P\tag{16}
P2=A(ATA)−1ATA(ATA)−1AT=A(ATA)−1(ATA(ATA)−1)AT=A(ATA)−1AT=P(16)
由此可见,大P的性质依旧。
奇怪的事情
我们最后再看一看这个大P,如果稍加推导:
P
=
A
(
A
T
A
)
−
1
A
T
=
A
A
−
1
(
A
T
)
−
1
A
T
=
I
(17)
P=A(A^TA)^{-1}A^T=AA^{-1}(A^T)^{-1}A^T\tag{17} = I
P=A(ATA)−1AT=AA−1(AT)−1AT=I(17)
我们搞了半天,搞出一个单位矩阵??? 聪明的你,能看出来,哪里出了问题吗?
经典的证明
最后放上一个找到的非常传统的,使用矩阵求导的证明过程(来源https://www.jianshu.com/p/2b6633bd4d47)
写在最后
相信熟悉的同学已经看出来了,这位奇怪而又不失幽默的大师,就是Gilbert Strang,《Introduction to Linear Algebra》的作者本尊,本来边听边玩听个乐呵的我突然看到老师的黑板上莫名奇妙的出现了正规方程,讲垂直讲到一半就把正规方程推出来了??当时那一瞬间给我的震惊不是言语所能描述的,赶紧把进度条拉到开始,认认真真又听了一遍,不由得又被老师引出最后结果的过程深深打动了,问题导向、由浅入深,太舒服了,感兴趣的同学一定要亲自去听一听这堂课,第一遍把弹幕关上,第二遍开开,和网友一起膜拜大师吧~
传送门