神经网络如何识别图像?


25

我正在尝试学习神经网络如何在图像识别上工作。我看过一些例子,变得更加困惑。在20x20图像的字母识别示例中,每个像素的值成为输入层。因此有400个神经元。然后是神经元的隐藏层和26个输出神经元。然后训练网络,然后工作,并不完美。

我对神经网络感到困惑的是,它如何了解图像中的内容。您无需进行阈值,分割或测量,网络就可以通过某种方式学习比较图像并进行识别。现在对我来说就像魔术。从哪里开始学习神经网络?


1
如果我正确理解的话,神经网络只是某些抽象空间中的多维表面,局部极端会导致可能的选择。教一个神经网络只是在调整抽象表面以适应其任务。这是我的愚蠢理解。

因此,您需要解释或资源来开始使用NN吗?需要澄清。

2
(目前)在Coursera上有一个不错的免费课程,专门针对您的问题。 coursera.org/course/neuralnets

Coursera NN课程看起来像是高级课程,不如入门课程。例如,Andrew Ng在Youtube上有一些更柔和的介绍。
道格拉斯·扎里

实际上,Coursera课程确实取得了进步,但是它肯定会建立起来,并且可以很好地回答OP的问题。在数字识别方面也有很多例子。
克里斯·A

Answers:


24

在研究1980年代福岛邦彦教授在新认知技术上的工作时,我对神经网络如何学会对像图像数据这样复杂的事物进行分类的一个主要见解。他不只是向网络显示一堆图像,而是使用反向传播让它自己解决问题,他采取了另一种方法,并逐层甚至逐节点地训练了网络。他分析了网络中每个节点的性能和操作,并有意修改了这些部分,以使它们以预期的方式做出响应。

例如,他知道他希望网络能够识别线,因此他训练了特定的层和节点以识别三像素水平线,三像素垂直线以及对角线在所有角度的特定变化。通过这样做,他确切地知道了当存在所需模式时可以触发网络的哪些部分。然后,由于每一层都是高度连接的,因此整个新认知子整体上可以识别图像中存在的每个复合部分,无论它们实际存在于何处。因此,当图像中某处存在特定的线段时,总会有一个特定的节点触发。

保持这种状态不变,请考虑线性回归,它只是通过平方误差的总和找到一条公式(或一条线),该公式最紧密地贯穿您的数据,这很容易理解。要找到弯曲的“线”,我们可以进行相同的乘积计算总和,除了现在我们添加一些x ^ 2或x ^ 3甚至更高阶多项式的参数。现在,您有了逻辑回归分类器。该分类器可以找到本质上不是线性的关系。实际上,逻辑回归可以表示任意复杂的关系,但是您仍然需要手动选择正确数量的幂函数,才能很好地预测数据。

思考神经网络的一种方法是将最后一层视为逻辑回归分类器,然后将隐藏层视为自动“特征选择器”。这省去了手动选择正确数量和功能的输入功能的工作。因此,NN成为自动的功率特征选择器,可以找到任何线性或非线性关系, 或者用作任意复杂集的分类器**(仅假设存在足够的隐藏层和连接来表示复杂性)。需要学习的模型)。最后,一个运行良好的NN不仅要学习输入和输出之间的“关系”,而且还要努力寻求一种抽象或模型来概括得很好。

根据经验,在足够长的时间内,神经网络无法从相同数据中学到任何合理的智能理论上无法学到的东西,但是,

  • 它可能能够学习到没人想过的东西
  • 对于大问题,一堆处理神经网络的计算机可以比一组人更快地找到真正好的解决方案(成本要低得多)
  • 一旦训练有素的NN将产生与他们训练有素的输入一致的结果,并且如果进行适当的调整应能很好地推广
  • NN永远不会感到无聊或分心

1
+1关于在隐藏层的要素选择之上最后一层如何进行逻辑回归的段落。这是思考NN的好方法。
jlund3 2012年

