假设我们有个维数据点,
因为一些原因,现在需要对其进行有损压缩。
对每个维数据点,在维空间中找到一个数据点作为其压缩结果
将压缩为的过程称为编码,从重新构造出的过程称为解码
因为两个过程实际上都能用矩阵乘法表示,我们将解码过程表示为
\begin{align} x=Dc \end{align}
上式中,是一个行列的矩阵
- 由于放大的值,缩小的值,上式仍然成立,为了使结果唯一,令的所有列向量均为单位向量
- 为了使解码空间(的列空间)能够覆盖整个维空间,令的个列向量互相正交
上两个约束的公式化表述是
由解码过程不难推出编码过程就是
\begin{align} c=D^Tx \end{align}
经过编码再解码的结果
我们的优化目标就是最小化与的差距,最优值的公式化表述如下
\begin{align} & D^* = \mathop{argmin}_D\sum_{i}||x^{(i)}-DD^Tx^{(i)}||^2_2 \\ & s.t. \quad D^TD=I_l \end{align}
为一个行列的矩阵,第个行向量表示
使用,式子可化简为
\begin{align} & D^* = \mathop{argmin}_D||X-XDD^T||^2_F \\ & s.t. \quad D^TD=I_l \end{align}
F表示Frobenius范数
继续化简
\begin{align} D^* &= \mathop{argmin}_D||X-XDD^T||^2_F \\ &= \mathop{argmin}_DTr\left((X-XDD^T)^T(X-XDD^T)\right) \\ &= \mathop{argmin}_DTr\left((X^T-DD^TX^T)(X-XDD^T)\right) \\ &= \mathop{argmin}_DTr\left( X^TX-X^TXDD^T-DD^TX^TX+DD^TX^TXDD^T \right) \\ &= \mathop{argmin}_DTr\left( -X^TXDD^T-DD^TX^TX+DD^TX^TXDD^T \right) \\ &= \mathop{argmin}_D -Tr(X^TXDD^T)-Tr(DD^TX^TX)+Tr(DD^TX^TXDD^T) \\ &= \mathop{argmin}_D -2Tr(X^TXDD^T)+Tr(X^TXDD^TDD^T) \\ &= \mathop{argmin}_D -2Tr(X^TXDD^T)+Tr(X^TXDD^T) \\ &= \mathop{argmin}_D -Tr(X^TXDD^T) \\ &= \mathop{argmax}_D Tr(D^TX^TXD) \\ \end{align}
于是,优化目标变为
\begin{align} & D^* = \mathop{argmax}_D Tr(D^TX^TXD) \\ & s.t. \quad D^TD=I_l \end{align}
将特征分解,有
\begin{align} X^TX= V \Lambda V^{-1} \end{align}
\begin{align} V &= \begin{bmatrix} v_1 & v_2 & … & v_n \end{bmatrix} \\ \Lambda &= \begin{bmatrix} \lambda_1 & 0 & … & 0 \\ 0 & \lambda_2 & … & 0 \\ … & … & … & … \\ 0 & 0 & 0 & \lambda_n \end{bmatrix} \end{align}
表示特征向量,且保证是单位向量,此外
优化目标变为
\begin{align} & D^* = \mathop{argmax}_D Tr(D^TV\Lambda V^{-1}D) \\ & s.t. \quad D^TD=I_l \end{align}
最优解可直接得到
\begin{align} D = \begin{bmatrix} v_1 & v_2 & … & v_l \end{bmatrix} \end{align}