当前位置: 首页 > 科技观察

不懂卷积神经网络?别怕,看完这些萌图你就明白了!

时间:2023-03-13 02:59:54 科技观察

本文以最简洁易懂的方式讲解了卷积神经网络(CNN)的基本原理,绕过了里面的数学理论。同时,如果你对从头搭建CNN网络感兴趣,作者推荐阅读《 Artificial Intelligence for Humans Volume 3: Deep Learning and Neural Networks》中的第10章。话不多说,下面开始CNN之旅——网络结构CNN模型通常建立在前馈神经网络模型之上,其结构大家应该很熟悉。不同的是,“隐藏层”会被以下层代替:ConvolutionalLayersPoolingLayersFullyconnectedlayers(DenseLayers)结构类似于下图:Convolution在这个阶段,输入图像被一个网格扫描并作为输入传递给网络。然后,网络对输入图像应用卷积层,将其分割成包含3个图像的3D立方体结构。三幅图像的三帧分别呈现了原图像的红、绿、蓝信息。然后它将卷积过滤器(也称为神经元)应用于图像,类似于PhotoShop中的过滤器如何突出显示某些特征。例如动画片《Doc And Mharti》中,经过Roberts交叉边缘增强滤波器处理后的效果如下图所示:原图处理后,可想而知拥有100多个不同滤波器的神经网络有多么强大能够筛选出复杂的特征,这将极大地帮助它识别现实世界中的事物。一旦神经网络将卷积滤波器应用于图像,我们就可以获得特征/激活图。特征图将被指定区域的特定神经元激活。例如,如果我们将边缘检测过滤器添加到下面的左图中,它的激活图显示在右图中:这些点代表0的行(表示这些区域可能是边缘)。在二维数组中,值为“30”表示图像区域中很有可能存在边缘。激活层当我们有了激活图,我们就可以让激活函数在其中大显身手。下面以研究者最好的函数——ReLU激活函数(修正线性单元)为例。然而,一些研究人员仍然认为使用sigmoid函数或双曲正切会提供最好的训练结果,但我不这么认为。使用激活层将非线性引入系统,从而提高输入和输出的通用性。ReLU(x)函数仅返回max(0,x)或仅返回激活图中的负权重。在池化层之后要做的最好的事情通常是在特征图上应用池化(或任何其他类型的池化)。应用最大池化层背后的想法是在一个小网格中扫描图像,用包含给定网格中最高值的单个单元替换每个网格:这样做的一个重要原因是一旦我们知道给定的该特征位于给定的输入区域中,我们可以忽略该特征的确切位置以泛化数据并减少过度拟合。例如,即使训练准确率达到99%,当它在没有见过的新数据上进行测试时,其准确率也只有50%。输出层***pooling层之后,再来说说剩下的activationmap,这是传递给全连接网络的一部分信息。它包含一个全连接层,简单地将前一层每个神经元的输出映射到全连接层的一个神经元,对输出应用softmax函数,类似于我们前面提到的激活函数ReLU函数。由于我们要使用神经网络对图像进行分类,所以这里使用了softmax函数。softmax输出返回一个总和为1的概率列表,每个概率表示给定图像属于特定输出类别的概率。但是当涉及到图像预测和恢复任务时,线性激活函数效果更好。值得注意的是,这里我们只考虑单个卷积层和单个池化层的简单情况。如果要达到最佳精度,通常需要将它们堆叠成多层。在每次完整迭代后,权重根据计算的损失通过网络反向更新。