卷积神经网络是如何工作的?
什么是卷积神经网络?
卷积神经网络(Convolutional Neural Network)是一种前馈神经网络,其人工神经元可以对部分覆盖区域内的周围单元做出反应,对于大规模图像处理具有优异的性能。卷积神经网络由一个或多个卷积层和一个顶部完全连接层,以及相关的权值和池化层组成。这种结构使卷积神经网络能够利用输入数据的二维结构。与其他深度学习架构相比,卷积神经网络在图像和语音识别方面可以给出更好的结果。这个模型也可以使用反向传播算法进行训练。与其他深度前馈神经网络相比,卷积神经网络需要考虑的参数更少,这使其成为一种颇具吸引力的深度学习架构。
卷积神经网络(Convolutional Neural Network)在图像识别方面非常强大,很多图像识别模型也在CNN架构的基础上进行了扩展。另外值得一提的是,CNN模型是参照人类大脑的视觉组织建立的深度学习模型。学习CNN可以帮助我学习其他深度学习模型。
特点:
CNN比较了图像的各个部分,这些部分被称为特征。通过比较相似位置的粗糙特征,cnn更善于区分图像是否相同,而不是比较整个图像。图像中的每个特征就像一个更小的图像,也就是一个更小的二维矩阵,这些特征捕获了图像中的共同元素。
卷积:
每当CNN解析一个新图像时,如果不知道上面的特征在哪里,CNN就会比较图像中的任何地方。为了计算整个图像中有多少匹配的特征,我们在这里创建了一个过滤机制。这个机制背后的数学原理叫做卷积(convolution),这也是CNN这个名字的由来。
卷积的基本原理是计算特征与图像部分的符合度,如果将两者的每个像素值相乘,再除以像素的个数。如果两个图像的每个像素都匹配,将这些乘积相加,再除以像素数,得到1。反之,如果两个像素完全不同,则得到-1。重复上述过程,总结出图像中各种可能的特征,就可以完成卷积。根据每个卷积的值和位置,做出一个新的二维矩阵。这是经过特征过滤的原始图像,它可以告诉我们在原始图像的哪里可以找到特征。值越接近1的部分与特征越一致,值越接近-1,差异越大;至于值接近0的部分,则几乎完全没有相似之处。下一步是将同样的方法应用到不同的特征上,并在图像的各个部分进行卷积。最后,我们会得到一组经过过滤的原始图像,每一张图像对应一个特征。 Simply think of the entire convolution operation as a single processing step. In the operation of CNNs, this step is called a convolutional layer, which means that there are more layers to follow.
CNN的工作原理是计算密集型的。虽然我们可以在一张纸上解释一个CNN是如何工作的,但加法、乘法和除法的数量可以在这一过程中迅速增加。由于影响计算数量的因素如此之多,CNN处理的问题可能会变得非常复杂,这也难怪一些芯片制造商正在为CNN的计算需求设计和制造专门的芯片。
池:
Pooling是一种压缩图像并保留重要信息的方法。它的工作原理只需要数学的二级学位就可以理解。Pooling会在图像上选择不同的窗口,并在这个窗口范围内选择一个最大值。在实践中,边长为2或3的正方形是一个两像素步幅的理想设置。
原始图像被池化后,它所包含的像素数量会减少到原始图像的四分之一,但由于池化后的图像包含了原始图像中每个范围的最大值,所以它仍然保留了每个范围和每个范围。特征的一致性程度。汇集的信息更关注图像中是否有匹配的特征,而不是这些特征在图像中存在的位置。可以帮助CNN判断一个特征是否包含在图像中,而不必被特征的位置分散注意力。
池化层的功能是将一张或几张图片池化为较小的图片。我们最终得到了一张像素数相同,但像素更少的图像。有助于改善刚才提到的计算开销大的问题。提前将一张800万像素的图像减少到200万像素,可以让后续的工作更容易。
线性整流单元:
CNN的一个重要步骤是校正线性单元(ReLU),它在数学上将图像上的所有负数转换为0。这个技巧可以防止cnn接近0或无穷大。线性校正后的结果将与原始图像具有相同的像素数,只是所有负值将被替换为零。
深度学习:
原始图像经过过滤、校正、汇集后,会变成一组包含特征信息的小图像。然后再对这些图像进行过滤和压缩,它们的特征会随着每一次处理而变得更加复杂,图像也会变得更小。最后一个较低层次的处理层包含一些简单的特征,比如角落或者光点。高阶处理层包含更复杂的特征,比如形状或图案,而这些高阶特征通常很容易被识别。
完全连接层:
全连通层会在一个高层次上收集过滤后的图片,并将这个特征信息转化为选票。在传统的神经网络架构中,全连通层的作用是主要的初级构建块。当我们向这个单元输入图像时,它把所有像素值都当作一维列表,而不是以前的二维矩阵。列表中的每个值决定了图片中的符号是圆还是叉。由于有些值更善于辨别叉,有些值更善于辨别圆,所以这些值会比其他值获得更多的选票。所有值对不同选项所投的票数将用权重或连接强度来表示。所以,每当CNN对一个新图像进行评判时,该图像在到达完全连接层之前会经过许多较低的层。投票结束后,得票最多的选项就会成为这张图片的类别。
和其他层一样,多个全连接层可以组合,因为它们的输入(列表)和输出(选票)的形式相似。在实践中,可以将多个全连接层组合在一起,在其中的几个层上会出现几个虚拟的、隐藏的投票选项。每当添加一个全连接层,整个神经网络就能学习到更复杂的特征组合,做出更准确的判断。
反向传播:
反向传播的机器学习技巧可以帮助我们确定权重。要使用反向传播,需要准备一些已经有答案的图片,然后必须准备一个未经训练的CNN,其中任何像素、特征、权重和全连接层的值都是随机确定的。你可以用一个标记过的图像来训练这个CNN。
经过CNN的处理,每张图片最终都会有一轮选举来决定类别。与之前标记的正解相比,就是识别误差。通过调整特征和权重,减少了选举产生的误差。在每次调整后,这些特征和权重被微调高一点或低一点,误差被重新计算,成功减少误差的调整被保留。所以,当我们调整卷积层中的每个像素和全连通层中的每个权重时,我们可以得到一组对当前图像的判断能力稍好一些的权重。然后重复上面的步骤,识别出更多带标签的图像。在训练过程中,个别图片中的误判会过去,但这些图片中的共同特征和权重会保留下来。如果有足够多的标记图像,这些特征和权重的值最终会接近一个稳定的状态,能够很好地识别大多数图像。但反向传播也是一个计算成本非常高的步骤。
Hyperparameters:
- 每个卷积层应该有多少个特征?每个特征中应该有多少像素?
- 每个池化层的窗口大小是多少?间隔应该多长?
- 每个额外的全连接层应该有多少个隐藏神经元(选项)?
除了这些问题,我们还需要考虑很多高层的结构问题,比如一个CNN中应该有多少个处理层,按照什么顺序。一些深度神经网络可能包括数千个处理层,有很多设计的可能性。有了这么多排列,我们只能测试CNN设置的一小部分。因此,CNN的设计通常会随着机器学习社区积累的知识而进化,偶尔也会有一些意想不到的性能提升。此外,许多改进技术都经过了测试并发现是有效的,例如使用新的处理层或以更复杂的方式连接不同的处理层。