谢谢,但是我要澄清的是,我并不是在说每个ANN的最后一层实际上是一个逻辑回归层,而只是说这是可以解决许多问题的一种可能的配置。由于大多数情况下是随机的,因此我们通常训练ANN的可能性最大,任何结果回归都以非常随机的方式分布在许多节点和层上。可以训练子网以特定方式做出响应,然后将其输出泵入回归层,以针对特定问题手工制作专用网络。使ANN在内存和速度方面都非常高效。
mcstar

1
这个答案一直在引起人们的关注,所以我想指出的是它已有5年的历史了,只考虑前馈全连接网络。尽管此处的概念见解仍然有效,但它们不足以使从业人员无法理解在过去十年中已成为标准的深层NN概念。卷积神经网络(CNN)是一项非常重要的现代改编,它通过允许深度网络定位边缘,对比度,清晰度,色彩空间,阴影等,并使用它们来确定低级特征的上下文,从而为深度网络提供了强大的功能。
mcstar

10

您可能已经听说过,神经网络是“ 通用函数逼近器 ”。本质上,Cybenko定理说,对于将实数映射为实数的任何函数,都可以使用带有S型激活函数的神经网络对其进行近似。实际上,事实证明,神经网络允许您计算可由Turing机器计算的任何函数(即您可以编写算法进行计算的任何函数)。不幸的是,这些证据仅表明,对于神经元和权重的某些有限配置,您可以近似任何功能。

这个理论很好,但您的问题似乎更多地是关于如何将某些函数的计算实际编码为一组神经元和权重。为了说明,请考虑一个简单的示例-“异或”。XOR接受两个输入,并传递这些输入。当输入中只有一个输入被激活时,输出节点将被激活。如果同时激活两个输入或不激活任何输入,则不会激活输出节点。

一种三层Perceptron网络,能够计算从维基百科借来的XOR。

请注意,三个隐藏节点执行不同的操作。最左边和最右边的节点只是通过相应的输入节点激活。中间神经元接受两个输入,并且如果两个输入都打开,则以某种方式取反。输入的这种巧妙的组合和重组实质上就是完成神经网络工作的方式。

显然,对于更复杂的功能,必须以更聪明和更复杂的方式进行合并和重新组合,但这本质上是在较低级别上发生的。疯狂的是,这实际上是计算任何可计算函数所需的全部!再说一次,图灵机也看似很简单。

问题在于我们真的没有办法神奇地生成计算任意函数的神经网络。证据只告诉我们,有一些网络可以做到这一点。当我们训练神经网络时,我们只是试图找到一个非常接近的网络。

在图像识别的上下文中,您可以想象将编码模式编码到网络中。例如,要识别数字“ 1”,您可以想象一个隐藏的节点,该节点期望一列像素被大部分或全部激活,而相邻像素处于关闭状态。这个隐藏的节点可能相当擅长识别该特定列中的一条直线。将这些足够的放在一起,很快您就会在图像的足够多的地方拥有一堆节点,如果我向网络显示一个节点,则会激活足够的直线隐藏节点,并指示为“ 1”。当然,问题在于网络的普遍化,因此它可以识别各种输入。

希望这可以帮助您或多或少地了解神经网络如何执行计算的概念。但是,您遇到了一个对于神经网络非常重要的观点:通常,最多很难理解为什么网络会吐出特定的输出,尤其是当您考虑到对于图像识别之类的东西时,尤其如此足够大,以至于人类很难理解机器的每个运动部件。使问题进一步复杂化的是,通常大多数神经网络实际上对于网络可以了解数据的每个小功能实际上都没有一个隐藏节点。取而代之的是,在许多隐藏节点上以非集中方式检测类似于直线的数字来对数字“ 1”进行分类。其他算法

如果您需要更多阅读内容,我强烈建议您在AI Junkie上通读本教程。它向您介绍了神经网络如何工作的基础知识,甚至给出了一个简单的代码示例,让神经网络将坦克推向目标。但是,本教程没有介绍反向传播,它是迄今为止最常见的训练神经网络的方法,而是使用一种简单的遗传算法。一旦他开始谈论遗传学,我想你可以停止阅读了。


