我正在尝试学习神经网络如何在图像识别上工作。我看过一些例子,变得更加困惑。在20x20图像的字母识别示例中,每个像素的值成为输入层。因此有400个神经元。然后是神经元的隐藏层和26个输出神经元。然后训练网络,然后工作,并不完美。
我对神经网络感到困惑的是,它如何了解图像中的内容。您无需进行阈值,分割或测量,网络就可以通过某种方式学习比较图像并进行识别。现在对我来说就像魔术。从哪里开始学习神经网络?
我正在尝试学习神经网络如何在图像识别上工作。我看过一些例子,变得更加困惑。在20x20图像的字母识别示例中,每个像素的值成为输入层。因此有400个神经元。然后是神经元的隐藏层和26个输出神经元。然后训练网络,然后工作,并不完美。
我对神经网络感到困惑的是,它如何了解图像中的内容。您无需进行阈值,分割或测量,网络就可以通过某种方式学习比较图像并进行识别。现在对我来说就像魔术。从哪里开始学习神经网络?
Answers:
在研究1980年代福岛邦彦教授在新认知技术上的工作时,我对神经网络如何学会对像图像数据这样复杂的事物进行分类的一个主要见解。他不只是向网络显示一堆图像,而是使用反向传播让它自己解决问题,他采取了另一种方法,并逐层甚至逐节点地训练了网络。他分析了网络中每个节点的性能和操作,并有意修改了这些部分,以使它们以预期的方式做出响应。
例如,他知道他希望网络能够识别线,因此他训练了特定的层和节点以识别三像素水平线,三像素垂直线以及对角线在所有角度的特定变化。通过这样做,他确切地知道了当存在所需模式时可以触发网络的哪些部分。然后,由于每一层都是高度连接的,因此整个新认知子整体上可以识别图像中存在的每个复合部分,无论它们实际存在于何处。因此,当图像中某处存在特定的线段时,总会有一个特定的节点触发。
保持这种状态不变,请考虑线性回归,它只是通过平方误差的总和找到一条公式(或一条线),该公式最紧密地贯穿您的数据,这很容易理解。要找到弯曲的“线”,我们可以进行相同的乘积计算总和,除了现在我们添加一些x ^ 2或x ^ 3甚至更高阶多项式的参数。现在,您有了逻辑回归分类器。该分类器可以找到本质上不是线性的关系。实际上,逻辑回归可以表示任意复杂的关系,但是您仍然需要手动选择正确数量的幂函数,才能很好地预测数据。
思考神经网络的一种方法是将最后一层视为逻辑回归分类器,然后将隐藏层视为自动“特征选择器”。这省去了手动选择正确数量和功能的输入功能的工作。因此,NN成为自动的功率特征选择器,可以找到任何线性或非线性关系, 或者用作任意复杂集的分类器**(仅假设存在足够的隐藏层和连接来表示复杂性)。需要学习的模型)。最后,一个运行良好的NN不仅要学习输入和输出之间的“关系”,而且还要努力寻求一种抽象或模型来概括得很好。
根据经验,在足够长的时间内,神经网络无法从相同数据中学到任何合理的智能理论上无法学到的东西,但是,
您可能已经听说过,神经网络是“ 通用函数逼近器 ”。本质上,Cybenko定理说,对于将实数映射为实数的任何函数,都可以使用带有S型激活函数的神经网络对其进行近似。实际上,事实证明,神经网络允许您计算可由Turing机器计算的任何函数(即您可以编写算法进行计算的任何函数)。不幸的是,这些证据仅表明,对于神经元和权重的某些有限配置,您可以近似任何功能。
这个理论很好,但您的问题似乎更多地是关于如何将某些函数的计算实际编码为一组神经元和权重。为了说明,请考虑一个简单的示例-“异或”。XOR接受两个输入,并传递这些输入。当输入中只有一个输入被激活时,输出节点将被激活。如果同时激活两个输入或不激活任何输入,则不会激活输出节点。
请注意,三个隐藏节点执行不同的操作。最左边和最右边的节点只是通过相应的输入节点激活。中间神经元接受两个输入,并且如果两个输入都打开,则以某种方式取反。输入的这种巧妙的组合和重组实质上就是完成神经网络工作的方式。
显然,对于更复杂的功能,必须以更聪明和更复杂的方式进行合并和重新组合,但这本质上是在较低级别上发生的。疯狂的是,这实际上是计算任何可计算函数所需的全部!再说一次,图灵机也看似很简单。
问题在于我们真的没有办法神奇地生成计算任意函数的神经网络。证据只告诉我们,有一些网络可以做到这一点。当我们训练神经网络时,我们只是试图找到一个非常接近的网络。
在图像识别的上下文中,您可以想象将编码模式编码到网络中。例如,要识别数字“ 1”,您可以想象一个隐藏的节点,该节点期望一列像素被大部分或全部激活,而相邻像素处于关闭状态。这个隐藏的节点可能相当擅长识别该特定列中的一条直线。将这些足够的放在一起,很快您就会在图像的足够多的地方拥有一堆节点,如果我向网络显示一个节点,则会激活足够的直线隐藏节点,并指示为“ 1”。当然,问题在于网络的普遍化,因此它可以识别各种输入。
希望这可以帮助您或多或少地了解神经网络如何执行计算的概念。但是,您遇到了一个对于神经网络非常重要的观点:通常,最多很难理解为什么网络会吐出特定的输出,尤其是当您考虑到对于图像识别之类的东西时,尤其如此足够大,以至于人类很难理解机器的每个运动部件。使问题进一步复杂化的是,通常大多数神经网络实际上对于网络可以了解数据的每个小功能实际上都没有一个隐藏节点。取而代之的是,在许多隐藏节点上以非集中方式检测类似于直线的数字来对数字“ 1”进行分类。其他算法
如果您需要更多阅读内容,我强烈建议您在AI Junkie上通读本教程。它向您介绍了神经网络如何工作的基础知识,甚至给出了一个简单的代码示例,让神经网络将坦克推向目标。但是,本教程没有介绍反向传播,它是迄今为止最常见的训练神经网络的方法,而是使用一种简单的遗传算法。一旦他开始谈论遗传学,我想你可以停止阅读了。
我还要提到非常流行的图像识别卷积神经网络。这是CNN简化说明的链接。
简要地说,在CNN中,图像首先被划分为特征,例如边缘,形状,形状集合。然后将这些特征“馈入”到“常规”完全连接的多层神经网络(多层感知器)中。
更详细地,应用一组过滤器以特征图的形式提取特征。过滤器只是应用于原始图像的矩阵(开头是随机的),因此可以计算原始图像矩阵与过滤器矩阵的点积,并对结果求和。滤镜一次沿原始图像移动一个像素(该步骤),并且正在填充特征图矩阵。为每个过滤器创建一个特征图。然后针对每个特征图中的每个像素,使用RELU(Rectified Linear Unit)引入非线性。在卷积之后,通过应用max(),sum()或average()进行合并。最后,以这种方式提取的特征看起来像原始图像的“放大”部分。这些特征输入到完全连接(所有单元都连接)的神经网络中,并在每次前馈通过网络后计算出每个图像的概率(假设我们在汽车,树木和船只的图像上训练了我们的网络)。网络经过训练,这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。这意味着参数(权重)和滤波器矩阵是通过反向传播(错误分类错误的最小化)进行优化的。当将新图像输入到经过训练的网络中时,只需前馈即可识别该图像(前提是网络足够准确,即我们用足够的示例对它进行了训练等)。