【深度学习之美】Hello World感知机,懂你我心才安息 (入门系列之五)

简介: 感知机,就如同神经网络(包括深度学习)的“Hello World”。如果不懂它,就如同“为人不识陈近南,便称英雄也枉然”一样尴尬。当感知机可以模拟人类的感知能力,当它能够明辨与或非,但它最大的“疑惑”就是“异或”。难道机器领域也只能是异性才能有结果吗?

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


系列文章:

一入侯门似海,深度学习深几许(深度学习入门系列之一)

人工“碳”索意犹尽,智能“硅”来未可知(深度学习入门系列之二)

神经网络不胜语,M-P模型似可寻(深度学习入门系列之三)

机器学习三重门,中庸之道趋若人(深度学习入门系列之四)


原文再续,书接上回。

5.1 网之初,感知机

我们知道,《三字经》里开篇第一句就是:“人之初,性本善”。那么对于神经网络来说,这句话就要改为:“网之初,感知机”。感知机( Perceptrons ),基本上来说,是一切神经网络学习的起点。

很多有关神经网络学习(包括深度学习)的教程,在提及感知机时,都知道绕不过,但也仅仅一带而过。学过编程的同学都知道,不论是哪门什么语言,那个神一般存在的第一个程序——“Hello World”,对初学者有多么重要,可以说,它就是很多人“光荣与梦想”开始的地方。

而感知机学习,就是神经网络学习的“Hello World”,所以对于初学者来说,也值得我们细细玩味。因此,下面我们就给予详细讲解。

5.2 感性认识“感知机”

在第3小节中,我们已经提到,所谓的感知机,其实就是一个由两层神经元构成的网络结构,它在输入层接收外界的输入,通过激活函数(含阈值)的变换,把信号传送至输出层,因此它也称之为阈值逻辑单元(threshold logic unit

麻雀虽小,五脏俱全。感知机虽然简单,但已初具神经网络的必备要素。在前面我们也提到,所有“有监督”的学习,在某种程度上,都是分类(classification)学习算法。而感知机就是有监督的学习,所以,它也是一种分类算法。下面我们就列举一个区分“西瓜和香蕉”的经典案例,来看看感知机是如何工作的[1]

为了简单起见,我们就假设西瓜和香蕉都仅有两个特征(feature):形状和颜色,其它特征暂不考虑。这两个特征都是基于视觉刺激而得到的。

dcbcbeab6c3faf0571051876bdfd114a3e95e112

5-1 感知机学习算法

假设特征x1代表输入颜色,特征x2代表形状,权重w1w2默认值都为1,为了进一步简化,我们把阈值θ(亦有教程称之为偏值——bias)设置为0。为了标识方便,我们将感知器输出为“1”,代表判定为“西瓜”,而输出为“0”,代表判定为“香蕉”。当然了,如果有更多类别的物品,我们就用更多的数字来标记即可。

为了方便机器计算,我们对颜色和形状这两个特征,给予不同的值,以示区别。比如,颜色这个特征为绿色时,x1取值为1,而当颜色为黄色时,x1取值为-1;类似地,如果形状这个特征为圆形,x2取值为1,反之,形状为弯曲状时,x2取值为-1,如表5-1所示。

0fd4ddad833cd0d74253ad41eaa53f2a5d52e509


这样一来,可以很容易依据图5-1所示的公式,对于西瓜、香蕉做鉴定(即输出函数f的值),其结果分别如图5-2a)所示:

4f564064eb4bab3cdd178c4a8ad8330c63b965b2

5-2 感知器的输出

从图5-2a)所示的输出可以看到,对西瓜的判定输出结果是2,而香蕉的为-2。而我们先前预定的规则是:函数输出为1,则判定为西瓜,输出为0,则判定为香蕉,那么如何将2-2这样的分类结果,变换成预期的分类表达呢,这个时候,就需要激活函数上场了!

这里,我们使用了最为简单的阶跃函数(step function)。在阶跃函数中,输出规则非常简单:当x>0时,f(x)输出为1,否则输出0。通过激活函数的“润滑”之后,结果就变成我们想要的样子(如图5-2-b所示)。就这样,我们就搞定了西瓜和香蕉的判定。

这里需要说明的是,对象的不同特征(比如水果的颜色或形状等),只要用不同数值区分表示开来即可,具体用什么样的值,其实并无大碍。

