声明:该文章翻译自MIT出版的《DEEP LEARNING》,博主会定期更新文章内容。由于博主能力有限,中间有过错之处希望大家给予批评指正,一起学习交流。
为了进一步分析,我们必须替换g(c)的定义:
c∗=argminc−2xTDc+cTDTDc
=argminc−2xTDc+cTIlc
(对D施加正交和单位范数约束)=argminc−2xTDc+cTc
我们可以用矢量微积分解决这个最优化问题(该部分内容参见4.3):∇(−2xTDc+cTc)=0
−2DTx+2c=0
c=DTx(2.2)
这是一个好消息:我们可以只用一个矩阵向量操作来最优化编码x 。为了编码一个向量,我们应用编码函数:f(x)=DTx
进一步使用矩阵乘法,我们也可以定义PCA重构操作:r(x)=g(f(x))=DDTx
接下里,我们需要选择编码矩阵D。要做到这一点,我们需要回顾最小化输入和重构之间L2距离的想法。然而,因为我们使用相同的矩阵来解码所有点,我们就不能孤立考虑每个点。我们必须最小化误差矩阵的Frobenius范数:D∗=argminD∑i,j(x(i)j−r(x(i))j)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√其中DTD=Il(2.3)
为了导出寻找D∗的算法,我们先考虑l=1的情况。在这种情况下,D只是一个单一的矢量d。将2.2代入2.3,并将D化为 d d∗=argmind∑i||x(i)−ddTx(i)||22其中||d||2=1
上面是带入之后最直接的化简方式,但是对于写等式来说风格不悦目。它把标量放在了矢量的右边。而更方便的方式是将标量洗漱放在矢量的左边。因此,我们通常将等式写成下面的形式:d∗=argmin∑i||x(i)−dTx(i)d||22其中||d||2=1
或者,根据标量的转置等于本身d∗=argmin∑i||x(i)−x(i)dd||22其中||d||2=1
上面的方式使得我们能够用更紧凑的符号来表示。让X∈Rm×n表示所有用来描述点的向量所定义的矩阵,这样的话Xi,:=x(i)。我们现在将问题重写为:d∗=argmin||X−XddT||2F其中||d||2=1
暂时忽略限制,我们可以将Frobenius范数化为:argmin||X−XddT
=argminTr((X−XddT)T(X−XddT))
(Frobenius范数的另一种定义)=argminTr(XTX−XTXddT−ddTXTX+ddTXTXddT)
=argminTr(XT−Tr(XTXddT)−Tr(ddTXTX+Tr(ddTXTXddT)
=argmin−Tr(XTXddT)−Tr(ddTXTX+Tr(ddTXTXddT)
(因为第一项与d无关,不会影响最小化)=argmin−2Tr(XTXddT)+Tr(ddTXTXddT)
(因为在迹中我们可以循环矩阵的顺序)=argmin−2Tr(XTXddT)+Tr(XTXddTddT)
(同样利用上面的性质)。现在,加上限制:=argmin−2Tr(XTXddT)+Tr(XTXddTddT)其中||d||2=1
=argmin−2Tr(XTXddT)+Tr(XTXddT)其中||d||2=1
(由于限制条件)=argmin−Tr(XTXddT)其中||d||2=1
=argmaxTr(XTXddT)其中||d||2=1
=argmaxTr(dTXTXd)其中||d||2=1
这个最优化问题可以用特征分解解决。特别地,最优解d由XTX对应于最大特征值的特征向量给出。
对于一般情况l>1,D由对应于最大特征值的l特征向量给出。这个可以用归纳法证明。