Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(十八):神经网络

前馈神经网,BP算法,AE(自编码器,Auto-Encoders)

1. 前馈神经网(Multilayer Feedforward Network)

fig 12.8

前馈神经网大致就是这个样子,一层一层的结构。这样,我们就由第一代的神经元系统繁殖出来了一个神经元群落...看起来很高深的样子。

先说一些参数和记号:

  • L:网络的层次
  • :表示第层中神经元的个数。特别的,为所有输入变量的个数(x的维数),是网络输出的个数。
  • :相邻两层()之间的连接的权重。
  • :第层第个神经元的偏置值。
  • ,,:第层第个神经元的状态值。
  • ,,:第层第个神经元的活性(activation),或称为输出。

基本关系:

模型:的映射。

2. BP算法(网络学习/拟合)

给定数据,定义

那么

接下来的拟合优化问题就是最小化。这里可以采用梯度下降:

,所以需要求得这两个梯度(偏导)项。

定义,这样,其中

类似的,

为了解这个东西,我们需要后向递归。

首先在第L层:,然后

For L-1,...,1,我们有,这样就一直可以迭代反推至第一层。

3. AE(自编码器,Auto-Encoders)

auto-encoder

自编码器可以算是一个简化的神经网,大致只有三层:0,1,2。其中输入是x,输出也是x,但是中间进行了一个过滤。直观的讲,就像一个文件压缩了一下,又解压缩。中间压缩包的体积要比源文件小,但是信息却基本没有损失。

AE基本上想达到两个目标:

1. ,即中间那层的维数小于原始输入的维数p。

2. 或者输出的均值非常小,即从第一层到最上面一层的输出较为稀疏,不是很强烈的关联。

下节课会讲到SVM。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(十七):神经网络

神经网络,这是要开始Deep Learning了么?

神经网络的历史和大起大落还是可以八卦一下的...

第一波:人工神经网络起源于上世纪40年代,到今天已经70年历史了。第一个神经元模型是1943年McCulloch和Pitts提出的,称为thresholdlogic,它可以实现一些逻辑运算的功能。自此以后,神经网络的研究分化为两个方向,一个专注于生物信息处理的过程,称为生物神经网络;一个专注于工程应用,称为人工神经网络。

第二波:上世纪80年代神经网络的研究热潮。带反馈的神经网络开始兴起,其中以Stephen Grossberg和John Hopfield的工作最具代表性。很多复杂的认知现象比如联想记忆都可以用反馈神经网络进行模拟和解释。一位在神经网络领域非常资深的学者跟我聊天时说,在那个年代,只要你的文章跟神经网络扯上点关系,无论什么杂志,都很容易发表。

第三波:直到2006年深度网络(deep network)和深度学习(deep learning)概念的提出,神经网络又开始焕发一轮新的生命。深度网络,从字面上理解就是深层次的神经网络。至于为什么不沿用以前的术语“多层神经网络”,个人猜测可能是为了与以前的神经网络相区分,表示这是一个新的概念。这个名词由多伦多大学的GeoffHinton研究组于2006年创造。事实上,Hinton研究组提出的这个深度网络从结构上讲与传统的多层感知机没有什么不同,并且在做有监督学习时算法也是一样的。唯一的不同是这个网络在做有监督学习前要先做非监督学习,然后将非监督学习学到的权值当作有监督学习的初值进行训练。

上述来自:http://www.caai.cn/contents/118/1934.html

有没有感觉最近deep learning热得一塌糊涂?好像是个人都知道有这么个词儿但是真正知道他干什么的、怎么来的的人却不怎么多。嗯,貌似从这节课开始,要掀起deep

learning的篇章咯。顿时感觉好洋气哇。

----------正文的分割线-----------

这节课先介绍七十多年前的Perceptron模型。

1. 神经元

大致就是这样一张图片。神经元细胞有个大大的细胞核,然后有个轴突。如果神经元细胞拼在一起,可以构成一个神经网络。

perceptron

(我觉得这个细胞模型和后面的东西其实没太直接的联系...就是一个很好看的图...)

2. Perceptron模型

Perceptron模型有若干输入:,标记为序列。

每个输入都有一个权重(某种程度上可以理解为信息损失):,标记为序列。

最后每个“细胞”还有一个偏(门限):b,即我们常说的常数项截距。

最终的状态:

输出:,比较简单的情况下,可以是一个二元输出函数,比如或者写作。但是比较讨厌的是这个函数不可微,所以我们可以转成一个可微的函数(有点类似logistic regression的思路,用概率的密度函数来做)。