但你或许会疑惑,这里的阈值(thresholdθ和两个连接权值w1w2,为啥就这么巧分别就是011呢?如果取其它数值,会有不同的判定结果吗?

这是个好问题。事实上,我们并不能一开始就知道这几个参数的取值,而是一点点地非常苦逼地“折腾试错”(Try-Error)出来的,而这里的“折腾试错”其实就是感知机的学习过程!

下面,我们就聊聊最简单的神经网络——感知机它是如何学习的?

5.3 感知机是如何学习的?

中国有句古话:“知错能改,善莫大焉。”说得就是“犯了错误而能改正,没有比这更好的事了”。

放到机器学习领域,这句话显然属于“监督学习”的范畴。因为“知错”,就表明它事先已有了事物的评判标准,如果你的行为不符合(或说偏离)这些标准,那么就要根据“偏离的程度”,来“改善”自己的行为。

下面,我们就根据这个思想,来制定感知机的学习规则。从前面讨论中我们已经知道,感知机学习属于“有监督学习”(即分类算法)。感知机是有明确的目的导向的,这有点类似于“不管白猫黑猫,抓住老鼠就是好猫”,不管是什么样的学习规则,能达到良好的分类目的,就是好学习规则。

我们知道,对象本身的特征值,一旦确定下来就不会变化。因此,所谓神经网络的学习规则,就是调整权值和阈值的规则(这个结论对于深度学习而言,依然是适用的)

假设我们的规则是这样的:

2e746781f50fed1a6731e39a97e47144af0a8af1

其中ep = y- y’y为期望输出,y’是实际输出,所以,具体说来,ep是二者的差值。在后面,读者朋友可以看到,这个“落差”就是整个网络中权值和阈值的调整动力。因为,很显然,如果ep0,那么新、旧权值和阈值都是一样的,网络就稳定可用了!

下面,我们就用上面的学习规则来模拟感知机的学习过程。假设w1w2初始值分别为1-1(注意:已经不再是11了!),阈值θ依然为0(事实上为其它初值,也是可行的),那么我们遵循如下步骤,即可完成判定西瓜的学习:

(1)计算判定西瓜的输出值f

c3482d57b17865643538911faceb9cbfa94eafec

将这个输出值带入如图5-2-b所示的阶跃函数中,可得y=0

(2)显然,针对西瓜,我们期望输出的正确判定是:y=1,而现在实际输出的值y’=0,也就是说,实际输出有误。这个时候,就需要纠偏。而纠偏,就需要利用公式(5.1)所示的学习规则。于是,我们需要计算出来误差ep来。

(3)计算误差ep

685f20f6581e9f7a53fb6361390865611676339b


现在,我们把ep的值带入公式(5.1)所示的规则中,更新网络的权值和阈值,即:

a757afd3f02693a9931d5658fda5cae9b3468841


(3)那么,在新一轮的网络参数(即权值、阈值)重新学习获得后,我们再次输入西瓜的属性值,来测试一下,看看它能否正确判定:

4cfb0b51202754910a1fb7e5ae9fb2a3a9e6e4d9


     再经过激活函数(阶跃函数)处理后,输出结果y=1很高兴,判定正确!

   (4)我们知道,一个对象的类别判定正确,不算好,“大家好,才算真的好!”于是,在判定西瓜正确后,我们还要尝试在这样的网络参数下,看看香蕉的判定是否也是正确的:

df866f871cdb7f123fe8283457ca084962dcb9e5


类似地,经过激活函数(阶跃函数)处理后,输出结果y=0,判定也正确的!BINGO!误差ep0,打完收工,学习结束!

在这个案例里,仅仅经过一轮的“试错法(trial-by-error)”,我们就搞定了参数的训练,但你可别高兴太早,谁叫这是一个“Hello World”版本的神经网络呢!事实上,在有监督的学习规则中,我们需要根据输出与期望值的“落差”,经过多轮重试,反复调整神经网络的权值,直至这个“落差”收敛到能够忍受的范围之内,训练才告结束。

在上面,我们仅仅给出了感知机学习的一个感性例子,下面我们要给出感知机学习的形式化的描述。

5.4 感知机的训练法则

通过前面的分析,我们可以看到,感知机是很容易实现逻辑上的“与(AND)”、“或(OR)”、“非(NOT)”等原子布尔函数(Primitive Boolean function),如图5-3所示(睿智如你,你肯定发现了,这里的确没有“异或”,这个坑回头我们在后面再填上)[2]

6cc9dbb07695c8c6b6196a3abe15e0194aa8781d

5-3 感知机实现逻辑运算

下面举例说明。首先,我们注意到,假设f是如图5-3所示的阶跃函数,通过合适的权值和阈值,即可完成常见的逻辑运算(既然是逻辑运算,x1x2都只能取值为01),例如:

1)“与(x1x2)”:当权值w1=w2=1,阈值θ=2时,有:

