声明:该文章翻译自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 <script type="math/tex" id="MathJax-Element-30180">l</script>特征向量给出。这个可以用归纳法证明。