《统计学习方法》阅读笔记及代码实现-Ch2

0. 前言

寒假参加夏令营的时候,老师就说过深度学习其实最开始的原型就是感知机,不过是多加了一些层而已。虽然不知道多加了几层为什么work,但是它的效果就是比传统的可证明的方法来的好,这也掀起了如今的AI狂潮 + 深度学习遍地走,你如果不会点机器学习算法,估计是招不到研究生的(玩笑话..并且机器学习也只是一种工具而已,没有那么玄乎其神)。一定要好好的钻研最经典的算法,从中汲取到养分,才能拥有核心的竞争力。在知乎上看到有关AI热的讨论,我也想说说我的理解:AI现在逐渐沦陷为一种劳动密集型产业,大部分的”调参专家“处于最底层,他们不清楚这样调参为什么work,为什么improve,但是他们总是能在结果看起来更好的时候编造一个像样的理由(私以为神经网络,深度学习等等的取名也是这样,以脑神经网络的来强行解释这个模型)。随着时代的发展,他们也是并不可少的一类人群,AI会不会凉我不知道,但是历史的浪潮会把有真才实学的人群推到最耀眼的地方,以上。之前和天凡聊天他也说过在焦虑夏令营和老师套磁的事情,做CV还是NLP,过了几天(据说是经过赵神和想神的洗脑),他近乎是用吼出来的对我说了句:"AI已死,系统当立",今天和赵神聊了聊他也说分布式好,哎我现在倒是想的很简单,经过了数学建模的洗礼,我总觉得数据科学是一类非常实用的学科,掌握数据挖掘的一些工具总是没错的,我也不确定自己做不做学术已经能不能做学术,但是踏踏实实地推些公式,学点技能点总是没错的,最近的事情还是很烦心,俱乐部招新的宣传工作又得我来操办了,该死,又给自己揽了不少锅,又有预备党员需要写的学习心得,还有周末的一个去玩的小比赛,今天上嵌入式的课也是完全一头雾水,下来得补补课,学术图谱的代码还没调通,老师想要的demo我可能还做不出来...每天还困得不行,晚上还上闲鱼淘点生产力工具(主机键盘surface),大学生活真是充实的不行了!冲冲冲,大一大二年轻的时候不懂事,现在不能再这样搞下去喽

之前看到一篇推送采访了一些大牛问他们觉得最优雅的算法是什么,感知机算法和逻辑回归算法被大牛们颇为推崇,那么巧妙的收敛,那么优美的证明让我也对他有了一些好奇,读完第二章,还是有些收获的,将笔记记录在此

附上传送门:Quora上的大牛们最喜欢哪种机器学习算法?

1. 第二章 感知机

1.1 感知机模型

感知机(perceptron)是二类分类的“线性分类模型”,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值.感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型.感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化求得感知机模型感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式感知机预测是用学习得到的感知机模型对新的输入实例进行分类

Name Function
输入空间 X
输出空间 Y = {-1,+1}
输入空间到输出空间的函数 f(x) = sign(w*x + b)

w和b都称为感知机模型参数,w叫做权值(weight),b叫做偏置(bias),w * x表示w和x的内积,sign是符号函数


image

感知机的几何解释:线性方程 w*x + b = 0对应于特征空间的一个超平面S,其中w是超平面的法向量,b是超平面的
截距.这个超平面将特征空间划分为两个部分.位于两部分的点(特征向量)分别被分为正、负两类.因此,超平面S称为分离超平面(separating hyperp1ane)

image

1.2 感知机学习策略

1.2.1 数据集的线性可分性: 给出了数据集线性可分的定义

image

1.2.2 感知机的学习策略

假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练集的正实例点和负实例点完全正确分开的分离超平面.为了找出这样的超平面,即确定感知机模型参数w,b,需要确定一个学习策略,即定义(经验)损失函数并将损失函数极小化.

损失函数的一个自然选择是误分类点的总数.但是,这样的损失函数不是参数w,b的连续可导函数(不可导就不可应用梯度下降算法),不易优化.损失函数的另一个选择是误分类点到超平面S的总距离,这是感知机所采用的.为此,首先写出输入空间中任一点x0到超平面S的距离

image

显然,损失函数L(w,b)是非负的.如果没有误分类点,损失函数值是0.而且,误分类点越少,误分类点离超平面越近,损失函数值就越小.一个特定的样本点的损失函数:在误分类时是参数w,b的线性函数,在正确分类时是0.因此,给定训练数据集T,损失函数L(w,b)是w,b的连续可导函数.

感知机学习的策略是在假设空间中选取使损失函数式(2.4)最小的模型参数 w, b,即感知机模型.即找到Min(L(w,b))

1.2.3 感知机学习算法

感知机学习问题转化为求解损失函数式的最优化问题,最优化的方法是随机梯度下降法

1.2.3.1 感知机学习算法的原始形式
image

image

之后还有算法收敛性的证明,定理2.1(Novikoff定理)--证明略

(1)存在满足条件的超平面将训练数据集完全分开
(2)能够得到误分类次数k的上限(应该是在随机梯度下降的前提下的误分类次数)

这个定理表明了”经过有限次搜索就可以找到将训练数据完全正确分开的分离超平面“,也就是说,当训练数据集线性可分时,感知机学习算法原始形式迭代是收敛的。

1.2.3.2 感知机学习算法的对偶形式

之后再来填坑

2. 注解:

(1)详解梯度下降法的三种形式BGD、SGD以及MBGD

来源:https://zhuanlan.zhihu.com/p/25765735

image
1. 批量梯度下降法BGD(Batch Gradient descent)

我们的目的是要误差函数尽可能的小,即求解weights使误差函数尽可能小。首先,我们随机初始化weigths,然后不断反复的更新weights使得误差函数减小,直到满足要求时停止。这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新weights:


image

这里\alpha 代表学习率,表示每次向着J最陡峭的方向迈步的大小。为了更新weights,我们需要求出函数J的偏导数。首先当我们只有一个数据点(x,y)的时候,J的偏导数是:


image

image

由上图更新公式我们就可以看到,我们每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的。


image

由上图更新公式我们就可以看到,我们每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的。

2. 随机梯度下降法SGD(Stochastic Gradient Descent)
image

随机梯度下降是通过每个样本来迭代更新一次,对比上面的批量梯度下降,迭代一次需要用到所有训练样本(往往如今真实问题训练数据都是非常巨大),一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
 


image

SGDd迭代的次数较多,在解空间额搜索过程看起来很盲目,但是大体上是沿着最优值方向移动

3. min-batch 小批量梯度下降法MBGD(Min-Batch Gradient Descent)

是上面两种方法的一种折衷,算法训练过程比较快,而且也要保证最终参数训练的准确率。


image

(2) L0,L1,L2范数

你可能感兴趣的:(《统计学习方法》阅读笔记及代码实现-Ch2)