a7392a82339c338643d7c68f0387e3739ec1939d

此时,仅当x1=x2=1时,y=1,而在其它情况下(如x1x2无论哪一个取0),y=0。这样,我们在感知机中,就完成了逻辑“与”的运算。

2)类似地,“或(x1x2)”:当w1=w2=1,阈值θ=0.5时,有:

12a163fc273ee9aab3b95091bcde692464db2a2e


此时,当x1x2中有一个为“1”时,那么y=1,而在其它情况下(即x1x2均都取“0”),y=0。这样,我们就完成了逻辑“或”的运算。

3)在类似地,“非(x1)”:当w1=0.6w2=,0,阈值θ=0.5时,有:

d528fd2659a3c8bd40d316d871a1c3f29cf7effe


此时,当x1为“1”时,y=0,当x1为“0”时,y=1。这样,就完成了逻辑“非”的运算(当然,如果以x2做“非”运算,也是类似操作,这里不再赘述)。

更一般地,当我们给定训练数据,神经网络中的参数(权值wi和阈值θ)都可以通过不断地“纠偏”学习得到。为了方便起见,我们把阈值θ视为w0,而其权值设为固定值“-1”,那么阈值θ就可视为一个“哑节点(dummy node)”。这样一来,权重和阈值的学习可以“一统天下”称为“权重”的学习。

如此一来,感知机的学习规则就可以更加简单明了,对于训练样例(xy)(需要注意的是,这里粗体字x表示训练集合),若当前感知机的实际输出y’,假设它不符合预期,存在“落差”,那么感知机的权值依据如公式(5.2)规则调整:

4781e47587f62f1622e88fcf9e6b467c30cbf0f4         


其中,η(0,1)称为学习率(learning rate),公式(5.2)其实是公式(5.1)的一般化描述。由公式(5.2)可知,如果(xy)预测正确,那么可知y=y,感知机的权值就不会发生任何变化,否则就会根据“落差”的程度做对应调整。

这里需要注意的是,学习率η的作用是“缓和”每一步权值调整强度的。它本身的大小,也是比较难以确定的。如果η太小,网络调参的次数就太多,从而收敛很慢。如果η太大,“步子大了,容易扯着蛋”,从而错过了网络的参数的最优解。因此,合适的η大小,在某种程度上,还依赖于人工经验(如图5-4所示)。


173641903ce282a01b659e6f91769a1307f6358e

5-4  学习率:“步子大了,容易扯着蛋”

5.5 感知机的表征能力

如果识别对象xn个特征,那么感知机可以看做,在n维实例空间(即点空间)中的超平面决策面,以向量的模式写出来就是如图5-5所示。

05bb8de2fc252fc7cf12e43fdc45fb5bf76fdfac

图5-5 感知机的超平面

这样一来的话,对于超平面一侧的实例,感知机输出为1(或称判定为某一类),而对于超平面的另外一侧实例,感知机输出为0(判定为另外一类)。

由于感知机只有输出层神经元可以进行激活函数的处理,也就是说它只拥有单层的功能元神经元(functional neuron),因此它的学习能力是相对有限的。比如说在5.4小节中,原子布尔函数中的“与、或、非”等问题都是线性可分的(linearly separable)的问题。

前面的章节中,我们提到的那位人工智能泰斗明斯基(Minsky)已经证明,若两类模式是线性可分的,那么一定存在一个线性超平面可以将它们区分开来,如图5-6(a)-(c)所示。也就是说,这样的感知机,其学习过程一定会稳定(即收敛)下来,神经网络的权值可以学习得到。

