从lenet-5到深度学习网络

Lenet-5

lenet-5网络是一种用于手写体字符识别的非常高效的卷积神经网络,也是CNN的开山之作。CNN是一种前馈神经网络,包含核心卷积层和池化层,多用于处理图像分类问题。

核心思想

  1. 局部感受野(local receptive fields):感受野是某层feature maps上特征点映射到输入图像区域的大小,局部则是选择图像本身的一部分感知,感知大小等于卷积核的大小。

  2. 权值共享(shared weights):每个feature maps使用同一个卷积核来感知,使得权重都一样。

通过局部感受和权值共享可以有效减少网络训练的参数,加快训练速度,减少计算复杂度。核心是拆解局部特征,最后连接组合。

网络结构
从lenet-5到深度学习网络_第1张图片

卷积层1

  1. 输入:32*32的图像。
  2. 分别经过6种不同的5*5卷积核卷积,提取特征值。
  3. 输出:6个28 * 28的feature map。

此过程中,训练参数个数(5 * 5 +1)* 6=156,连接数为 (5 * 5 + 1)* 6 * 28 * 28=122304。总共122304个连接数,只需要训练156个参数。

池化层1

  1. 输入:6个28 * 28的feature map。
  2. 分别经过6个2 * 2的下采样单元MAXPOOL,压缩并保留特征数据。
  3. 输出:6个14 * 14的feature map。

本层的作用在于压缩数据和参数的数量,减少计算。

卷积层2

本层卷积核第一次卷积有所不同,输入是6个特征图,经过16种卷积核卷积,得到16个feature map,而且卷积的顺序是特定的组合。

  1. 输入:上层(下采样层1)输出的6个feature map的特定组合。
  2. 经过16种5 * 5的卷积核,提取特征,以下是具体的卷积过程。
  3. 从输入的6个16 * 16feature map中取出相邻的3个,和前6个卷积核进行卷积;得到6个feature map。
  4. 再取输入的相邻的4个feature map,使用后续的6个卷积核卷积;得到6个feature map。
  5. 接着取输入中的不相邻的4个feature map,用接下来的3个卷积核卷积;得到3个feature map。
  6. 最后用整个6 * 14 * 14的输入和最后一个卷积核卷积。得到1个feature map。
  7. 输出:16个10 *10的feature map。

本层卷积不同的原因按参考论文观点是特征是不对称的,这么组合是为了提取深层特征。训练参数个数:6 *(3 * 5 *5 +1) + 6 *(4 * 5 *5+1)+ 3 *(4 * 5 *5+1)+ 1 *(6 * 5 *5+1) = 1516,连接数:1516 * 10 * 10=151600。

池化层2

  1. 输入:16个10 * 10的feature map。
  2. 分别经过6个2 * 2的下采样单元MAXPOOL,压缩并保留特征数据。
  3. 输出:16个5 * 5的feature map。

再次下采样,压缩数据。

激励层

卷积和池化的都是线性操作,线性操作对分类问题有很大的局限性和准确性问题,真正的分类问题是复杂的任意函数模型,激励函数的作用是让特征非线性化,所以一般情况下都是卷积+激励+池化,因为lenet-5的网络比较简单,所以只做一次最终的激励。

本层使用relu函数。
image

全连接层

  1. feature map展成一维,上层输入是16 * 5 * 5,经过120个5 * 5的卷积核,得到120个1 * 1的feature map。
  2. 因为手写符号有84个,先全连到84。
  3. 最后全连接到10个手写数字。

最后识别的是10个手写数字,为什么不直接从120全连接到10,而中间要全连接84。因为在计算机中字符的编码是ASCII编码,这些图是用7*12大小的位图表示的,也就是高宽比为7:12,选择这个大小可以用于对每一个像素点的值进行估计。

损失函数(loss function)或代价函数

One-hot

热独编码,我们用它表示真实数据的概率向量。用mnist数据举例,如果是3,那么标签是[0,0,0,1,0,0,0,0,0,0],除了第4个值为1,其他全为0。

softmax

全连接层后对输出进行softmax,是对每种num_class做一个概率计算,比如识别出2的概率向量是[0.3, 0.1, 0.4, …],里面表示的是每个类别的概率,其中0.4就是手写体2的概率。
在这里插入图片描述

cross entropy

y’是对应的i的真实值,y是softmax后的第i个值,对其记性-log运算相加,就可得到loss值。因为-log是减函数,x值越大(越接近于真实值),那么它的loss也就越小。
在这里插入图片描述
一般框架会把softmax和交叉熵函数放到一起作为损失函数。

优化函数 (Optimization Function)

从损失函数中取得损失值后,需要利用损失值对参数进行微调,以便让loss 达到最小。一阶优化函数在优化过程中求解的是参数的一阶导数,这些一阶导数的值就是模型中参数的微调值。

梯度下降法最简单,也有其局限性,之后有了更多的调优算法GD,SGD,BGD,Adam。

Gradient Descent 梯度下降

在这里插入图片描述
从公式上看,梯度下降的原理是训练参数沿着梯度下降的方向进行下降。用倒数值乘以学习率,在原参数大小上进行微调,重复训练不断的修正,达到最优解。

在一个网络中不止一个隐藏层,每层都有参数,损失函数是最后一层计算得到的,那怎样来更新每一层的参数呢?—— 反向传播算法(BP算法)。它建立在梯度下降法的基础上,使用链式求导法则,将调优值反馈到每个参数上,如此进行参数更新。

你可能感兴趣的:(人工智能,CNN)