近年来,深度学习领域的卷积神经网络(CNNs或ConvNets)为我们在各个行业解决了大量的实际问题。但对大多数人来说,CNN似乎披着一层神秘的面纱。我常常想,要是能把神经网络的过程分解一下,看看每一步的结果是什么就好了!这就是这篇博客的意义。AdvancedCNN首先,我们需要了解卷积神经网络擅长什么。CNN主要用于查找图像中的模式。这个过程有两个主要步骤。首先对图像进行卷积,然后找到模式。在神经网络中,前几层用于寻找边界和角点,随着层数的增加,我们可以识别更复杂的特征。此属性使CNN非常擅长识别图片中的对象。什么是美国有线电视新闻网?CNN是一种特殊的神经网络,包括卷积层、池化层和激活层。卷积层要了解什么是卷积神经网络,您首先需要了解卷积的工作原理。想象一下,你有一个用5*5的矩阵表示的图片,然后你用一个3*3的矩阵在图片中滑动。每当3*3矩阵经过一个点时,将原矩阵中的覆盖矩阵乘以这个矩阵。这样,我们就可以用一个值来表示当前窗口中的所有点。这是该过程的动画:如您所见,特征矩阵中的每个项目都与原始图像中的一个区域相关联。图中像窗口一样移动的称为内核。核一般是方阵。对于小图片,一般3*3的矩阵就够了。窗口每次移动的距离称为步长。值得注意的是,有些图片会在边框处用零填充。如果直接进行卷积操作,那么边界处的数据会变小(当然图片中间的数据更重要)。卷积层的主要目的是过滤。当我们对图像进行操作时,我们可以很容易地检查出那部分的模式,因为我们使用了过滤,我们将卷积的输出乘以权重向量。在图像上训练时,这些权重是不断变化的,遇到以前见过的模式,相应的权重就会增加。来自各种过滤器的高权重的组合使网络能够预测图像的内容。这就是为什么在CNN架构图中,卷积步骤用方框而不是矩形来表示;第三个维度代表过滤器。注:卷积运算后的输出在宽高上比原来的小核和图像窗口都大。操作是线性的。过滤器中的权重是许多图像学习的池化层。池化层与卷积层类似,也是使用卷积核在图上移动。唯一不同的是,pooling层中的kernel和imagewindow的操作不再是线性的。***池化和平均池化是最常见的池化函数。***pooling选择当前kernel覆盖的图像窗口中最大的数,而averagepooling选择图像窗口的均值。激活层在CNN中,激活函数与其他网络一样,函数将值压缩在一个范围内。下面列出了一些常用函数。CNN中最常用的是relu(整流线性单元)。人们喜欢relu的原因有很多,但最重要的一个是它非常容易实现,如果值为负,则输出0,否则输出自己。这个函数操作简单,所以训练网络也很快。点评:CNN中主要有三层,分别是:卷积层、池化层和激活层。卷积层利用卷积核乘以图像窗口,利用梯度下降法对卷积核进行优化。池化层使用最大值或平均值来描述一个图形窗口。激活层使用激活函数将输入压缩到一个范围内,通常是[0,1][-1,1]。CNN是什么样子的?在我们深入CNN之前,让我们添加一些背景知识。早在20世纪90年代,YannLeCun就利用CNN制作了一个手写数字识别程序。随着时代的发展,尤其是计算机性能和GPU的提升,研究人员有了更多的想象空间。2010年,斯坦福机器视觉实验室发布了ImageNet项目。该项目包含1400万张带有描述标签的图像。这几乎成了对比CNN模型的标准。目前,最先进的模型在此数据集上达到94%的准确率。人们不断改进模型以提高准确性。2014年GoogLeNet和VGGNet成为最好的模型,在此之前是ZFNet。将CNN应用于ImageNet的第一个可行示例是AlexNet,在研究人员尝试使用传统计算机视觉技术之后,但AlexNet的性能优于其他所有技术15%。我们看一下LeNet:图中没有显示激活层,整个过程是:输入图像→卷积层→Relu→***pooling→卷积层→Relu→***pooling→隐藏层→Softmax(激活)→输出层。让我们看一个实际的例子。下图是一张猫的图片:这张图片长400像素,宽320像素,颜色为三个通道(rgb)。那么经过一层卷积运算之后会是什么样子呢?这是使用了一个3*3的卷积核和三个filter的效果(如果我们有3个以上的filter,那我就可以画出一只猫的2d图像了。高维很难处理)我们可以看到图片中的猫非常模糊,因为我们使用了随机初始值,我们还没有训练网络。它们都在彼此之上,即使每一层都有细节,我们也看不到。但是我们可以让猫的区域与眼睛和背景的颜色相同。如果我们将内核大小增加到10x10会发生什么?我们可以看到,由于内核较大,我们丢失了一些细节。还要注意,从数学的角度来看,卷积核越大,图像的形状就会变得越小。如果我们把它压平一点,我们可以更好地看到颜色通道发生了什么?这个看起来好多了!现在我们可以看到我们的过滤器看到的一些东西。看起来红色取代了黑色的鼻子和黑色的眼睛,蓝色取代了猫周围的浅灰色。我们可以开始了解图层如何捕获照片中一些更重要的细节。如果我们增加内核大小,我们会得到更多细节,当然图像会比其他两个小。添加激活层我们通过添加relu去除了很多不是蓝色的部分。添加一个池化层我们添加一个池化层(去掉激活层尽可能让图片更容易显示)。不出所料,猫变得斑驳了,我们可以让它变得更加斑驳。图片现在大约是原来大小的三分之一。激活和池化LeNet如果我们将猫的图片放入LeNet模型中进行卷积和池化,会发生什么情况?总结ConvNets之所以强大,是因为它们可以提取图像的核心特征,并使用这些特征来识别其中包含特征的图像。即使使用我们的两层CNN,我们也可以开始看到网络非常关注猫的胡须、鼻子和眼睛等区域。这些是允许CNN区分猫和鸟的特征类型。CNN非常强大,虽然这些可视化并不完美,但我希望它们能帮助像我这样试图更好地理解ConvNet的人。
