卷积神经网络(Convolutional Neural Network,CNN)又叫卷积网络(Convolutional Network),是一种专门用来处理具备相似网格结构的数据的神经网络。卷积神经网络一词中的卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来代替通常的矩阵乘法的神经网络。面试
卷积神经网络的出现,极大的缓解了全链接神经网络中存在的一个典型的问题:数据的波形被忽视了!众所周知,全链接神经网络在进行数据输入的时候,须要将一个二维或者三维的数据展平为一维的数据。而咱们知道在计算机中图形是一个三维的数据,由于须要存储一些相似 RGB 各个通道之间关联性的空间信息,因此三维形状中可能隐藏有值得提取的本质模式。而全链接展平会致使形状的忽视。所以须要利用卷积神经网络来保持形状的不变。数组
典型应用场景:图像识别、语音识别等。网络
典型结构以下图所示:app
卷积运算至关于图像处理中的“滤波器运算”。卷积运算会对输入数据应用滤波器(Filter)。函数
假设,一个初始的图像大小为 \(J*K\), 同时有 \(L\) 个管道,以下图所示:学习
咱们应用一个 \(M*N\) 大小的滤波器。图中绿色的格子就是一个 3*3 的滤波器。卷积运算的整个操做为:将各个位置上滤波器的元素和输入的对应元素相乘,而后再求和(整个操做也被称为乘积累加运算),而后,将这个结果保存到输出的对应位置。spa
将计算过程公式化,公式以下:3d
其中 \(K_{m,n}\) 表示滤波器的 \(m,n\) 位置的数据,\(V_{j+m,k+n}\) 表示图像的 \(j+m,k+n\) 位置的数据,\(b\) 是偏置项。orm
将计算过程图像化,以下图所示:blog
其中,滤波器的参数就是权重(Weights),同时还有有个偏置项(Bias),这个偏置项会被加到滤波器最后的输出上。
咱们能够根据上图看到,对一层中的每个 \(M×N\) 块输入应用相同的权值,计算卷积层中的下一个隐藏单元,这就是个权重共享(Weight Sharing)的概念。
填充(Padding):在进行卷积操做以前,有时候要向周围填入固定的数据,好比用数值 0 进行填充,也叫零填充(Zero Padding)。
应用填充以后,卷积层的输出大小将会和卷积以前的层同样,如图所示,其中粉色的 6 * 7 的格子是原始的图像尺寸,咱们在周围加上一圈数值为 0 的格子,用白色表示:
以步幅 1 进行卷积,以下图所示:
最终咱们获得了一个大小为 6 * 7 的蓝色的卷积层,和原始图像的尺寸相同,以下图所示:
这主要也是为了不卷积过程当中过一个典型的问题:若是每次惊醒卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变成 1,致使没法再应用卷积运算。为了不这个状况的出现,就须要使用填充。
步幅(Stribe):应用滤波器间隔的位置称为步幅。在上面的例子中,采用的步幅为 1。
咱们能够将步幅改成 2,那么卷积过程就会变成下图所示的:
能够看到应用滤波器的窗口的间隔变成了 2 个元素,以下图所示:
最终,新的一层的尺寸变为一个 3 * 4 的层。用公式表示为(设步长为\(s\)):
在一开始,虽然咱们假设了一个初始的图像大小为 \(J*K\), 同时有 \(L\) 个管道。可是咱们讨论的卷积操做一直只在单层上进行的,下面咱们就讨论一下在 3 维状况下的卷积运算。
当在通道方向上有多个特征图的时候,会按照通道进行输入数据滤波器的卷积运算,并将结果相加,从而获得输出。计算步骤以下图所示:
至此,咱们的公式能够总结为:
其中 \(K^i_{m,n}\) 表示第 \(i\) 个滤波器的 \(m,n\) 位置的数据,\(V^l_{j+m,k+n}\) 表示图像第 \(l\) 层通道的 \(j+m,k+n\) 位置的数据,\(b^i\) 是第 \(i\) 个偏置项。根据以前的权重共享的概念,咱们能够知道,每一层通道是共用一个滤波器的相同权重的,一样也共用相同的偏置。
池化(Pooling)是缩小高、长方向上的空间的运算。
最典型的池化过程叫作最大池化(Max Pooling),以下图所示,这是一个单层的池化:
图中所示的步骤是,咱们划定一个 \(2 * 2\) 的窗口,找出这个窗口中最大的那个值,做为下一层的数据,这个窗口以步幅 2 进行移动。通常来讲,池化的窗口大小会和步幅设定成相同的值。
除了 Max Pooling 以外,还有 Average Pooling/Mean Pooling,即平均池化,是计算目标区域的平均值。在图像识别领域中,主要使用 Max Pooling。
重叠池化(Overlapping Pooling)是 AlexNet 中的一个概念。Overlapping Pooling 的概念和 No-Overlapping Pooling的概念相对。
LeNet 是在 1998 年提出的进行手写数字识别的网络。具备连续的卷积层和池化层(准确的讲是只抽取元素的子采样层),最后经全链接层输出结果。基本结构以下:
和如今的 CNN 相比,LeNet 有几个不一样点:
AlexNet 是一个引起深度学习热潮的导火索。基本结构以下:
AlexNet 叠有多个卷积层和池化层,最后经由全链接层输出:
AlexNet 虽然在结构上和 LeNet 没有很大的不一样,可是也有一些细节上的差别:
神经网络中的权重共享是什么?
\(1 * 1\) 卷积的做用
卷积层和池化层有什么区别
LeNet-5 结构
AlexNet 结构