【算法周】哆啦A梦,我想要个“感知机”

欢迎大家关注公众号【哈希大数据】
感知机可以说是最古老的分类方法之一了,在1957年就已经提出。今天看来它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机的话会降低不少难度。同时如果研究透了感知机模型,再学习神经网络,深度学习,也是一个很好的起点。这里对感知机的原理做一个小结。
1. 感知机模型
 感知机的思想很简单,比如我们在一个平台上有很多的男孩女孩,感知机的模型就是尝试找到一条直线,能够把所有的男孩和女孩隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。当然你会问,如果我们找不到这么一条直线的话怎么办?找不到的话那就意味着类别线性不可分,也就意味着感知机模型不适合你的数据的分类。使用感知机一个最大的前提,就是数据是线性可分的。这严重限制了感知机的使用场景。它的分类竞争对手在面对不可分的情况时,比如支持向量机可以通过核技巧来让数据在高维可分,神经网络可以通过激活函数和增加隐藏层来让数据可分。
用数学的语言来说,如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下:
 (x1(0),x2(0),...xn(0),y0), (x1(1),x2(1),...xn(1),y1),...
(x1(m),x2(m),...xn(m),ym)
我们的目标是找到这样一个超平面:
θ01x1+...+θnxn=0
让其中一种类别的样本都满足θ01x1+...+θnxn >0,让另一种类别的样本都满足θ01x1+...+θnxn<0 .
从而得到线性可分。如果数据线性可分,这样的超平面一般都不是唯一的,也就是说感知机模型可以有多个解。
为了简化这个超平面的写法,我们增加一个特征
x0=1 ,这样超平面为

image

进一步用向量来表示为: θx=0,其中θ为(n+1)x1的向量,x为 (n+1)x1 的向量, 为内积,后面我们都用向量来表示超平面。
而感知机的模型可以定义为:y=sign(θx) 其中:
image

2. 感知机模型损失函数
为了后面便于定义损失函数,我们将满足θ∙x>0的样本类别输出值取为1,满足θx<0的样本类别输出值取为-1,这样取y的值有一个好处,就是方便定义损失函数。因为正确分类的样本满足 yθx>0,而错误分类的样本满足 yθx<0。我们损失函数的优化目标,就是期望使误分类的所有样本,到超平面的距离之和最小。
由于yθx<0,所以对于每一个误分类的样本i ,到超平面的距离是−y(i)θ∙x(i)/||θ||2 , 其中||θ||2为L2范数。
我们假设所有误分类的点的集合为M,则所有误分类的样本到超平面的距离之和为:
image

这样我们就得到了初步的感知机模型的损失函数。
我们研究可以发现,分子和分母都含有θ,当分子的θ扩大N倍时,分母的L2范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么我们可以固定分子或者分母为1,然后求另一个即分子自己或者分母的倒数的最小化作为损失函数,这样可以简化我们的损失函数。在感知机模型中,我们采用的是保留分子,即最终感知机模型的损失函数简化为:
image

题外话,如果大家了解过支持向量机,就发现支持向量机采用的是固定分子为1,然后求1/||θ||2的最大化。采用不同的损失函数主要与它的后面的优化算法有关系。
3. 感知机模型损失函数的优化方法
上一节我们讲到了感知机的损失函数:
image

其中M是所有误分类的点的集合。这是一个凸函数,可以用梯度下降法或者拟牛顿法来解决,常用的是梯度下降法。
但是用普通的基于所有样本的梯度和的均值的批量梯度下降法(BGD)是行不通的,原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD)或者小批量梯度下降(MBGD)。如果对这几种梯度下降法的区别不了解,可以参考我的另一篇文章梯度下降(Gradient Descent)小结。
感知机模型选择的是采用随机梯度下降,这意味着我们每次仅仅需要使用一个误分类的点来更新梯度。

image

由于我们采用随机梯度下降,所以每次仅仅采用一个误分类的样本来计算梯度,假设采用第i个样本来更新梯度,则简化后的θ向量的梯度下降迭代公式为:
θ=θ+αy(i)x(i)
其中α为步长,y(i)为样本输出1或者-1,x(i)为(n+1)x1的向量。
4. 感知机模型的算法
前两节我们谈到了感知机模型,对应的损失函数和优化方法。这里我们就对感知机模型基于随机梯度下降来求θ向量的算法做一个总结。
算法的输入为m个样本,每个样本对应于n维特征和一个二元类别输出1或者-1,如下:
 (x1(0),x2(0),...xn(0),y0), (x1(1),x2(1),...xn(1),y1),...