sigmoid

可微的情况下,这个输出就是:,这样就可以做成一个光滑的曲线了。

3. Perceptron算法

给定一批数据, 我们希望求得使得,如果;否则,(即

算法:先是我们可以不断重复的无限复制数据:

然后初始化:,

开始循环:

For

IF ,then

定理 如果存在w使得成立(即平面线性可分),则Perceptron算法在有限步收敛。

证明:

  • (仅计算改过的)
  • 存在使得,那么我们有,同时我们有这样就会有,当k趋近无穷大的时候,显然左式不成立。所以必有在某个k的时候停止迭代。

4. 推广至多类——Collins算法(2002)

(1) Collins表述

给定 ,求w使得,除了外最大。这样

(2)算法:,

初始化:,.

For

计算

输出:

(3)定理。若为线性平面可分,则在有限步内收敛。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(十六)

第十五章 随机森林(Random Forest)

终于讲到这个神奇的算法了...若是百年前的算命术士们知道有此等高深之术,怕是要写成一本《随机真经》作为武林宝典世代相传了吧?猜得准才是王道嘛。

p.s. 以前没看过的童鞋不要急,这节课只是从boosting直接跳讲到十五章,并不是已经快结课啦。

---------------

1.定义和算法

算法:

  • 1. For b = 1 to B
    • 生成一个自生样本(via bootstrap)
    • 生成树:
      • 随机选取m()个变量(相应的,取了m维子集)。一切的神奇都在于这里是随机降维的。
      • 生成树
  • 输出(即森林)。

随机森林算法的参数主要就是决策树的参数,用来控制树的生长的:保证每个叶子中的实例数不大于

应用

1) 回归 在回归的情况下采取均值,最终输出的就是.

2) 分类 分类的情况下进行投票,,得票最多的那类获胜。

参数

总结的来看,参数主要有如下几个:

  • B:试验次数。一般为几百到几千,所以是computational intensive.
  • m:降维的力度。作者建议回归的情况下采用,然后分类的情况下采用
  • :建议回归的时候设为5,分类的时候设为1(彻底分到底)

伪代码

其实上面已经写的比较清楚了...我只是再抄个伪代码过来而已。

select m variables at random out of the M variables

For j = 1 .. m

If j'th attribute is categorical

(see Information Gain)

Else (j'th attribute is real-valued)

(see Information Gain)

Let (this is the splitting attribute we'll

use)

If j{*} is categorical then

For each value v of the j'th attribute

Let = subset of rows of X in which . Let

= corresponding subset of Y

Let = LearnUnprunedTree

Return a decision tree node, splitting on j'th attribute. The number

of children equals the number of values of the j'th attribute, and

the v'th child is Childv

Else j{*} is real-valued and let t be the best split threshold

Let = subset of rows of X in which . Let

= corresponding subset of Y

Let = LearnUnprunedTree

Let = subset of rows of X in which . Let =

corresponding subset of Y

Let = LearnUnprunedTree

Return a decision tree node, splitting on j'th attribute. It has two

children corresponding to whether the j'th attribute is above or below

the given threshold.

2. 为什么要“随机”

bootstrap:通过多次重抽样减小误差。

考虑下面的情况:

1) 为随机变量,且,

(i)当相互独立的时候,,且

(ii)当相互不独立的时候,我们有。这样接下来就有

如斯,仅使用bootstrap的话压缩的是方差的第二部分,而随机选的的M可以减小样本之间的相关性,从而减少不同树之间的相关性。

2)OOB(out of bag)实例

OOB的概率:。这样就是说,在一次抽样中约有1/3的样本没有被抽到。

两次bootstrap抽样的话,样本约有40%的重叠,这样的重叠概率会影响到上面的(ii)中,两次抽样得到的样本重叠很高,相互不独立。

这样我们用67%的样本训练数据,用剩下33%来测试。

3. 其他应用

1)变量的重要性(feature selection,俗称的特征选择)

第一种方法可以和上节课梯度树那里的一样,用来刻画变量的重要性。

第二种方法则是比较有意思。对于一棵树,我们用OOB样本可以得到测试误差1。

OOB样本大概长成这个样子:

,样本量足够大的情况下

然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。当然这里loss function可以自己定。这里的大致思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要。(典型的实用主义啊!管用才是真,才不管他什么证明不证明呢!自从开始接触机器学习的这些算法,我真的是被他们的各种天真烂漫的想法打败的一塌糊涂,只要直觉上过得去、实际效果看起来比较好就可以了呢,规则真简单)。