感谢您一直以来所做的所有努力,并将所有这些文字和思想整理在一起。我对卷积神经网络用于图像识别特别感兴趣。我在OpenCV库中尝试了人脸检测示例,但发现它仅适用于刚性对象。神经网络在模式识别方面是否有类似的限制,即仅擅长于刚性物体?
user1731927 '10 -10-10

NN(或CNN)对其模式识别没有限制的理论上的理由,但是正如您已经发现的那样,某些问题比其他问题更容易学习。像机器学习中的许多问题一样,您可能需要稍微调整模型,以便它可以很好地解决您要解决的特定类型的问题,而NN也不例外。
jlund3 2012年

1
这是一篇有趣的论文,介绍了如何更好地将NN结构在一起以解决二维网格问题,例如图像分类。axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3 2012年

1
切线地,很难正确地对“非刚性”视觉对象进行分类,或者换句话说,即边缘没有干净线条的对象,这就是为什么即使大自然也认为伪装是一种出色的回避策略的原因。值得深思。
mcstar

2

那让你感到困惑的是

它如何了解图像中的内容。

图像中的内容由图像像素中的值数字表示。如果您以图像中的颜色为例。像素可以具有三个值,每个值用于三种主要颜色-红色,绿色和蓝色(RGB)。带有(10,50,100)的像素表示其蓝色元素要少于带有(40,50,100)的像素。因此,在图像中,第一像素代表具有较少蓝色的区域。这是神经网络从图像的一个位置/区域到另一位置/区域所学习的信息,最终“知道”图像中的内容。相同的原理适用于其他图像特征(除颜色之外),可用作神经网络的输入。看到这个这个关于基本的图像概念,然后转到这个 了解神经网络如何工作。


1

所有机器学习问题都是相同的。您有一些训练数据,学习表示该数据的模型,并能够通过使用不同算法进行聚类,分类和学习的方式来概括这些知识。

在图像识别中,您再次有一组要学习的图像。

  1. 首先处理这些图像,然后从图像中提取一些特征(很多可能的图像特征方案,如SIFT,Bag of WORDS),就像您使用像素及其值一样。
  2. 将这些图像与相应的特征向量一起提供给ML算法(神经网络,SVM或其他)。
  3. 学习模型
  4. 使用此模型来识别在训练数据上可以充分看到的对象。

如果要识别多个事物,请为每个事物使用多个分类器。


1

我还要提到非常流行的图像识别卷积神经网络。这是CNN简化说明的链接。

简要地说,在CNN中,图像首先被划分为特征,例如边缘,形状,形状集合。然后将这些特征“馈入”到“常规”完全连接的多层神经网络(多层感知器)中。

更详细地,应用一组过滤器以特征图的形式提取特征。过滤器只是应用于原始图像的矩阵(开头是随机的),因此可以计算原始图像矩阵与过滤器矩阵的点积,并对结果求和。滤镜一次沿原始图像移动一个像素(该步骤),并且正在填充特征图矩阵。为每个过滤器创建一个特征图。然后针对每个特征图中的每个像素,使用RELU(Rectified Linear Unit)引入非线性。在卷积之后,通过应用max(),sum()或average()进行合并。最后,以这种方式提取的特征看起来像原始图像的“放大”部分。这些特征输入到完全连接(所有单元都连接)的神经网络中,并在每次前馈通过网络后计算出每个图像的概率(假设我们在汽车,树木和船只的图像上训练了我们的网络)。网络经过训练,这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。


0

很高兴知道ANN可以为此创建任何函数f(x)或f(x,y,z,..)或任何多功能。但重要的是要知道函数在如何对数据进行分类方面有局限性...对象的幂集的关系子集更为复杂,这在分类中很重要,而这些函数并不能用优雅或自然的方式加以描述,但在语言和对象分类方面很重要。但是,人工神经网络也可以做到这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.