深度学习之卷积神经网络

目录(持续更新)

概述

卷积神经网络中**函数Relu

卷积网络 

卷积网络架构

卷积层输出计算

池化层的输出计算

卷积神经网络的训练

卷积层的训练

Pooling层的训练



概述

卷积神经网络(CNN): 一种更适合图像、语音识别任务的神经网络结构

https://blog.****.net/songhao22/article/details/79349493

  • 输入层:用于数据输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积是一种线性运算,因此需要增加一些非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量
  • 全连接层:在CNN尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果
  • 归一化层(Batch Normalization):在CNN中对特征的归一化,这样可有效地防止“梯度弥散”,加速网络训练
  • 切分层:对某些(图片)数据的进行分区域的单独学习
  •  融合层:对独立进行特征学习的分支进行融合

用CNN解决的问题都存在局部与整体的关系。

由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性

CNN特点:局部连接/权值共享/池化操作/多层次结构

    局部连接:使网络可以提取数据的局部特征

    权值共享:大大降低网络的训练难度,一个filter值提取一个特征

    池化操作与多层次结构一起,实现了数据的降维,并将低层次的局部特征组合为较高层次的特征。


卷积神经网络中**函数Relu

Relu函数的定义:

深度学习之卷积神经网络

Relu函数的图像:

深度学习之卷积神经网络

Relu函数的优势:

深度学习之卷积神经网络


卷积网络 

全连接网络不太适合图像处理:

  • 参数数量太多
  • 没有利用像素之间的位置信息
  • 网络层数限制

卷积网络的解决思路:

  • 局部连接:每个神经元只和上一层的一小部分神经元相连(卷积层)
  • 权值共享:一组连接可以共享同一个权重(卷积层)
  • 下采样:使用pooling来减少每层的样本数(Pooling层)

卷积网络架构

卷积神经网络示意图:

深度学习之卷积神经网络

一个卷积神经网络由若干个卷积层、池化层、全连接层组成,如:

INPUT  -->  [ [CONV] * N  -->  POOL(可选) ] * M  -->  [ FC ] * K

CNN:三维的层结构

卷积神经网络每层的神经元是按照三维排列的,有宽度、高度和深度。


卷积层输出计算

图像的大小、步幅、Filter的大小和卷积后的Feature Map大小是有一定关系的:

 

深度学习之卷积神经网络

 

 

深度学习之卷积神经网络

每个卷积层可以有多个filter。每个filter和原始图像进行卷积后,都可以得到一个Feature Map。因此,卷积后Feature Map的深度(个数)和卷积层的filter个数是相同的。 

深度学习之卷积神经网络

数学中的卷积和卷积神经网络中的卷积(互相关)是有区别的:

数学中的深度学习之卷积神经网络的结果等于在卷积网络中将A旋转180度再与B卷积。

 


池化层的输出计算

Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max PoolingMax Pooling实际上就是在n*n的样本中取最大值,作为采样后的样本值。


卷积神经网络的训练

反向传播算法步骤:

深度学习之卷积神经网络


卷积层的训练

先回顾一下全连接网络的反向传播算法的误差项的传递:

深度学习之卷积神经网络

深度学习之卷积神经网络

对于卷积网络:

先来看看上面的第二步,即如何将误差项传递到上一层;然后再来看看第三步,即如何计算filter每个权值的梯度

卷积层误差项的传递:

最简单情况下误差项的传递

我们先来考虑步长为1、输入的深度为1、filter个数为1的最简单的情况。

假设输入的大小为3*3,filter大小为2*2,按步长为1卷积,我们将得到2*2的feature map。如下图所示:

 深度学习之卷积神经网络

深度学习之卷积神经网络

其中,符号 深度学习之卷积神经网络 表示element-wise product,即将矩阵中每个对应元素相乘。


Pooling层的训练

无论最大值池化还是均值池化,都没有需要学习的参数。因此,在卷积神经网络的训练中,池化层仅仅是将误差项传递到上一层,而没有梯度的计算。

对于最大值池化,下一层的误差项的值会原封不动的传递到上一层对应区块中的最大值所对应的神经元,而其他神经元的误差项的值都是0。

对于均值池化,下一层的误差项的值会平均分配到上一层对应区块中的所有神经元。

参考:https://www.zybuluo.com/hanbingtao/note/485480