塞弗里奇的鬼域模型与模式识别
塞弗里奇的鬼域模型奥利弗·塞弗里奇(OliverSelfridge,1926~2008)是模式识别的奠基人。他曾参与达特茅斯会议,是人工智能研究的重要发起人之一。他在1959年发表了论文“鬼域(Pandemonium)模型:一种学习的范式”。
Pandemonium[ˌpændəˈməʊniəm]一词,首次出现在17世纪英国诗人约翰·弥尔顿的史诗《失乐园》中。《失乐园》是以圣经《旧约·创世纪》为基础创作的史诗,讲述了这么一个故事:堕落天使路西法(撒旦)反叛上帝失败后,重新振作,运用谋略化身为蛇,引诱亚当和夏娃违反上帝的禁令、偷尝善恶树的果实,导致人类被逐出伊甸园。
《失乐园》中写到了Pandemonium的情景:“一次庄严的全体大会将马上召开,地点就在地狱之都,撒旦和他的重臣们穷奢极欲的议会大厦。”
Pandemonium是地狱之都,简译为“鬼域”,其引申意义为“喧闹、骚动”,我们可以联想到众多魔鬼(Demon)群魔乱舞、鬼哭狼嚎的情景。画家约翰·马丁有两幅以鬼域为主题的著名画作。
约翰·马丁1841年画作,鬼域(Pandemonium)约翰·马丁1823–1827画作,撒旦主持地狱议会在塞弗里奇的鬼域模型中有四种Demon。Demon的本意为魔鬼、幽灵,这里避免过于严肃,将Demon翻译为“小鬼”。这四种小鬼分别是:
数据/图像小鬼(Data/ImageDemon):负责记录和传递输入的数据或图像。
特征小鬼(FeatureDemon):每一个特征小鬼负责某个特征。当检测到自己负责的特征时大叫一声(Yell)
认知小鬼(CognitionDemon):负责观察特征小鬼的叫声。每个认知小鬼负责特定的模式,比如字母R。
决策小鬼(DecisionDemon):听取认知小鬼的叫声(yelling),选择叫声最大的小鬼作为结果来输出。
鬼域模型示意图上面这幅图很形象地描述了四种小鬼各自的角色和分工。首先,数据或图像小鬼从外部接收输入,传递到下一阶段的特征小鬼。特征小鬼检测到自己负责的特定模式时,就大叫一声;认知小鬼观察到特征小鬼的叫声后,如果发现与自己负责的模式非常吻合,就发出很大的声音,比如负责“R”的这个小鬼,声音最大。最后决策小鬼根据声音最大的认知小鬼,来输出识别的结果。
在这个模型中,很多的小鬼同时大喊大叫、非常嘈杂,这类似于”Pandemonium“中群魔乱舞的景象。“鬼域模型”因此而得名。
理想版的鬼域模型
理想版的鬼域模型,结构相对简单。认知小鬼直接面对原始的数据或图像输入,按照自己负责的模式来进行综合判断。这种模型的弊端在于,每个认知小鬼进行的“工作”(计算),是高度同质化的,各自的分工并不明确。因此最终的识别效果并不佳。这类似于没有隐藏层的单层神经网络。
鬼域模型的理想版没有隐藏层的单层神经网络实用版鬼域模型
在实用版的鬼域模型中,增加了特征小鬼一层。特征小鬼对输入数据或图像进行了一层“粗加工”,提取更加抽象的特征,作为认知小鬼的输入。这样认知小鬼可以基于这些更加抽象的特征,去进行更高层次的“模式”的识别,各自的分工更为明确,最终提供给决策小鬼的输出也更具差异化,使得模型的整体识别效果变得更好。
鬼域模型的实用版具有隐藏层的多层神经网络鬼域模型对机器学习的启发
鬼域模型对机器学习的发展,起到了重要的启发作用,其中也出现了现代机器学习中耳熟能详的许多概念的雏形。这些概念在下表中详细列出。
机器学习的许多概念源起于鬼域模型下面我们以一个手写数字模型的例子,来看看模型的完整构建流程,了解机器学习中的一些基本的概念及其作用。同时,我们通过这个模型来展示“鬼域模型”中的“数据小鬼”、“特征小鬼”、“认知小鬼”、“决策小鬼”在机器学习算法中的具体体现。
识别手写数字的“鬼域模型”MNIST数据集
MNISt数据集全称为“修改后的美国国家标准与技术研究院数据库(ModifiedNationalInstituteofStandardsandTechnologydatabase)”,是0~9这十个手写数字的图像数据库。它创建于1998年,包含60000张训练图像和10000张测试图像,全部由美国普查局(AmericanCensusBureau)员工和美国中学生手写生成。
在MNIST数据集中,每张图都被归一化为28x28像素的灰度图。常用于训练和测试各类图像处理系统,在模式识别和机器学习算法的研究中发挥了重要的作用。
Mnist数据集示例带标签的MNIST数据集。每个标签D(0~9)代表数字为D的那一类图片有了数据集之后,我们先要对数据集进行一个划分。我们一般将数据集划分为训练集、测试集、验证集。其中训练集,用来训练模型,占数据集的主要部分;测试集,用来评估训练好的模型。训练集与测试集比例,一般为8:2或7:3;验证集用来在训练过程中验证模型,辅助调参,减少过拟合(Overfitting)的风险。
数据集的划分打个比方,训练集就是我们学习时的练习册。我们可以边做题目,边看答案,通过及时纠正错误来加深对每个知识点的认知;验证集就是模考试卷,做完后再统一对答案,不断调整学习方式方法;而测试集,就是期末考试或高考试卷,考分是多少就是多少,直接评估一个人的知识水平。
模型的输入
毕达哥拉斯说过“万物皆数”,自然界的一切现象和规律都是由数决定的,都必须服从“数的和谐”,即服从数的关系。老子《道德经》中写道:道生一,一生二,二生三,三生万物。
这两位哲学家表达的意思是,万事万物与数有着千丝万缕的联系,复杂物质和现象往往是由简单的几个要素决定。而对于计算机来说,万事万物均可用一组数字(向量)来描述和表示,万物皆可向量化,而且必须向量化,计算机才能够进行计算和理解。
作为输入图像的“7”:可以用图像的所有像素组成的向量来表达作为样本标签的“7”:用独热(One-Hot)编码表达模型的选择与结构设计
准备好了输入数据后,我们需要构建一个模型。我们这里选用包含一个隐藏层的多层神经网络作为我们的模型。首先,我们将一张28乘28的图片,压平成一个784维的一维向量X,通过输入层输入到模型。
输入层与隐藏层之间的连线,是第一组权重参数,权重与输入相乘之后的结果输入到隐藏层,再与隐藏层与输出层之间的一组权重参数相乘,最终通过输出层的节点输出结果。所以整个模型的权重参数W是包含和两部分的一个高维向量。
输出层的节点数量,与模型要识别的数字类别的数量相等。这里我们要识别0~9这10个数字,所以就有10个输出节点。
模型的构建定义损失函数-交叉熵
英国统计学家乔治·博克斯(GeorgeBox):“所有模型都是错的,但有些是有用的。”
如何衡量模型的错误?我们用损失函数来衡量。损失函数衡量模型输出与样本标签之间差距,用于在训练过程中迭代更新模型参数组(W)。在多分类任务中,常用的损失函数是交叉熵(Cross-entropy)。
输入数字图像后,神经网络模型输出一个10维的向量,分别对应10个数字标签。然后,通过Softmax函数,将这个向量进行归一化,得到一个概率向量(下图的第二列数字)。这个概率向量的每一维求和,结果等于1。这个向量的每一维表示输入是对应的数字的概率。
在概率向量中,0.648表示输入是数字“7”的概率,是所有概率里边最大的。然后,通过交叉熵来计算最终的损失。把标签向量的每一维与概率向量每一维的负对数相乘后,再求和,就得到交叉熵损失。但是因为标签向量只有下标7对应的数字为1,所以实际结果就是1乘以0.648的负对数,也就是0.626。
模型训练的目标,是使得对于每个输入数字,交叉熵的值都越来越小。
损失函数的计算过程交叉熵损失:,。因为标签向量只有一维是1,其他维都是0,所以交叉熵损失实际上就是概率向量对应维度上的概率值的负对数。从负对数函数的图像可以看出,与样本标签对应的概率值越大,则损失就越小。即概率值越接近于1,交叉熵就越小。
与样本标签对应的概率值越大,损失(Loss)越小。实际上,是权重向量的函数,而 又是一个高维向量,在神经网络模型中,维度可能达到10万、100万。,。
所以,这是一个非常复杂的高维优化问题。下图我们展示的是二维的优化过程,因为更高维度,我们就无法进行可视化了。我们可以用梯度下降法(GradientDescent)来寻找使得
最小的。SGD、Momentum、NAG、Adagrad等是梯度下降法的变体,对不同的损失函数需要选用最合适的优化算法。
各种优化算法的优化过程模型效果的衡量
模型训练好之后,就需要衡量模型的效果。我们训练好的模型,对MNIST测试集中的所有样本进行预测(10000),并得到混淆矩阵(ConfusionMatrix)。混淆矩阵的每一列是某一类的预测样本,而每一行是某一类的真实样本。然后我们就可以计算以下的一些指标:
精度(Precision):预测为数字D的样本中,实际为数字D的比例,其中D为0~9之间的数字。
召回率(Recall):实际为数字D的样本,被预测为数字D的比例
准确率(Accuracy):预测正确的样本数/总样本数。下图中,整体准确率等于对角线绿色部分数字之和9195,它与总样本数10000的比值,即为准确率91.95%。
混淆矩阵示意图模型可视化—无隐藏层单层网络
无隐藏层的单层网络,对应于鬼域模型的理想化版本。其中的每个输出节点,相当于鬼域模型中的认知小鬼,各自负责一种模式,即负责识别某个数字。这里,我们对每个输出节点的权重进行可视化,展示在右边。
比如下图中,“节点0”对应的图片,就是连接输入与0这个输出节点之间的权重的可视化。从权重可视化图中我们可以隐约看到,每个节点负责的模式与它实际代表的数字是非常相似的。但是这里,各个节点的分工不明确,比如节点7和节点8的模式,相似度很高。当输出介于两者之间时,结果就容易混淆,从而出现识别错误。
每个输出层节点的权重可视化图模型可视化—含隐藏层的多层神经网络
含隐藏层的多层神经网络,对应于鬼域模型的实用化版本。其中的每个隐藏节点,相当于鬼域模型中的特征小鬼,负责从输入数据中提取抽象特征。这里,我们看到每个隐藏节点(特征小鬼)对应的图像,已经比较难看出是对应于具体的数字了,而是一些抽象的符号。
输出层(认知小鬼),基于隐藏层的这些特征,做出进一步的判断,输出自己负责的数字的识别强度。比如数字5对应的节点,检测到、、、这几个节点的特征比较明显时,就会以最高的信号强度输出“5”,作为决策小鬼进行最终判断的依据。
隐藏层节点,相当于鬼域模型中的特征小鬼。输出层节点相当于决策小鬼。模式识别与机器学习以上我们通过实际的示例,完成了一个“模式识别”的过程。我们知道,在概念外延上,人工智能>机器学习>深度学习。那塞弗里奇所开创的“模式识别”,应该放在下面的概念图中的什么位置?
人工智能概念的范畴这里我们对比一下模式识别与机器学习的区别,主要有四点:
模式识别与机器学习的区别随着深度学习的进展,机器学习与模式识别的概念边界逐步模糊起来,我们也经常会混用两个概念,但实际上,目前“机器学习”比“模式识别”是更为流行的。
“模式识别起源于工程学,而机器学习发起于计算机科学。但它们可以视为同一个领域的两个侧面…”——《模式识别与机器学习》,ChristopherBishop,2006
现代机器学习的流程以下列出了现代机器学习算法的一个大体应用流程。不论什么算法,都是以数据作为出发点,经过各种特征工程以及反复的模型训练调优之后,部署到生产环境,发挥实际的作用。同样,模型也尤其自身的生命周期。如果模型的结果出现下降或者不再适用于问题的求解,那模型就会面临着更新、迭代甚至下线的处理。
机器学习的大体流程以下为本文的同步视频: