上一周的数据学习,没有课件,老师直接开始从头推了一些神奇的东西出来。所以我也很难给这篇的内容起一个题目,因为是从X与Y之间的信息推导到SVD的,因此就这么叫吧。
## info shared Between X, Y ##
假如现在有两个离散变量,X与Y他们是一一对应的。在之前的机器学习问题中,我们知道X是输入数据,Y是标签。现在忘掉之前的学习算法,从信息的角度来看,我们希望做的,是提取X与Y之间的公共信息,而这部分才是它们有某种关系的真正原因。因此现在我们的目标变成,从X与Y的联合分布提取X与Y之前的公共信息,。
那么首先遇到的问题:我们是如何提取X和Y的各自的信息的?我们的做法是利用一个函数,就像linear
regression等学习算法一样,也就是: $$
X \rightarrow f(X) \rightarrow \mathbb{R}\\
Y \rightarrow g(Y) \rightarrow \mathbb{R}\\
$$
衡量它们之间的共同信息,我们使用一个比较熟悉的名词:相关系数。我们要做的就是找到合适的函数,让它们的共同信息最大,也就是相关系数达到最大(HGR
Maximal Correlation):
当然我们还有一些限制条件,才能让相关系数为上值。在概率论中我们知道,相关系数的求法:
所以可以看到的是,我们应该让 $$
\mathbb{E}[f(x) ] = \mathbb{E}[g(x) ] = 0,\\
\mathbb{E}[f^2(x) ] = \mathbb{E}[g^2(x) ] = 1
$$
这时候,.当时,说明二者独立(要注意,这并不意味着E(XY)
=
0说明X,Y独立,实际上相关系数为0才能证明二者独立,只不过我们这里加上了限制,使得)。
现在,用数学语言来描述这个问题:
为了方便后面的计算,我们要对原式进行一些转换:
上式中: $$
\Phi = \begin{bmatrix}
\phi(x_1),\phi(x_2),...,\phi(x_ {|X|})
\end{bmatrix}^T_ {|X|\times 1},\\
\Psi = \begin{bmatrix}
\psi(y_1),\psi(y_2),...,\psi(y_ {|Y|})
\end{bmatrix}^T_ {|Y|\times 1},\\
B_ {y,x} = \frac{p_ {XY}(x,y)}{\sqrt{p_X(x)p_Y(y)} },B_ {|Y| \times
|X|}.
$$
经过上面的转换,我们可以得到:
这时候我们的问题变成了:
而实际上,上面问题的解正是B矩阵的最大的奇异向量。 ## SVD ##
接下来,想提一下,什么是奇异值分解(Singular Value Decomposition):
其中的列向量为B的左右奇异向量。
而实际上,正是B矩阵对应的最大的奇异向量。但是显然,我们是不能让它们作为的值的,因为这个不满足约束(2):
$$
\langle\sqrt{P_X},\Phi\rangle = \langle\sqrt{P_X},\sqrt{P_X}\rangle = 1
\ne 0;\\
\langle\sqrt{P_Y},\Psi\rangle = \langle\sqrt{P_Y},\sqrt{P_Y}\rangle =1
\ne 0.
$$
不过,好的消息是,实际上正是第二大的奇异向量。可以看出来,不同奇异向量是互相正交的,这个和上次说的PCA非常像。实际上,PCA和SVD是有千丝万缕的关系的。
从上面的分析,我们可以直接得到: $$
f(x) = \frac{1}{\sqrt{p_X(x)} } \phi^*(x);\\
g(y) = \frac{1}{\sqrt{p_Y(y)} } \psi^*(y)
$$
那么接下来一个问题,如何直接从data中计算出来f,g?
想要解决上面的问题,首先考虑,如何计算B的奇异向量。有人说,matlab,
openCV. 这里介绍一个简单的算法:Power Iteration.
首先,我们要知道的是,实际上求奇异值分解,也就是在做PCA(求特征向量和特征值):
$$
B^TB = v \Sigma^T u^T u \Sigma v^T = v \Sigma^2 v^T,\\
BB^T = u \Sigma v^T v \Sigma^T u^T = u \Sigma^2 u^T
$$
这里提下特征向量分解(EVD):$X = v D v^T
vXDXX$为实对称矩阵。
所以可以不难得到,B的奇异向量,也就是与的特征向量,分别对应右侧的和左侧的奇异向量。
因此我们的问题变成了,如何求eigen vector?
Power Iteration
给定一个实对称矩阵M,假设,
则假设它的特征向量为,对应的特征值$_1,…,_n
$.
- 初始化得到一个向量,则.
- 迭代执行3,得到
最后这个算法收敛于最大的特征向量(前提是最大的特征值严格大于其他的特征值,并且初始向量在最大特征向量的方向上分量不为0,这两个条件都比较好满足)。
这个算法不难理解:
上式中,所以可以得到:
所以:
上面通过power iteration, 我们就得到了最大的特征向量。使用Gram
Schmidt
procedure,可以求得其他的特征向量。比较容易理解,找到一个已求向量垂直的向量进行Power
Iteration,就可以求得第二大特征向量,特征向量从大到小依次被求出。
现在我们考虑,如何得到B矩阵的第二大奇异向量。
- 选择
- ,
- 迭代第二步
实际上第二步做的就是:
也就是一直在利用Power
Iteration迭代求解与的特征向量.
但是这个如果对初始的值不加以限制,求得的应该是第一大特征向量。如果,则我们得到了第二大特征向量。
那么如何直接从数据求得f,g呢?终于到了终极问题。
上面有这么一个计算:,实际上拆开的话,每一行就是y固定之后的与相乘,我们记做:
从上面的推导中,我们得到:.
所以从原来的$ ^{(0)} = B^{(0)} g^{(0)} = [f^{(1)}(x) Y=y]$
ACE算法
- 选择(注意,这里,也就暗含了)
- 迭代2
最后f,g都会收敛到最佳的结果。
这个算法被称为ACE(Alternative Conditional
Expectation)算法,当然在实际过程中,我们可以每一步都进行normalize.
而第二步中,条件的x和y的值,有时候是随机选择,在数据量小的时候可以对所有的x和y都进行计算。
还有一点,如何计算?
其实很简单:首先从中提取出来,使得,然后: