前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习系列笔记(三)

深度学习系列笔记(三)

作者头像
Marigold
发布2022-06-17 14:10:35
4590
发布2022-06-17 14:10:35
举报
文章被收录于专栏:MarigoldMarigold

深度学习系列笔记(三)

主成分分析(principal components analysis, PCA)

主成分分析是一个简单的机器学习算法,可以通过基础的线性代数知识推导。

假设在R^n空间中有m个点

,我们希望对这些点进行有损压缩。我们希望损失的精度尽可能少。

编码这些点的一种方式是用低维表示。对于每个点x^{(i)} \in R^n,会有一个对应的编码向量c^{(i)}\in R^l.如果ln小,那么我们便使用了更小的内存来存储原来的数据。我们希望找到一个编码函数,根据输入返回编码,f(x)=c,我们也希望找到一个解码函数,给定编码重构输入x \approx g(f(x))

PCA由我们选择的解码函数来决定。具体来讲,为了简化编码器,我们使用矩阵乘法将编码映射回R^n,即g(c)=Dc,其中D \in R^{n \times l}是定义解码的矩阵。

为了使问题有唯一解,我们限制D中所有的列向量都有单位范数。为了使编码问题简单一些,PCA限制D的列向量彼此正交。

衡量最优编码的一种方式:解码之后的向量和输入的向量之间的距离最小,可以使用范数来衡量他们之间的距离。在PCA算法中,我们使用L^2范数。

c^* = \arg \min\limits_c \begin{Vmatrix} x-g(c) \end{Vmatrix}_2​。我们可以使用平方L^2​范数替代L^2​方范数,因为两者在相同的值c上取得最小值,由于L^2范数非负,而平方L^2范数在非负值上单调递增。

c^* = \arg \min\limits_c \begin{Vmatrix} x-g(c) \end{Vmatrix}_2^2 最小化函数简化之后得

(x-g(c))^T(x-g(c)) 使用分配律

x^Tx-x^Tg(c)-g(c)^Tx+g(c)^Tg(c) 由于标量g(c)^Tx​的转置等于自己,所以得

x^Tx-2x^Tg(c)+g(c)^Tg(c)​​ ,第一项不依赖于c,忽略,得到优化目标:

c^* = \arg \min\limits_c -2x^Tg(c)+g(c)^Tg(c)​ ,代入g(c)的定义

c^* = \arg \min\limits_c -2x^TDc+c^TD^TDc ,由D的正交性和单位范数约束得:

c^* = \arg \min\limits_c -2x^TDc+c^TI_lc = \arg \min\limits_c -2x^TDc+c^Tc ,通过向量微积分求解这个最优化问题 :::hljs-center \bigtriangledown _c(-2x^TDc+c^Tc)

-2D^Tx+2c=0

c=D^Tx :::

这使得算法很高效:最优编码x只需要一个矩阵向量乘法操作,为了编码向量我们使用编码函数 f(x)=D^Tx,进一步使用矩阵乘法我们也可以定义PCA重构操作:r(x)=g(f(x))=DD^Tx

那么如何挑选编码矩阵D?前面我们说,要想得到最优编码,那么输入x和重构编码输出g(c^*)L^2距离要最小。因为用相同的矩阵D对所有点进行解码,我们不能再孤立地看待每个点。反之,我们必须最小化所有维数和所有点上的误差矩阵的Frobenius范数:

D^* = \arg \min\limits_D \sqrt{\sum\limits_{i,j}( x_j^{(i)} - r(x^{(i)})_j)^2}subjecttoD^TD=I_l,为了推导用于寻求D^*的算法,我们首先考虑l=1的情况。在这这种情况下,D是一个单一向量d,将r(x)代入上式,简化Dd得:d^* = \arg \min\limits_d \sum\limits_i \begin{Vmatrix} x^{(i)} - dd^Tx^{(i)} \end{Vmatrix}_2^2 subject to \begin{Vmatrix} d \end{Vmatrix}_2=1,上述公式不美观,我们通常将标量写在向量左边得:

d^* = \arg \min\limits_d \sum\limits_i \begin{Vmatrix} x^{(i)} - d^Tx^{(i)}d \end{Vmatrix}_2^2subjectto\begin{Vmatrix} d \end{Vmatrix}_2=1 ,或者,考虑到标量的转置和自身相等也可以写作:

d^* = \arg \min\limits_d \sum\limits_i \begin{Vmatrix} x^{(i)} - {x^{(i)}}^Tdd \end{Vmatrix}_2^2 subject to \begin{Vmatrix} d \end{Vmatrix}2=1 。将表示个点的向量堆叠成一个矩阵,记为X \in R^{m \times n},其中X{i,:}={x^{(i)}}^T。得:

d^* = \arg \min\limits_d \begin{Vmatrix} X - X^Tdd^T \end{Vmatrix}_F^2​​​ subject​​​ to​​​ d^Td =1​​ 。 ​​​先不考虑约束,将Frobenius范数简化为下面的形式:

\arg \min\limits_d \begin{Vmatrix} X - X^Tdd^T \end{Vmatrix}_F^2

= \arg \min\limits_d Tr\big((X-Xdd^T)^T(X-Xdd^T\big)

= \arg \min\limits_d Tr(X^TX-X^TXdd^T-dd^TX^TX+dd^TX^TXdd^T)

=\arg \min\limits_d Tr(X^TX)-Tr(X^TXdd^T)-Tr(dd^TX^TX)+Tr(dd^TX^TXdd^T)

=\arg \min\limits_d -Tr(X^TXdd^T)-Tr(dd^TX^TX)+Tr(dd^TX^TXdd^T) 因为与d无关的项不影响 \arg \min

=\arg \min\limits_d -2Tr(X^TXdd^T)+Tr(dd^TX^TXdd^T)​​ 因为循环改变迹运算中相乘矩阵的顺序不影响结果

=\arg \min\limits_d -2Tr(X^TXdd^T)+Tr(X^TXdd^Tdd^T)​​ 再次使用上述性质

再考虑约束条件:

\arg \min\limits_d -2Tr(X^TXdd^T)+Tr(X^TXdd^Tdd^T)subjecttod^Td =1

=\arg \min\limits_d -2Tr(X^TXdd^T)+Tr(X^TXdd^T)subjecttod^Td =1

=\arg \min\limits_d -Tr(X^TXdd^T)subjecttod^Td =1

=\arg \max\limits_d Tr(X^TXdd^T)subjecttod^Td =1

=\arg \max\limits_d Tr(d^TX^TXd) subject to d^Td =1

这个最优化问题可以通过特征分解来求解。具体来讲,最优的dX^TX最大特征值对应的特征向量。

以上推导特定于l=1的情况,仅得到了第一个主成分。更一般地,当我们希望得到主成分的基时,矩阵D由前l个最大的特征值对应的特征向量组成。

参考文献: 《深度学习》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深度学习系列笔记(三)
    • 主成分分析(principal components analysis, PCA)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档