机器学习算法完整版见fenghaootong-github

卷积神经网络原理(CNN)

卷积神经网络CNN的结构一般包含这几个层:

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失

CNN的三个特点:

  • 局部连接:这个是最容易想到的,每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数
  • 权值共享:一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。

  • 下采样:可以使用Pooling来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。

这里写图片描述

输入层

在CNN的输入层中,(图片)数据输入的格式 与 全连接神经网络的输入格式(一维向量)不太一样。CNN的输入层的输入格式保留了图片本身的结构。

对于黑白的 28×28 的图片,CNN的输入是一个 28×28 的的二维神经元:

而对于RGB格式的28×28图片,CNN的输入则是一个 3×28×28 的三维神经元(RGB中的每一个颜色通道都有一个 28×28 的矩阵)

卷积层

这一层就是求内积

这里写图片描述

左边是输入,中间部分是两个不同的滤波器Filter w0、Filter w1,最右边则是两个不同的输出。

最左边是输出为:

 

ai.j=f(m=02n=02wm,nxi+m,j+n+wb)ai.j=f(∑m=02∑n=02wm,nxi+m,j+n+wb)

 

以上图为例:

  • wm,nwm,n:filter的第m行第n列的值
  • xi,jxi,j: 表示图像的第i行第j列元素
  • wbwb:用表示filter的偏置项
  • ai,jai,j:表示Feature Map的第i行第j列元素
  • ff:表示Relu激活函数

激励层

激励层主要对卷积层的输出进行一个非线性映射,因为卷积层的计算还是一种线性计算。使用的激励函数一般为ReLu函数:

 

f(x)=max(x,0)f(x)=max(x,0)

 

卷积层和激励层通常合并在一起称为“卷积层”。

池化层

当输入经过卷积层时,若感受视野比较小,布长stride比较小,得到的feature map (特征图)还是比较大,可以通过池化层来对每一个 feature map 进行降维操作,输出的深度还是不变的,依然为 feature map 的个数。

池化层也有一个“池化视野(filter)”来对feature map矩阵进行扫描,对“池化视野”中的矩阵值进行计算,一般有两种计算方式:

  • Max pooling:取“池化视野”矩阵中的最大值
  • Average pooling:取“池化视野”矩阵中的平均值

这里写图片描述

全连接层

卷积神经网络的训练

  1. 前向计算每个神经元的输出值ajaj( 表示网络的第j个神经元,以下同);
  2. 反向计算每个神经元的误差项σjσjσj,σj在有的文献中也叫做敏感度(sensitivity)。它实际上是网络的损失函数EdEd对神经元加权输入的偏导数
  3. 计算每个神经元连接权重wi,jwi,j的梯度( wi,jwi,j表示从神经元i连接到神经元j的权重)
    • 最后,根据梯度下降法则更新每个权重即可。

实例

CNN实例

posted on 2018-03-08 10:39  一小白  阅读(1078)  评论(0编辑  收藏  举报