对卷积神经网络(CNN)的理解——深度学习

Posted 拉风小宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对卷积神经网络(CNN)的理解——深度学习相关的知识,希望对你有一定的参考价值。

本文翻译自Understanding of Convolutional Neural Network (CNN) — Deep Learning --Prabhu

在神经网络中, 卷积神经网络 (ConvNetes 或 CNN) 是用于图像识别、图像分类的主要类别之一。在对象检测(Object detection)、人脸识别(recognition)等领域被广泛使用。
CNN 图像分类将图像作为输入, 对其进行处理, 并将其分类为特定类别 (例如狗、猫、老虎、狮子)。计算机将输入图像视为像素数组, 这取决于图像的分辨率。根据图像分辨率, 它将看到 h × w × d h\\times w\\times d h×w×d (h = 高度, w = 宽度, d = 尺寸)。例如, 一个由 6 × 6 × 3 6 \\times 6 \\times 3 6×6×3 数组的 RGB 矩阵 (3 表示RGB值:Channels数目) 的图像和一个由 4 × 4 × 1 4 \\times 4 \\times 1 4×4×1 数组的灰度图像矩阵的图像。


从技术上讲, 深度学习神经网络(deep learning CNN)训练和测试的过程为:每张输入的图片会通过一系列带有滤波器(filters)的卷积层(convolution layers),池化层(Pooling),全连接层(Fully Connected layers)并且利用Softmax函数进行分类(根据函数返回的0-1之间的概率值)。下图是CNN模型的完整流程:从输入图片到图片分类

卷积层(Convolution Layer)

卷积层是从输入图片提取特征的第一层。
卷积运算通过利用小的方窗口学习图片的特征保持了像素之间的关系。其有两个输入,一个是图片,另一个是一个滤波器(filter)或是核(kernel)

考虑一张图片如下,像素值只取0和1,filter矩阵为 3 × 3 3\\times 3 3×3

那么这张 5 × 5 5\\times 5 5×5的图片与filter进行卷积运算得到的结果被称为“特征图 (Feature Map) ”,将其作为输出,结果如下

利用不同的滤波器可以实现不同的效果,例如边缘检测(edge detection),模糊(blur),锐化(sharpen)等,下图展示了一些滤波器的效果

步长(Strides)

步长是在输入矩阵上移动的像素数. 当步长为1时, 我们每次将滤波器移动1像素。当步长为2时, 我们一次将过滤器移动到2个像素, 依此类推。下图显示卷积的步长为2

填充(Padding)

有时候滤波器不能很好地适应(fit)输出图片,这时我们有两种方法:

  • 用零 (zero-padding) 填充图片使其适合
  • 删除图像中筛选器不适合的部分。这称为 “有效填充”, 它只保留图像的有效部分。

非线性 (Non Linearity ReLU)

ReLU 代表非线性操作的校正线性单元(Rectified Linear Unit)。输出为 f ( x ) = max ⁡ ( 0 , x ) f(x) = \\max(0,x) f(x)=max(0,x).

为什么ReLU很重要: 其目的是在我们的 ConvNet 中引入非线性。因为, 现实世界的数据将希望我们的 ConvNet 学习将是非负线性值,而且如果不引入非线性,多加层数将会变得没有意义因为做来做去还是线性,参数并不会改善

还可以使用其他非线性函数, 如 tanh 或 sigmoid。大多数数据科学家使用的是ReLU, 因为ReLU的表现比其他两个要好。

池化层(Pooling Layer)

当图像太大时, 池图层部分将减少参数的数量。空间池化也称为子采样(subsampling)或向下采样(downsampling), 它减少了每个地图的维数, 但保留了重要的信息。此外,还可以保证图片在小的平移的时候可以保持不变。空间池可以是不同类型的:

  • 最大池化(Max Pooling)
  • 平均池化(Average Pooling)
  • 加和池化(Sum Pooling)

最大池化从校正过的素图中获取最大元素。取最大的元素也可以采用平均池。 加和池化是将所有元素相加

全连接层

我们称之为FC(Fully Connected)层, 我们把矩阵展(flatten)成矢量, 并将其输入一个完全连接的层, 如神经网络。

在上图中, 特征图矩阵将转换为矢量 ( x 1 , x 2 , x 3 , . . . ) (x1, x2, x3, ...) (x1,x2,x3,...)。通过全连接层我们将这些要素组合在一起以创建模型。最后, 我们有一个激活函数, 如 softmax 或 sigmoid, 将输出分为猫、狗、汽车、卡车等,

总结

  • 将输入图像提供到卷积层
  • 选择参数, 应用指定步长的滤波器, 根据需要填充。对图像执行卷积, 并将 ReLU 激活函数应用于矩阵
  • 执行池化以减小维度
  • 添加尽可能多的卷积层, 直到满足要求
  • 将输出展平,投喂到全连接层(FC 层)
  • 使用激活函数(带有代价函数的逻辑回归) 输出类, 并对图像进行分类

在下一篇文章中, 我想谈谈一些流行的 CNN 架构, 如AlexNet, VGGNet, GoogLeNet和ResNet。

参考文献

https://www.mathworks.com/discovery/convolutional-neural-network.html
https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/
https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
https://blog.datawow.io/interns-explain-cnn-8a669d053f8b.

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于对卷积神经网络(CNN)的理解——深度学习的主要内容,如果未能解决你的问题,请参考以下文章

理解卷积神经网络?

理解CNN卷积层与池化层计算

[人工智能-深度学习-37]:卷积神经网络CNN - 重构神经网络的疑惑与思考?

基于卷积神经网络(CNN)的深度学习图片分类

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法