2) 相似图(proximity plots)

除了用户变量选择之外,Random Forest也可以给出各个观测实例之间的相似度。

Proximity plots记作在一个叶子结点同时出现的次数,其实大致就是一个相关性矩阵的样子。思想其实就是,如果两个观测样本之间比较相关,他们在树分枝的过程中就比较难以分开,所以会经常一起出现。我们故而可以用一起出现的次数给这种相似程度打分。

树类算法

至此,我们大概一口气过掉了所有跟树相关的算法。

先是单一的决策树,然后是基于已有弱分类器的改良算法,比如梯度树,然后就是和梯度树不相伯仲的随机森林。我感觉随机森林真的是起了一个好名字,在我没学机器学习之前就听到无数人跟我说起随机森林,而梯度树却只是正儿八经开始看了才记住的名字...

下下周开始,会依次讲到神经网络和SVM...看来supervised learning就快拉上帷幕咯。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(十)

一个东西写到10,总会多少有点成就感...只是不知道已经磨掉了多少人的耐心了呢?

此外这节公式密集,大家看着办吧...

-----------笔记开始------------

继续上一讲,先说说EM算法。

MM、EM和GMM

1. MM(混合模型)

(1) 定义:,其中,构成一个离散分布。同时有,且

(2) 隐变量

我们有数据,同时依据条件概率分布,有。记,则,其中

则有为x的边际分布。

(3) GMM(正态混合模型)

,我们有,且

(4) 对数似然函数和最大似然估计

对数似然函数写为。则我们要求的就是,其中

2. EM算法 (expectation maximum,期望最大方法)

(1) 迭代方法: 给定起始值,迭代出。那么问题就是,如何在已知的情况下,求

(2) E1步:求。函数形式已知,故可以求各种条件概率什么的。所以有:

E2步:计算,由于函数形式已知,我们可以计算并将移出来,所以换成线性形式。

(3) M步:求,这样就完成了迭代。需要证明的性质是:随着迭代,越来越大,且收敛。

(4) 定理:

证明:

其中,且,定义为两分布的KL距离。

所以,且。而由M步,,故有

在GMM的情况下,应用EM算法,则有:

(1) E1步:,可以直接计算。

(2) E2步:

(3) M步:注意有约束条件,所以使用拉格朗日乘子法:

,故有一阶条件:。从而,其中

还有一阶条件:,得到

最后,,有

对GMM而言,E步和M步在k=2的时候,求解过程可参见书上。

第七章:模型评估与选择

1. 概念: 我们有数据集,函数族和损失函数,这样得到最优的,然后求得

(有监督的学习)。之后就是对模型进行评估:的精度如何(使用测试集)?模型的选择就是的选择,使得测试误差比较小。

2. 方法:

(1) 数据充分:分成三块,1/2用来训练(train),1/4用来检验(validation),1/4用来测试(test)。其中validation

的概念是,在中,加入J函数来考虑函数族的复杂度,以避免过拟合。而validation就是来调正和选择这里的,再用train和validation重新训练模型。

最后,用test数据集,测试并且评估测试误差。

(2) 数据不充分:一种是cross-validation,分成k(比如5-10)份,极端的就是K=N,ave-win-out;另一种是bootstrap,后续章节详述。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(二)

继续一周一次的课堂笔记 昨天去晚了站着听讲,感觉好好啊,注意各种集中。想想整个教室里面就是我和老师是站着的,自豪感油然而生。

第二次课讲的东西依旧比较简单,是这本书第二章的前半部分。作为一个好久之前已经预习过的孩子,我表示万分的得意(最小二乘法难道不是三四年前就学过的?话说以后我再面人的时候,就让他推导最小二乘估计量,嘻嘻...考验一下基本功)。

------------原谅我的废话,笔记开始------------

简单预测方法:最小二乘法(以下沿用计量经济学的习惯,简称OLS)

OLS实在是太普遍了,我就不赘述细节了。OLS的思想就是,基于已有的样本信息,找出一条直线,让预测值与真实值之间的残差平方和最小,即最小。其中,为真实的样本观测值(已有样本),而是OLS的预测值。用图来讲的话,X为一维向量的时候,就是用一条直线来最好的拟合各个样本点。

这里就很明显了,首先OLS假设是一条直线。那么就是一个参数模型,即我们需要假设一个未知的参数,构成一个线性方程,然后再去估计的值。然后呢,直线会有很多条,所以我们要找到一个目标——比如这里,就是最小化残差平方和RSS。换言之,我们寻找的就是最优的向量使得RSS最小。