(x1(m),x2(m),...xn(m),ym)
输出为分离超平面的模型系数θ向量
算法的执行步骤如下:

  1. 定义所有x0为1。选择θ向量的初值和 步长α的初值。可以将θ向量置为0向量,步长设置为1。要注意的是,由于感知机的解不唯一,使用的这两个初值会影响θ向量的最终迭代结果。
    (x1(i),x2(i),...xn(i),yi) , 用向量表示即(x(i),y(i)),这个点应该满足:y(i)θ∙x(i)<0
  2. 对θ向量进行一次随机梯度下降的迭代:
    θ=θ+αy(i)x(i)
    4)检查训练集里是否还有误分类的点,如果没有,算法结束,此时的θ向量即为最终结果。如果有,继续第2步。
    5. 感知机模型的算法对偶形式
    上一节的感知机模型的算法形式我们一般称为感知机模型的算法原始形式。对偶形式是对算法执行速度的优化。具体是怎么优化的呢?
    通过上一节感知机模型的算法原始形式
    θ=θ+αy(i)x(i)
    可以看出,我们每次梯度的迭代都是选择的一个样本来更新θ向量。最终经过若干次的迭代得到最终的结果。对于从来都没有误分类过的样本,他被选择参与θ迭代的次数是0,对于被多次误分类而更新的样本j,它参与θ迭代的次数我们设置为mj。如果令θ向量初始值为0向量, 这样我们的θ向量的表达式可以写为:
    image

    其中mj为样本(x(j),y(j))在随机梯度下降到当前的这一步之前因误分类而更新的次数。
    每一个样本(x(j),y(j))的mj的初始值为0,每当此样本在某一次梯度下降迭代中因误分类而更新时,mj 的值加1。
    由于步长α为常量,我们令βj=αmj,这样θ向量的表达式为:
    image

    在每一步判断误分类条件的地方,我们用 y(i)θ∙x(i)<0 的变种:
    来判断误分类。
    注意到这个判断误分类的形式里面是计算两个样本x(i)和x(j)的内积,而且这个内积计算的结果在下面的迭代次数中可以重用。如果我们事先用矩阵运算计算出所有的样本之间的内积,那么在算法运行时, 仅仅一次的矩阵内积运算比多次的循环计算省时。 计算量最大的判断误分类这儿就省下了很多的时间,,这也是对偶形式的感知机模型比原始形式优的原因。
    样本的内积矩阵称为Gram矩阵,它是一个对称矩阵,记为 G=[x(i)x(j)]
    这里给出感知机模型的算法对偶形式的内容。
    算法的输入为m个样本,每个样本对应于n维特征和一个二元类别输出1或者-1,如下:
    (x1(0),x2(0),...xn(0),y0), (x1(1),x2(1),...xn(1),y1),...
    (x1(m),x2(m),...xn(m),ym)
    输出为分离超平面的模型系数θ向量
    算法的执行步骤如下:
  3. 定义所有x0为1,步长α初值,设置β的初值0。可以将α设置为1。要注意的是,由于感知机的解不唯一,使用的步长初值会影响θ向量的最终迭代结果。
  4. 计算所有样本内积形成的Gram矩阵G。
    3) 在训练集里面选择一个误分类的点(x(i),y(i)),这个点应该满足:
    image

    在检查是否满足时可以通过查询Gram矩阵的gij 的值来快速计算是否小于0。
  5. 对β向量的第i个分量进行一次更新:βii
    5)检查训练集里是否还有误分类的点,如果没有,算法结束,此时的θ向量最终结果为下式。如果有,继续第2步。
    其中βj 为β向量的第j个分量。
    5. 小结
    感知机算法是一个简单易懂的算法,自己编程实现也不太难。前面提到它是很多算法的鼻祖,比如支持向量机算法,神经网络与深度学习。因此虽然它现在已经不是一个在实践中广泛运用的算法,还是值得好好的去研究一下。感知机算法对偶形式为什么在实际运用中比原始形式快,也值得好好去体会。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容