【Deep Learning】林轩田机器学习技法

这节课的题目是Deep learning,我的觉得说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密。php

林介绍了deep learning近年来受到了很大的关注:deep NNet概念很早就有,只是受限于硬件的计算能力和参数学习方法。html

近年来深度学习长足进步的缘由有两个:网络

1)pre-training技术得到了发展机器学习

2)regularization的技术得到了发展函数

接下来,林开始介绍autoencoder的motivation。学习

每过一个隐层,能够看作是作了一次对原始输入信息的转换。优化

什么是一个好的转换呢?就是由于这种转换而丢失较多的信息:即encoding以后,甚至能够用decoding的过程复原spa

所以,在考虑deep NNet的参数学习的时候,若是在pre-training阶段采用相似autoencoding的方式,彷佛是一个不错的选择。3d

以下,就是autoencoder的一个示例。简单来讲,就是通过以下的单层神经网络结构后,输出跟输出十分接近。日志

这种autoencoder对于机器学习来讲有什么做用呢?

1)对于supervised learning来讲:这种information-preserving NN的隐层结构+权重是一种对原始输入合理的转换,至关于在结构中学习了data的表达方式

2)对于unsupervised learning来讲:能够做为density estimation或outlier detection。这个地方没太理解清,可能仍是缺乏例子。

autoencoder能够当作是单层的NN,能够用backprop求解;这里须要多加入一个正则化条件,wij(1)=wji(2)

采用上述的basic autoencoder,能够做为Deep NNet的pre-training方式。

接下来,林开始关注Deep NNet的regularization的问题。

以前提到过的几种regularization方式均可以用(structural constraints、weight decay/elimination regularizers、early stopping),下面介绍一种新的regularization technique。

这种方式是:adding noise to data

简单来讲,在训练autoencoder的时候加入高斯噪声,喂进去的输出端仍是没有加入噪声的data;这样学出来的autoencoder就具有了抵抗noise的能力。

接下来,开始引入PCA相关的内容。

以前陈述的autoencoder能够归类到nonliner autoencoder(由于隐层输出须要通过tanh的操做,因此是nonlinear的)。

那么若是是linear autoencoder呢?(这里把隐层的bias单元去掉)

最后获得的linear autoencoder的表达式就是 :h(x)=WW'x

由此,能够写出来error function

这是一个关于W的4阶的多项式,analytic solution不太好整。

因而林给出了下面的一种求解思路:

上述的核心在于:WW'是实对称阵

实对称阵有以下的性质:(http://wenku.baidu.com/view/1470f0e8856a561252d36f5d.html)

咱们注意一下W这个矩阵:W是d×d'维度的矩阵;WW'是d×d维度的矩阵。

这里回顾一下矩阵的秩的性质:

所以,WW'的秩最大就是d'了(d表明数据的原始维度,d'表明隐层神经元的个数,通常d'<d)

WW'的秩最大是d'能获得这样的结论:WW'至多有d'个非零特征值→对角阵gamma对角线上最多有d'个非零元素

这里须要复习线性代数一个概念:

  若是矩阵能够对角化,那么非零特征值的个数就等于矩阵的秩;若是矩阵不能够对角化,那么这个结论就不必定成立了。

  这里咱们说的WW'是实对称阵,又由于实对称阵必定能够对角化,所以WW'的非零特征值特殊就等于矩阵的秩。

经过上述的内容,WW'x又能够当作是VgammaV'x:

1)V'x 能够当作是对原始输入rotate

2)gamma 能够当作是将0特征值的component的部分设成0,而且scale其他的部分

3)再转回来

所以,优化目标函数就出来了

这里能够不用管前面的V(这是正交变换的一个性质,正交变换不改变两个向量的内积,详情见https://zh.wikipedia.org/wiki/正交

这样一来,问题就简化了:令I-gamma生出不少0,利用gamma对角线元素的自由度,往gamma里面塞1,最多塞d'个1。剩下的事情交给V来搞定。

1)先把最小化转化为等价的最大化问题

2)用只有一个非零特征值的状况来考虑,Σv'xx'v  s.t. v'v=1

3)在上述最优化问题中,最好的v要知足error function和constraints在最优解的时候,他们的微分要平行。

4)再仔细观察下形式 Σxx'v = lambdav 这里的v不就是XX'的特征向量么

所以,最优化的v就是特征值最大的XX'的特征向量。须要降到多少维的,就取前多少个特征向量。

林最后提了一句PCA,其实就是在进行上述步骤以前先对各个维度的向量均值化:

下面说一下PCA。

http://blog.codinglabs.org/articles/pca-tutorial.html

上面这篇日志很是好,基本彻底解释了PCA的前因后果。

1)PCA的目的是对数据降维以后,还能尽可能保持数据原有的信息(分得开。。。方差大。。。)

2)若是对原始数据各个维度作均值化的操做以后,方差&协方差,只用一个矩阵就表示出来了。

上述这段话看明白了,PCA的核心就有了:巧妙地把原始输入数据各个维度均值化以后,方差和协方差都放到一个矩阵里了。

优化的目标是:方差要大,协方差要小;这样的优化目标就等价于把协方差矩阵对角化

实对称阵对角化是线性代数的基础知识:http://wenku.baidu.com/view/1470f0e8856a561252d36f5d.html

OK,PCA就大致上搞定了。

中途还看了stanford的http://ufldl.stanford.edu/wiki/index.php/PCA

脑子里冒出来一个想法:若是协方差矩阵是满秩的,而且不对数据降维,原来是多少维,仍是多少维,那么变换前和变换后有啥区别呢?

从式子上看,这种变化至关于把变换后的协方差矩阵搞成对角阵了。若是从几何上来看,比较下面两个图:

变换前:

变换后:

直观上看就是总体给“放平”了。

变化前:x1越大 x2也越大,反之亦然

变换后:因为给放平了,x1的大小与x2的大小不要紧了

所以,变换后这种放平就消除了x1和x2的相关性了,也就是协方差矩阵的非对角元素给搞成0的效果。

相关文章
相关标签/搜索