目录
图像识别简介
神经网络
感知器
前馈神经网络
自动编码器
受限玻尔兹曼机
深度卷积网络
理解图像内容以及图像含义方面,计算机遇到了很大困难。本章先介绍计算机理解图像教育方面 遇到的难题,接着重点讲解一个基于深度学习的解决方法。我们会学习配置深度学习模型的高层 次理论,并且讨论如何使用一个Java库——Deeplearning4j实现对图像进行分类的模型。
本章涵盖如下内容:
图像识别简介
讨论深度学习基础
创建一个图像识别模型
图像识别简介
图像识别的典型目标是从一幅数字图像中检测并识别一个对象。图像识别可以应用于工厂自 动化系统,以监督产品质量;也可以应用于监控系统,以识别潜在的危险行为,比如行人或移动 的车辆;还可以应用到=于安保系统,以通过指纹、虹膜、面部特征进行生物特征识别;以及应 用于汽车自动驾驶技术,以重建路面与环境条件等。
数字图像不以带有属性描述的结构化方式呈现,相反,它们会被编码为不同通道中的颜色数 量,比如黑白与红绿蓝通道。学习的目标是识别与特定对象相关联的模式。传统的图像识别 方法是,将一幅图像转换为不同形式,比如识别对象的角点、边缘、同色斑点与基本形状。然后 使用这些模式训练学习器,使之能够区分不同对象。下面列出了一些有名的传统图像识别算法。
边缘检测:查找一幅图像中对象的边界。
角点检测:识别两条边的交叉点或者其他感兴趣的点,比如行尾结束符号、曲率极大值/ 极小值等。
斑点检测:识别与周边区域有不同特征的区域,比如亮度、颜色。
岭检测:使用平滑函数识别图像中的兴趣点。
尺度不变特征变换(SIFT):这个算法十分强大,即使目标对象大小或方向与比对数据库 中的典型样本不同,它依然能够匹配目标对象。
霍夫变换(Hough transform):识别图像中的特定模式。
目前,图像识别使用的最新方法是深度学习技术。深度学习是神经网络的一种,它模仿了大 脑处理信息的方法。深度学习的主要优点是,我们可以设计神经网络自动提取相关模式,这些模 式反过来用于训练学习器。随着神经网络技术最新取得进展,图像识别精度得到了明显提升。比 如,ImageNet挑战赛(ImageNet,2016)中,主办方提供了120万张图像,这些图像分别来自1000 个不同分类,最佳算法的错误率由28%(2010年,利用SVM)降低到7%(2014年,利用深度神 经网络)。
本章将简单了解神经网络,从最基本的构建块——感知器开始,逐渐引入更复杂的结构。
神经网络
神经网络最早出现在20世纪60年代,其灵感来自生物神经网络的研究。神经网络最新研究成 果表明,深度神经网络非常适合用于模式识别任务,因为它们能够自动提取有趣特征,并且学习 底层表示。这部分内容中,我们将学习从单个感知器到深度网络的基本结构与组件。
感知器
感知器是神经网络最基本的构建单元,也是最早的监督算法之一。它定义为,用权值对输入 进行加权并加上偏置。求和函数称为“和传递函数”(sum transfer function),它被送到一个激 活函数(activation function)。如果激活函数到达阈值,输出为1,否则为0。这就为我们提供了 一个二元分类器。感知器神经元模型如图
训练感知器使用的学习算法相当简单:先在计算输出值与正确的训练输出值之间计算误差, 然后根据误差调整权重,从而实现某种形式的梯度下降算法。这个算法通常称为delta规则。
单层感知器不是很先进,非线性可分函数(比如XOR)不能用它建模。为了解决这个问题, 人们引入了多个感知器结构,称为多层感知器,也叫前馈神经网络。
前馈神经网络
前馈神经网络是由多个感知器组成的人工神经网络,这些感知器按层组织,可分为:输入层、 输出层、一个或多个隐藏层,如图所示。每层感知器(也叫神经元)与下层感知器直接相连, 两个神经元之间的连接带有一个权重,类似于感知器权重。图8-2显示的是一个带有四元输入层 的网络(对应于长度为4的特征向量)、四元隐藏层,以及二元输出层,每元对应于一个类值。
训练多层网络最流行的方法是反向传播算法。这种算法中,采用与delta规则一样的方式,将 计算得到的输出值与实际输出值进行比较。然后借助各种技术,通过网络反馈误差,调整每个连 接的权重,以便减小误差值。这个过程不断重复,达到足够多的训练周期,直到错误少于某个特 定阈值。
前馈神经网络可以拥有一个以上的隐藏层,每一个新增隐藏层在先前层之上创建一个新的抽 象。这样做通常可以让模型变得更精确,但增加隐藏层数目会导致如下两个问题。
消失的梯度问题:随着隐藏层的增多,将信息传递到先前层时,反向传播训练方法变得 越来越无用,这会导致先前层训练很慢。
过拟合:模型对训练数据拟合过度,对于真实样本表现糟糕。
接下来,了解用来处理这些问题的其他网络结构。
自动编码器
自动编码器(Autoencoder)是一种前馈神经网络,其目标是学习如何压缩原数据集。我们不 是将特征映射到输入层以及将标签映射到输出层,而是将特征同时映射到输入与输出层。隐藏层 的元数与输入层的元数通常是不同的,这会强制网络要么扩展,要么减少原特征的数量。借助这种方式,网络会学习那些重要特征,进而有效进行维数缩减。
图是一个自动编码器的例子。如图所示,首先三元输入层扩展为四元层,然后压缩成一 元层。在网络的另一侧将一元层恢复为四元层,然后再恢复为原来的三元输入层。
一旦网络训练好之后,我们就可以利用左侧网络提取图像特征,就像我们在传统图像处理中 所做的那样。
还可以将多个自动编码器组成堆叠式自动编码器,如图8-4所示。前面已经对最基本的自动 编码器做了讲解,这里要讨论其隐藏层。然后,选取学好的隐藏层(圆圈),并且重复这个步骤, 学习更多的抽象表示。可以多次重复这个过程,将原特征转换为越来越少的维数。最后,选择所 有隐藏层,将其堆叠为一个规则的前馈网络,如图
受限玻尔兹曼机
受限玻尔兹曼机(Restricted Boltzman machine,RBM)是一种无向神经网络,也称为生成式随机神经网络(Generative Stochastic Networks,GSN),它能够在输入集之上学习概率分布。 顾名思义,它起源于玻尔兹曼机(Boltzman machine),这是一种20世纪80年代出现的循环神经网 络。“受限”是指神经元必须组成两个全连接层——输入层与隐藏层,如图
不同于前馈网络,可见层与隐藏层之间的连接是无向的。
因此,值可以沿着“可见隐藏” 与“隐藏可见”方向传播。 受限玻尔兹曼机的训练基于对比散度算法(Contrastive Divergence),使用类似反向传播的 梯度下降过程更新权重,将吉布斯采样(Gibbs sampling)应用到马尔可夫链以评估梯度——权 重的改变方向。
我们也可以堆叠受限玻尔兹曼机,形成深度信念网络(Deep Belief Networks,DBN)。此情 形之下,RBM的隐藏层充当RBM层的可见层,如图
训练是渐进式的,即逐层训练。
深度卷积网络
最近,在图像识别测试中取得很好效果的一种网络结构是卷积神经网络(Convolutional Neural Network,CNN)。它是前馈神经网络的一种,模拟视觉皮层的行为,用于探索输入图像 的2D结构,即展现空间局部相关性的模式。
CNN网络由若干卷积与子采样层组成,后面可以有全连接层。图8-7显示的是一个CNN网络。 输入层读取一幅图像中的所有像素,然后应用多个过滤器。图中应用了4个不同的过滤器。每个 过滤器都应用到原图像,比如一个6×6过滤器的一个像素被计算为输入像素的6×6平方与相应的 6×6权重之和。这实际引入了与处理标准图像类似的过滤器,比如平滑、相关、边缘检测等。这 样产生的结果图像称为特征图(feature map)。
图像例子中,我们有4个特征图,每一个对应一 个过滤器。 接下来的层是子采样层,它用于减少输入大小。在2×2的连续区域上(大图像高达5×5), 通常采用平均值或最大池化(max pooling)方法,对每个特征图做子采样。比如,如果特征图大 小是16×16,子采样区域是2×2,缩减后的特征图尺寸是8×8,通过计算最大、最小、平均值或 者用其他函数,将4个像素(2×2方格)合并成一个像素。
网络可以包含几个连续卷积与子采样层,如图所示。一个特定的特征图会被连接到下一 个缩减/卷积特征图,而相同层上的特征图不会彼此相连。
在最后的子采样层或卷积层之后,通常会有一个全连接层(与标准多层神经网络中的层完全 相同),表示目标数据。
CNN训练采用修改过的反向传播算法,它会把子采样层也一起考虑进来,并且基于所有应用 过滤器的值更新卷积过滤器的权重。
至此,我们大致了解了主要的神经网络结构。接下来,我们将学习如何实际实现。