Hinton神经网络与机器学习 1. 绪论 本文作者: Tingxun Shi 本文链接: http://txshi-mt.com/2017/11/12/UTNN-1-Introduction/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处! 为什么需要机器学习? 对于一些问题,例如在复杂环境里,如何在新的光源条件下识别三维物体,编写程序去解决这些问题本来就是 非常困难的:我们也不知道我们的大脑到底是如何运作来识别它的,即便我们知道,写出来的程序可能也十分 复杂。对于另外一些问题,例如判断某笔信用卡交易有多大概率是欺诈性的,可能无法给出简单有效的规则。 要解决这样的问题,需要将很多种比较弱的规则组合起来。而且,所谓“道高一尺魔高一丈”,犯罪分子也会根 据系统的判别手段,调整欺诈的方式,这就使得判别系统/程序也得随之变化 这些问题可以使用机器学习这一技术来解决:开发人员不再需要为每个特殊的任务编写程序,而是收集很多样 本,这些样本针对给定的输入,会相应标记一个正确的输出。机器学习算法会接受这些样本,产生一个程序来 完成指定的任务——这个产生的程序与传统的人工手写的程序不同,可能只包含一些数字。如果收集的数据是 正确的,那么对于新来的,未在输入数据里出现的例子,程序也能正确处理;如果数据产生了变化(就像信用 卡欺诈的例子里那样),开发人员也只需要使用新的数据进行训练,来对程序进行变化。在现阶段,使用机器 做大量计算所花的钱比雇人为某个任务写代码的花费是要少一些的 典型的可以使用机器学习来解决的问题包括: 模式识别,例如识别物体、识别脸孔或识别所说的单词 异常识别,例如识别信用卡交易中的异常交易序列、在核电站识别传感器的异常读数。注意解决这样的问 题有时甚至不需要明确地说明哪些值是正常的,哪些是异常的,而是完全由算法去发掘 预测,例如预测将来某一天股票的价格或者外汇汇率,以及用户对某部电影的评分 在这诸多问题中,本课将挑选一个作为一个典型样例贯穿始终。类比于遗传学中的工作,由于人们对果蝇的习 性了解很多,而且果蝇繁殖速度很快,因此遗传学经常使用果蝇作为研究对象。本课所选的“果蝇”是MNIST数 据库,这里面包含了很多人手写的数字。MNIST是公开的,可以被随意下载,而且使用MNIST作为训练数据可 以很快训练一个中等大小的神经网络,此外,我们也了解其它很多机器学习算法在MNIST上的效果,因此 MNIST是一个很好的例子 MNIST数据集的一个例子 上图给出了MNIST数据集的一个片段,所有的手写数字已经按照进行了归类排序。也就是说,图中的所有数字 先是所有0,再是所有1,以此类推,一直到9。以图中用绿框框起来的手写的2为例,如果被告知“这就是手写 数字”,那么人们大概是能看出来这些数字是2的,但是并不能用一两句话说清楚这些图像为什么就是2。图中 给出的这些数字相互之间形状差异很大,即便是做一些简单的变化(例如旋转)也很难让任意两个数字重叠在 一起,因此使用模板来做判定是基本不可能的——这也就是为什么这个任务是一个很好的机器学习任务的原因 在MNIST之上,还有一个更大的数据集ImageNet。该数据集提供了130万张高分辨率的图片,算法的目标是将 每张图片分到1000个分类中正确的那一个。2010年时,最好的系统的top 5 choices错误率为25%。2012年 时,使用深度学习训练处的模型做到了20%。到了2015年,最好的算法在这项指标上已经可以达到3.8%,而 多个深度神经网络的组合模型甚至可以达到3.08%(http://ischlag.github.io/2016/04/05/important-ILSVRC- achievements/) 此外,语音识别也是深度学习非常适用的一个场合。通常来讲,语音识别系统可以细分为三个阶段: 预处理阶段。在这个阶段,声波会被转化为一些声学系数组成的向量。通常情况下,每十毫秒的声波会被 转化为一组向量 声学建模阶段。在这个阶段,会使用相邻的若干向量进行推测,猜测这些向量对应了什么音素 解码阶段。在这个阶段,将上一阶段做出的预测进行组合,拟合出的模型将输出说话人所说的内容文本 深度学习模型在这样的任务上取得的成绩是斐然的。对于TIMIT数据集,2012年之前最好的模型错误率是 24.4%,而且需要对多个模型进行组合。2012年George Dahl和Abdel-rahman Mohamed的8层神经网络将错误 率降低到了20.7%。这样的成绩也引起了微软研究院邓力的关注。对于其它语音识别任务,深度学习模型也能 够取得比传统GMM模型更好的效果,而且训练时间更短 神经网络是什么? 前面提到的各种大放异彩的深度学习模型,被称之为“深度”的原因是其本质是叠加了很多层的神经网络。神经 网络模型,其初始思想就是对生物的神经系统如何工作做一个模拟,所以这一节主要来对生物的神经系统做一 个概述。了解生物神经元是如何计算的,有以下几点原因 可以了解大脑真正是如何工作的。大脑的工作原理非常复杂,而且当它被取出来时也就不工作了,因此需 要使用计算机进行模拟 可以了解由神经元和它们之间自适应连接所启发的并行计算方式。这种计算方式与常见的串行计算很不相 同。对于大脑很擅长的工作(例如视觉),使用这种计算方式可能能达到非常好的效果;但是对大脑不擅 长的工作(例如计算23x71)就不适用了 大脑的工作原理可以启发研究人员发明一些新颖的机器学习算法来解决实际问题。尽管这些算法的原理可 能并不同于大脑真正的工作原理,但是仍然会是有用的 神经系统的基本组成元素是皮层神经元(cortical neuron)。神经元由一个细胞体(cell body)和一根轴突 (axon)组成,其中轴突末端会分叉。细胞体还会分出若干树突(dendritic),来从其它神经元获得输入。轴 突与树突通常在突触(synapse)处交互,轴突中产生的冲动(spike)会导致电离子注入到突触后神经元,当 足够的电离子流入以后,轴丘(axio hillock)会在突触产生流出的冲动,来对细胞膜(cell membrane)去极 化(depolarize)。下图给出了神经元的一个示意图 神经元示意图 冲动随着轴突流动到达突触时,会导致突触小泡(vesicle)释放高浓度的化学传递物质。传递物质会沿着突触 间隙(synaptic cleft)扩散至突触后神经元的细胞膜,吸附到膜中的受体(receptor),造成细胞膜形状的改 变,产生若干小孔,使得特殊的离子可以进出。突触的功效性还可以随着突触小泡的数量和受体的数量变化。 总体来看,突触是比较慢的,但是与RAM相比仍然有其优势:它们体积很小,功耗很低,而且可以根据局部的 信号适应环境。但是它们具体是遵从何种规则来做出变化的呢? 每个神经元会从其它神经元那里获取到输入,它们之间通过冲动来进行交互。神经元的输入功效由突触的权重 来控制,这些权重可以是正的,也可以是负的,而且这些权重是自适应的,因此整个网络可以适应不同的环 境,完成不同的计算任务,例如辨识物体、理解语言、制定计划、控制身体等等。人身上大概有一千亿个神经 元,每个神经元有一万个权重。这大量的权重可以在非常短时间内影响计算。 此外,神经元是模块化的,大脑皮层的不同部分有不同的功能,对大脑皮层不同区域的损伤会造成不同的后 果,而正常人完成不同的任务时血液也会流向不同的区域。但是,皮层看上去又是相似的,如果在婴儿时期大 脑受到了破坏,那么其它部分可能会承担被破坏部分的功能。例如如果在婴儿时期负责视觉的皮层遭到了破 坏,大脑可能会把视觉任务重新分配给听觉皮层,在这样的刺激下,听觉皮层中会产生出视觉神经元,因此实 际上有可能存在一个通用的学习方法。也就是说,皮层在形成的时候其用途是广泛的,但是随着经验的积累, 不同区域的皮层会变得只处理某个特别的任务。如果使用类似的原理来计算,则可以兼顾速度、并发度和灵活 性。传统的计算机通过存储顺序指令来获得这样的灵活性,但是这需要一个非常快的中央处理器来执行很长的 计算序列 一些简单的神经元模型 本节介绍一些基本的神经元模型。尽管这些模型与真正的神经元工作原理相比简单得似乎不值一提,但是它们 的能力已经足可以搭建起来一个神经网络模型,来解决一些有趣的机器学习问题 为了了解复杂的现象,一般总是要对目标做理想化才能建模。理想化的过程可以去掉繁复的枝叶:这些盘根错 节的东西对理解主要原理是不必要的。理清主干以后,就可以使用数学手段,将目标系统与其它已经了解过的 系统做类比,来理解主要原理。主要原理理解了以后,就可以方便地一点一点增加模型的复杂度,来让模型与 现实更加贴近。当然,有时候去理解一些已经知道是错误的模型也是值得的,只要不要忘记这是一个错误的模 型就行。例如,神经网络模型中神经元传递的通常是实数值而不是冲动,但是实践证明这种做法是有效的 y 神经网络中最简单的神经元是线性神经元。这种模型非常简单,但是计算能力有限。这种神经元的输出 由输 x b 入 i的加权和再加上偏置 得到,即 y = b+ ∑x w i i i w i x 其中 i是第 个输入 i的权重 在此基础上,McCullock-Pitts在1943年提出了二元阈值神经元,其第一步还是要算出输入的加权和,然后,要 将加权和与某个阈值作比较,如果超出该阈值,则发射一个冲动信号。原作者认为,冲动信号就像是某个谓词 的真值,因此这里每个神经元就是将输入的真值做组合,输出自己所代表谓词的真值。二元阈值神经元有两种 θ 表示形式。一种是纯加权和的形式,并设定阈值为 。即 1 if z ≥ θ z = ∑x w , y = { i i 0 otherwise i θ = −b 如果将阈值看作是负的偏置,即 ,就可以写出与线性神经元类似的偏置+权重的形式,即 1 if z ≥ 0 z = b+ ∑x w , y = { i i 0 otherwise i Hinton将上述两种神经元进行了组合,得到了ReLU神经元(有时也称为线性阈值神经元)。这种方法仍然会 计算输入的线性加权和,但是输出是所有输入的一个非线性函数。具体形式为 z if z ≥ 0 z = b+ ∑x w , y = { i i 0 otherwise i 本课中最常用的神经元是sigmoid神经元,该神经元也是实践中最常用的神经元,它给出的是输出是实数的, 且图像平滑有界。这种神经元通常使用logistic函数,即 1 z = b+ ∑x w , y = i i 1+ e−z i Logistic函数的好处是其导数的形式很漂亮,使学习过程变得容易。具体道理在第三讲会讲解 最后一种神经元是随机二元神经元。它使用的表达式与sigmoid神经元相同,不过把logistic函数的输出看作是 P = 1/(1+ e−z) 短时间内产生冲动的概率。即,它的输出还是0或者1,但是是以概率 输出1。类似的技巧可 以用在ReLU上,此时神经元产生冲动的概率服从泊松分布 笔者注 (以下注来自知乎用户杜客的回答和罗浩.ZJU的回答) 上面使用删除线删除的内容是Hinton在视频中提到,但是现在不适用的内容。近几年,在深度学习中,ReLU σ(x) 神经元的使用要比sigmoid的使用多很多。记Sigmoid函数为 ,即 1 σ(x) = 1+ e−x 其导数(梯度)满足性质 σ′(x) = σ(x)(1− σ(x)) x = 0 x 可知当 时,sigmoid函数的梯度达到最大值,仅为0.25。而当 很大或者很小时,该函数会接近1或 σ(5) ≈ 0.9933 者-1,此时称发生了饱和(saturation)现象(事实上,有 )。在这种情况下,函数的梯度值 接近0。当使用深度网络或者RNN时,由反向传播的理论,会出现多个梯度的连乘。而多个接近于0的数连成会 快速逼近0,造成梯度消失,使得几乎就有没有信号通过神经元传到权重再到数据了。而且,如果初始化的矩 阵随机得不好,权重过大,那么饱和会快速出现,模型基本学不到什么东西 x > 0 x 对于ReLU而言,当 时,其激活函数 的导数为1,连乘不会逼近0,避免了梯度消失。此外,对于输入值 为负的神经元,其梯度为0,不会参与训练,保证了神经网络的稀疏性,可以避免过拟合。最后,ReLU梯度的 计算更加简单,只需要写一个if-else语句,而sigmoid函数的导数涉及到了浮点数计算,实际上还是麻烦的 在近年的实际应用中,另一种tanh神经元也受到了一定程度的重视。形式为 z = b+ ∑x w , y = tanh(z) i i i 事实上,tanh函数可以由sigmoid函数经过一个简单变换得到。其与原始sigmoid函数相比最大的好处是其是零 中心的(函数图像在0点中心对称),不过并没有解决在输入太大或太小时造成的梯度消失问题 关于学习的一个简单样例 本节将给出一个关于机器学习的例子,尽管使用的网络结构比较简单,但是它已经可以做一些手写数字识别的 工作。这个网络只有两层: 输入层神经元表示原始图像的像素密度 输出层指出图像表示的是哪个数字 图像的每一个像素点,如果被染色,就相当于有了投票的权利。每个被染色的像素点可以给几种不同的数字投 票,得票最多的数字获胜——因此,这个过程就好像是输出的若干个类别互相比赛 前面提到,神经网络中的参数其实就是各个输入所对应的权重,因此为了展示训练过程,一个重要的问题是如 何把权重表示出来。直观的做法是写明每个像素点为每个类别贡献了多少权重,但是这样需要写成千上万行数 字,因此退而求其次,可以使用颜色来代表权重的大小和正负。对于某个给定的类别(这里是数字),如果一 个像素点的颜色越浅,则代表该点贡献了一个越大的正权重;如果颜色越深,则代表该点贡献了一个越小的负 权重 学习的方法设定为,首先,将所有像素点对所有类别贡献的权重随机初始化一个小值,然后对每个给定的手写 数字图像中被染色的像素点: 增大其对正确分类的权重 减小其对网络所猜测的类别的权重 这种做法可以达到一个微妙的平衡:如果神经网络给出了正确的预测,那么该像素点对正确类别的权重贡献先 增后减,相互抵消;但是如果给出了错误的预测,那么该像素点对正确类别的权重增大,对错误类别的权重减 小。下图给出了刚刚初始化时和使用若干图片训练后的权重示意 网络对每个数字的初始权重 网络训练后的最终权重 尽管网络已经展现出了学习能力,而且效果还不错,但是它仍然有不足。本质上,它学到的其实是每个数字的 一个手写模板。当来到一个新的输入时,对这个输入,用学到的10个模板挨个匹配,哪个匹配得最吻合,就认 为写的是哪个数字。但是这个模板并不能完美匹配所有手写的数字图像。例如,对于下面的例子,无法找到一 个模板,使得其可以辨识出所有2,同时又不会误把3当成2。因此,还是需要更复杂的网络模型 简单网络难以区分的例子。绿框里的2和红框里的3使用上述算法无法区分 学习的三种类型 机器学习任务总体来讲可以分为三种类型 有监督学习 x t 有监督学习的形式是,给定一个输入向量 ,学习预测一个输出 。根据输出的形式,有监督学习又可以细分为 两个子类别 回归:目标输出是一个实数,或者实数向量。例如预测之后6个月的股票价格、明天中午的气温等 分类:目标输出是一个类别标签,例如手写数字识别 y = f(x;W) x 进行有监督学习的典型过程通常是,首先选择一类模型 ,它接受输入向量 ,使用相关参数 W y W ,得到最后的输出 。模型这里也可以看作是一种映射,是输入到输出经由 作用的映射。因此,学习的 W y t 核心就是调整这些参数 ,使得模型输出 与期望输出 之间的差距尽可能小。对于回归问题,这个差距的衡 1(y − t)2 量方法通常是 。而对分类问题,存在更合理也更有效的衡量方式,之后会讲到 2 强化学习 强化学习的输出是一个动作,或者一串动作序列。这里也存在监督性的信号,不过只是不定时出现的一些奖励 (或惩罚)。因此,强化学习的目标是选择最合适的动作来最大化将来可能获得的奖励的期望和——通常情况 下,对每个奖励会设置一个跟时间相关的衰减因子,这样越后面的奖励加权后的重要性越小,使得模型不用考 虑太远的将来 强化学习是一件比较难的事情,因为奖励通常都不会马上得到,所以模型并不知道是否走在了正确的道路上, 而且奖励只是一个标量,本身提供的信息也有限 强化学习难以学到成百万的参数,通常是几十到几千个。但是其它两种学习形式不会有这样的限制 无监督学习 无监督学习的目的是要发现输入数据一个良好的内部表现形式。在将近40年的时间里,无监督学习在机器学习 这个圈子里基本是处于被忽视的状态,一些广泛使用的关于“机器学习”的定义甚至实际上把这种问题排除掉 了,而很多研究者认为只有聚类才是无监督学习唯一的表现形式 造成这种现象的原因之一是,很难一句两句话说清楚无监督学习的目标究竟是什么。大致来看,可以列举出如 下几类目标 为输入数据创造一种内部表示形式,用于之后的有监督学习或强化学习 为输入数据提供一种紧凑、低维的表示方法,例如PCA 以学到的特征这一形式,为输入提供一种经济的高维表示方法 找到输入中一些合理的类簇 本次课程的前一半主要讲授有监督学习问题,后一半主要讲授无监督学习问题,而强化学习不在本次课大纲之 内(笔者注:不过近几年深度强化学习也受到了越来越多的重视) Hinton神经网络与机器学习 2. 感知机 本文作者: Tingxun Shi 本文链接: http://txshi-mt.com/2017/11/18/UTNN-2-the-Perceptron-Learning-Procedure/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处! 神经网络体系结构的主要类型 本课程主要介绍的内容是各种各样的神经网络,而这些神经网络根据神经元连接的方式大致可以划分成三种主 要的体系结构 第一种结构是前馈神经网络(feed-forward neural networks)。这种结构是迄今为止实践中应用最多的结构, 其第一层是输入,最后一层是输出,中间所有层都称为隐藏层。如果隐藏层层数大于1,那么得到的网络就称 为“深度”神经网络。使用时,数据从输入层流入,沿着一个方向通过隐藏层,直到输出层。由于网络中各个神 经元都使用了不同的非线性函数做激活函数(见上一讲中的“神经元模型”一节),来对输入进行处理,因此前 一层原本相似的数据经过激活函数变换以后,在下一层可能就会变得不同;反之,原来不同的地方可能就会相 似。典型的例子是语音识别中,需要不同说话人说的相同内容变得相似,同一说话人说的不同内容变得相异, 因此非线性激活函数就起到了这样的作用 第二种结构是循环神经网络(recurrent neural networks, RNN)。这种结构比传统前馈神经网络更强大:对于 某一个隐藏层神经元,其不一定非要连向下一层神经元,而是也可以连向同层中的其它神经元,即这种网络的 连接图中可以有一个有向的环路。这意味着从某个神经元开始,沿着连接方向游走,最后可能会回到出发点。 RNN可以表现出很复杂的动态性,因此比较难训练,但是目前研究人员已经找到了很多突破方法 RNN更像生物体中神经网络的结构,同时,它更适用于对序列建模。此时,隐藏层单元之间也会有连接,从表 现形式上看,隐藏层之间的连接就像是一个随时间展开的,非常深的网络。此时每个时刻隐藏单元的状态都会 决定下一个时刻隐藏单元的状态,只不过隐藏单元之间使用的权重矩阵是相同的,而深度前馈网络中各个隐藏 层之间的权重矩阵是不同的。RNN具有在隐藏单元中长时间记忆信息的能力,在自然语言处理领域中用得非常 多。例如Ilya Sutskever在ICML 2011上的论文Generating Text with Recurrent Neural Networks就使用了RNN 来预测给定字符序列后的下一个字符。该工作使用英文维基中的文章作为训练材料,得到的模型可以产生出基 本符合英语语法的段落 第三种结构是对称连接网络(symmetrically connected networks)。在RNN中,隐藏层神经元之间可以有一 串沿时间线向前的连接,也可以有一串向后的连接,但是这两串连接使用的权重矩阵是不同的。对称连接网络 也是有两串连接,但是这些连接是对称的,也就是它们的权重矩阵相同。没有隐藏层单元的对称连接网络称为 Hopfield网,而带有隐藏层单元的称为玻尔兹曼机(Boltzmann machine)。对称连接网络比RNN更好分析, 因为它们在能力上受到了一些限制,而且更符合能量函数。对称连接网络不能对环路建模 初代神经网络:感知机 Y = {−1,1} (本章从本节开始的内容也可参考林轩田老师课程的笔记。需要注意的是,林课中标签集合 ,而 Y = {0,1} 本课使用的标签集合 ) 本章的主角是感知机这种模型,它在20世纪60年代初期曾经红极一时,但是随着Minsky和Papert证明了它们能 力上的限制以后就迅速衰落了下去 对于统计的模式识别问题,有一套比较标准的解决方案:首先,把原始输入向量转化成特征向量。这个阶段不 涉及任何“学习”的内容,由开发人员通过直觉来手写代码完成。得到的特征可能有用,也可能没用,如果没用 的话,再设法去产生新的特征来验证,这样最后肯定能够得到一组能用的特征向量。真正的学习阶段出现在确 定各个特征的权重时。由于最后得到的是一个标量,因此每个特征的权重代表了该特征在多大程度上支持或者 反对“输入数据属于要识别的模式”这个命题。确定权重以后,将所有特征加权求和,如果最后得到的值超过某 个权重,就认为输入是目标类别的正例,反之则认为是负例。感知机是统计模式识别系统的一个例子,有多种 α 变种,但是被Rosenblatt称为 -感知机的模型大体遵循了这个过程:使用人工从输入获得的激活向量,学习出 一个权重,将权重与激活向量求内积得到一个值,根据这个值与阈值的比较结果判定样本的类别 具体说来,感知机使用的是一个二元阈值神经元模型,这个模型在前一章曾经提到过。其表达形式如下: 1 if z ≥ 0 z = b+ ∑x w , y = { i i 0 otherwise i 由于偏置项可以看作是阈值的负数,为了不去为偏置项设置一个单独的学习策略,可以将输入做一个修改:在 输入向量中增加一个维度,这个维度上的值永远是1,那么学到的权重向量在该维度上就是偏置值 对输入进行处理(加入常数项)后,就可以使用如下方法训练感知机: 感知机训练算法 w(0) x 随机初始化权重向量 ,使用任意方法遍历全部样本,对每一个样本 i观察输出,如果输出是正确 的,略过,否则 w(t+1) = w(t) + x 如果真实标签是1而输出为0,则 i w(t+1) = w(t) − x 如果真实标签是0而输出为1,则 i 重复上述过程,直到遍历过训练集所有样本而权重没有发生改变时,算法终止 感知机算法的一个很好的性质是,如果存在一个权重向量可以将所有样本正确分类,那么算法一定会终止且找 出这个向量。然而,它的局限性也在于,如果对给定的训练样本不存在这样一个向量,算法就不能正常工作。 事实上,这个向量存在与否,决定于使用了什么特征,而对很多问题很难找到良好的特征 感知机的几何意义 本节将在高维空间里讨论感知机的几何意义,同时要涉及到一些关于超平面的概念。尽管听上去比较复杂抽 象,但是若把一个14维空间看成一个3维空间,超平面看成是一个2维平面,问题就好理解一些 首先来看权重值空间。这个空间里的每一个维度都对应权重向量的一个分量,而空间中的每个点都代表了某个 可能的权重。假设沿用上一节的做法,不单独考虑阈值,那么每条输入数据就可以表示为一个穿过原点的超平 面,权重在该超平面的某一侧。下图给出了一个示例 感知机权重向量与训练样本超平面的关系。左边为输入向量为正例的情况,右边为输入向量为负例的情况 在图中,每个训练数据以蓝色的向量表示,其定义了一个超平面(以黑线表示),注意超平面与该训练数据所 代表的向量总是正交的(即该训练数据是其定义的超平面的法向量)。对于上图左,输入样本为正例。如果权 重向量与输入向量指向同样的方向(超平面的同一侧,上图左的绿色向量),此时两个向量的夹角是个锐角, 内积的结果是正值。由于不考虑阈值,因此内积为正代表权重向量给出了正确的判断,即这个权重向量是好 的。相反,对于上图左中的红色向量,其与输入向量的夹角是钝角,内积结果为负,意味着其将输入样本判定 为负,所以是不好的向量。对于上图右,输入样本是负例,因此需要好的向量与输入向量夹角为钝角,指向相 反的方向(即权重向量和输入向量指向超平面的两侧) 综上所述,对于任意给定的输入向量,只要某个权重向量指向了正确的方向,那么就能得到正确的答案。进一 步地,如果在同一张图里同时画出正例和负例样本,会怎么样呢? 感知机向量应该在某个锥体中 上图中,正例样本和负例样本确定的两个超平面又定义了一个锥体(cone),所有落在这个锥体中的权重向量 对这两个样本都能给出正确的结果。这个例子可以容易地扩展到多个样本的情况——当然,有可能对于某个样 本集,不存在可以将所有样本都正确分类的向量。但是如果这样的权重向量存在,它必然会存在于某个锥体 中。此外,另一个需要注意的事实是,对于任意两个满足条件的权重向量(即这两个向量都在合适的锥体 中),它们的均值也会满足最优条件。这意味着这个问题是凸的,而凸学习问题(凸优化问题)往往容易解决 为什么感知机算法能够工作 本节将(从几何的角度)证明为什么感知机算法能最终落入最优解的凸锥中(更理论的证明可以参看林轩田老 师的课程笔记)。假设存在一个权重向量能够对训练集的所有样本正确分类,并称该向量为可行向量,以及当 前向量错分了某个样本,记为错误向量,如下图所示