解这个最优化问题很简单,我就不重复了。最后解得的最优估计量为:

这里写成矩阵形式,比较简单。X为一维向量的时候,可以改写成形式,我个人不大喜欢,就不展开了。

简单预测方法:K近邻(k nearest neighbor)

K近邻的思想就更简单了。不就是想预测某个点x对应的y么?那么就把它的邻居都找来,平均一下好了。不是有句话叫做什么“一个人的收入就大概是他的圈子收入的平均值么?”

所以 ,这里表示点x的K近邻。至于这个近邻怎么定义嘛,嘻嘻,很简单啊,欧几里德距离就可以嘛~

评语:吴老师对于这两个算法的直观评价是,OLS呢就是勤奋的学生,预测前先做足功课,预测的时候只要知道X,噼里啪啦一下子y就估计出来了。然而knn则是一个临时抱佛脚的学生,预测的时候开始找自己的k近邻,然后把它们平均一下就好了。哈哈,大意如此,大家可以体会一下这种精神。我个人感觉呢,OLS属于以不变应万变的,而knn则是见机行事的。

统计决策理论(Statistical Decision Theory)

说了这么多,这个模型好不好到底怎么判读呢?凡事总得有个标准呢。这一系列的标准或者说准则,就是统计决策理论了。

首先呢,大致我们需要对X,Y有个分布上的描述:用记作向量的联合分布,然后为其对应的密度函数。之后为了估计Y,我们会有很多很多模型,即各种,而这些组成的函数空间记为

然后我们定义一个损失函数,比如在均方误差意义下,,这样就有了一个选择的标准——使得损失函数的期望最小:。接下来就是,到底在空间里面,哪一个最符合这个标准呢?

首先自然是把联合分布变为条件分布。这个idea显而易见——我们总是知道X的(原谅我吧,全中文确实比较难写,偶尔穿插英文一下 ^_^)。所以conditional on X,我们就有了

去解最小化问题,最终我们得到的就是在每个点X上, 。通俗的讲就是,对于每个点预测,把和它X向量取值一样的样本点都找出来,然后取他们的平均值就可以了。很直观的不是么?这里也有点最大似然的想法呢——比如预测一个男孩的身高,最保险的就是把和它同龄的其他男孩的身高平均一下,不是么?

但是说来简单啊,很多时候都是未知的,根本无法计算嘛。所以只能近似:

  • 回忆一下knn,就是放松了两点:1) 取的是x的近邻,而不一定是x; 2)用样本平均数代替了期望
  • 而OLS呢,也是最后在这里,用样本平均代替了期望。

近似嘛,自然有好的近似和不好的近似。很显然的,当样本比较大、尤其是比较密集的时候,x的邻居应该都离x很近,所以这个误差可以减小;此外,当样本很大的时候,根据大数定律,平均数收敛于期望。所以,这两种算法应该说,都在大样本下会有更好的效果。

模型选择、训练误差与测试误差、过拟合

这里讲的比较简单。模型选择就是的选择,即选择哪一类函数空间,然后再其中找/估计最优的。很显然,如果只有若干个有限的样本,我们总能把各个样本用直线或者曲线依次连起来,这样的话就有无数个f可以作为此问题的解。显然这不是我们想要的——这样的称为“不设定问题”,即可能无解、可能多个解、还可能因为一点点X的变化导致整个解的解答变化。因此我们需要先设定一个解的类别。

训练误差:预测模型估计值与训练数据集之间的误差。RSS就是一个典型的训练误差组成的残差平方和。

测试误差:用训练集以外的测试数据集带来的误差,显然我们更关心的是测试误差——训练总能训练的很好,让损失函数期望最小,然而测试集则不一定这样。一般说来,测试误差>训练误差。

过拟合:选择一个很复杂的f,使得训练误差很小,而实际的测试误差不一定小。最极端的就是刚才说的,把训练集的点一个个依次连起来...训练误差肯定是0是不是?

我们关心的自然是怎么降低测试误差。显然这东西会跟训练误差有关,但是它还跟f的复杂度有关。最最棘手的就是,f的复杂度是一个难以衡量的问题。早期的研究有用自由度来衡量这个复杂度的,但是也不是那么的靠谱...后面的有人鼓捣出来PAC(使得近似正确的概率最大——吴老师原话),还有一个VC来衡量复杂度——但几乎实践中无法计算,没几个计算出来的。嗯,水很深哇。