但是对于线性不可分原子布尔函数(如“异或”操作),就不存在简单地线性超平面将其区分开来(如图5-6-(d))。在这种情况下,感知机的学习过程就会发生“震荡(fluctuation)”,权值向量就难以求得合适解。这里稍微为非专业读者解释一下什么异或?所谓异或(XOR),就是当且仅当输入值x1x2不相等,则输出为1。反之,输出为0。你可以简单粗暴地把“异或”理解为:男欢女爱输出为1,搞基都是没有结果的(输出为0)!

3b0ab812315d8c99eb5a3b4be3e6d55e71e26f55

5-6 线性可分的“与、或、非”和线性不可分的“异或”

一个寄以厚望的感知机,居然连简单的“异或”功能都实现不了,这点让明斯基颇为失望。于是,在1969年,他和同事Papert合作写下《感知机》一书[3],直接把“感知机”判了个n年有期徒刑(n在当时为不可知变量)。

这么一说,好像明斯基是一位法官一样。但其实呢,他更像《白雪公主》里的那位继母王后。这是因为就是他,给那个叫“人工智能”的“白雪公主”喂了一颗“毒苹果”(《感知机》一书),让这位“白雪公主”一睡就是20年(n=20)。

我们知道,绝大多数童话都有个“happy ending(完美结局)”,《白雪公主》也不例外。现在我们好奇的是,在人工智能领域,谁又是那位“吻醒”白雪公主的“王子”呢?

欲知后事如何,且听我们下回分解。

5.6小结

在本小节,我们首先用西瓜和香蕉的判定案例,感性地谈了谈感知机的工作流程。然后,我们又给出了感知机的形式化学习规则以及感知机的表征能力。容易发现,感知机连常见的逻辑操作“异或”都难以实现,这一功能缺陷,直接让人工智能领域大神明斯基抓住了“小辫子”,然后就把“人工智能”送进了长达二十年的“冬天”。

但英国浪漫主义诗人雪莱说了:“冬天来了,春天还会远吗?”

5.7 请你思考

学习完本小节,请你思考如下问题:

1)你能参照感知机判定“西瓜”和“香蕉”的案例,训练感知机完整布尔函数“与、或、非”等权值的学习吗?请用编程语言实现。(提示:它山之石,可以攻玉。可以借助开源的神经网络框架实现,如由Java语言编写的Neuroph,下载链接:http://neuroph.sourceforge.net/

2)你知道最终感知机是如何解决“异或”问题的吗?(提前剧透:增加神经网络的层数,提升网络数据特征的表达能力,网络层次多了,这就是深度神经网络啊!)


写下你的感悟,祝你每天都有收获!

【参考文献】

[1] 吴岸城神经网络与深度学习.电子工业出版社.2016.6

[2] 周志华.机器学习.清华大学出版社.2016.2

[3] Minsky M, Papert S. Perceptrons[J]. 1969.


文章作者:张玉宏(著有《品味大数据》一书),《深度学习之美》(最通俗易懂的深度学习入门)2018年7月出版

联系邮件:zhangyuhong001@gmail.com

审校:我是主题曲哥哥。

(未完待续)

系列文章:

损失函数减肥用,神经网络调权重(深度学习入门系列之六)

山重水复疑无路,最快下降问梯度(深度学习入门系列之七)

BP算法双向传,链式求导最缠绵(深度学习入门系列之八)

全面连接困何处,卷积网络见解深(深度学习入门系列之九)

卷地风来忽吹散,积得飘零美如画(深度学习入门系列之十)

局部连接来减参,权值共享肩并肩(深度学习入门系列之十一)


掌握第一手干货,欢迎关注阿里云云栖社区官方微博:http://weibo.com/u/1939498534

相关文章
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
17天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
44 3
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
2月前
|
机器学习/深度学习
深度学习笔记(一): 神经网络之感知机详解
深度学习笔记(一):探索感知机模型及其在神经网络中的应用。
40 0
深度学习笔记(一): 神经网络之感知机详解
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
软件工程师,入门下深度学习吧
软件工程师,入门下深度学习吧
65 9
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:从理论到实践
【9月更文挑战第22天】本文将带你走进深度学习的世界,从基础的理论概念出发,逐步深入到实践应用。我们将探讨神经网络的工作原理,以及如何通过编程实现一个简单的深度学习模型。无论你是初学者还是有一定基础的学习者,都能在这篇文章中找到有价值的信息。让我们一起揭开深度学习的神秘面纱,探索这个充满无限可能的领域吧!
|
3月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。