这节课的题目是Deep learning,个人以为说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密。

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

近年来深度学习长足进步的原因有两个:

1)pre-training技术获得了发展

2)regularization的技术获得了发展

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

每过一个隐层,可以看做是做了一次对原始输入信息的转换。

什么是一个好的转换呢?就是因为这种转换而丢失较多的信息:即encoding之后,甚至可以用decoding的过程复原。

因此,在考虑deep NNet的参数学习的时候,如果在pre-training阶段采用类似autoencoding的方式,似乎是一个不错的选择。

如下,就是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的效果。

【Deep Learning】林轩田机器学习技法的更多相关文章

  1. 【Matrix Factorization】林轩田机器学习技法

    在NNet这个系列中讲了Matrix Factorization感觉上怪怪的,但是听完第一小节课程就明白了. 林首先介绍了机器学习里面比较困难的一种问题:categorical features 这种 ...

  2. 【Radial Basis Function Network】林轩田机器学习技法

    这节课主要讲述了RBF这类的神经网络+Kmeans聚类算法,以及二者的结合使用. 首先回归的了Gaussian SVM这个模型: 其中的Gaussian kernel又叫做Radial Basis F ...

  3. 【Neural Network】林轩田机器学习技法

    首先从单层神经网络开始介绍 最简单的单层神经网络可以看成是多个Perception的线性组合,这种简单的组合可以达到一些复杂的boundary. 比如,最简单的逻辑运算AND  OR NOT都可以由多 ...

  4. 【Random Forest】林轩田机器学习技法

    总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Fores ...

  5. 【Decision Tree】林轩田机器学习技法

    首先沿着上节课的AdaBoost-Stump的思路,介绍了Decision Tree的路数: AdaBoost和Decision Tree都是对弱分类器的组合: 1)AdaBoost是分类的时候,让所 ...

  6. 【Adaptive Boosting】林轩田机器学习技法

    首先用一个形象的例子来说明AdaBoost的过程: 1. 每次产生一个弱的分类器,把本轮错的样本增加权重丢入下一轮 2. 下一轮对上一轮分错的样本再加重学习,获得另一个弱分类器 经过T轮之后,学得了T ...

  7. 【Linear Support Vector Machine】林轩田机器学习技法

    首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下 ...

  8. 【Support Vector Regression】林轩田机器学习技法

    上节课讲了Kernel的技巧如何应用到Logistic Regression中.核心是L2 regularized的error形式的linear model是可以应用Kernel技巧的. 这一节,继续 ...

  9. 【Dual Support Vector Machine】林轩田机器学习技法

    这节课内容介绍了SVM的核心. 首先,既然SVM都可以转化为二次规划问题了,为啥还有有Dual啥的呢?原因如下: 如果x进行non-linear transform后,二次规划算法需要面对的是d`+1 ...

随机推荐

  1. list 用法的随手记

    在list 用法中.1. add是直接添加 一个变量.不能添加一个 集合元素,比如数组 这种写法是错误的 ,因为不能添加集合 这种写法是对的,因为直接添加元素 2. 但是addrannge 是添加一个 ...

  2. iterm2配置项

    1. 启动终端Terminal2. 进入当前用户的home目录    输入cd ~3. 创建.bash_profile    输入touch .bash_profile 在导入并应用完颜色方案之后,通 ...

  3. Windows核心编程-作业

    原文链接:http://zhujiangtao.com/?p=983 作业 作业 一个简单例程 CreateJobObject 创建作业 作业限制和 SetInformationJobObject A ...

  4. base64模块的使用及python中的使用

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2^=,所以每6个比特为一个单元,对应某个可打印字符.3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字 ...

  5. fcc初级算法方法总结

    var arr = str.split("分隔符"): var newArr = arr.reverse(); var str = arr.join("连接符" ...

  6. SqlServer 连接GreenPlum问题处理

    一.SQL SERVER.GREENPLUM 1. SSIS安装 ▶ 安装SQL SERVER 2005 数据库之后,运行SSIS工具,建立包,建立完成之后,新建工作流,双击工作流之后无法进行编辑,并 ...

  7. Javascript和HTML5的关系

    HTML5是一种新的技术,就目前而言,我们所知的HTML5都是一些标签,但是有了JS之后,这些标签深层的扩展功能才得以实现.       比如video标签,我们对其理解为一个简单的标签,但实际上,v ...

  8. BZOJ3669: [Noi2014]魔法森林(瓶颈生成树 LCT)

    Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 3558  Solved: 2283[Submit][Status][Discuss] Descript ...

  9. Java中堆、栈,静态方法和非静态方法的速度问题

           一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储 ...

  10. JS - 兼容的事件助手

    (function () { // 兼容的事件助手 window.CompatibleEventHelper = { addEventListener: function (elem, type, c ...