CNN与常用框架

1. 神经网络
1.1 神经网络——是什么?
  神经网络没有一个严格的正式定义。它的基本特点,是试图模仿大脑的神经元之间传递,处理信息的模式。还是有些抽象,那么看看下面这张图。 
   
  输入层和输出层之间有多个隐层hidden layer,输入层、输出层和隐层都有若干个节点。每一个节点是一个神经元,每个神经元,通过激励函数,计算处理来自其它相邻神经元的加权输入值;神经元之间的信息传递的强度,用所谓加权值来定义,算法会不断自我学习,调整这个加权值。 
  在逻辑回归中,我们知道回归函数中得到线性拟合z=θ0+θ1x1+θ2x2z=θ0+θ1x1+θ2x2,输入到sigmoid函数中a=g(z)=11+e−za=g(z)=11+e−z,这个过程可以看做一个没有隐层的神经元,g(z)就是激励函数: 
   
  如果在中间加上少量隐层,就是浅层神经网络,增多中间层,就是深层神经网络(DNN)。

1.2 神经网络——为什么?
  神经网络为什么比其他的分类器有更好的效果呢?传统的逻辑斯特回归或者linear SVM来做简单的的分类,对于非线性可分的情况,可以设定核函数去把平面数据分隔开,但是样本很不规则的时候却难以分割。那么神经网络是怎么做的呢?举一个吴恩达老师课件里的例子: 
   
  当x1、x2相同时y=1,不同时y=0,对y的取值进行切分,很难用一条直线切分。如果有一个分类器,用两条线性分类的组合(逻辑与)判定正负样本,就可以完成。如图,给定一组权重可得到一条直线,由两组权重构造两条直线,再有这两条直线进行线性加权,得到切分函数。 
   
  除了“逻辑与”,神经元还可以完成“逻辑或”,这两个操作是神经网络的高明所在。例如对下图四种颜色分类,采用“抠图”的方式得到绿色:先对上面绿色的模块的7条变作线性切分,得到0、1的分类,再对这7条线性分类做与操作,得到上面的这个绿色。再和其他的绿色模块取或操作,得到全部的绿色区域。 
   
  我们已经了解了神经网络的结构,是全连接的,那么卷积神经网络又是什么呢? 

2. 卷积神经网络的层级结构
  卷积神经网络依旧是层级结构,但是层的功能和形式做了变化,主要的层次有数据输入层、卷积计算层、激励层、池化层和全连接层,这些层次穿插着组合在一起。 
  

2.1 数据输入层——Input layer
  有3种常见的图像数据处理方式: 
  1. 去均值:把输入数据各个维度都中心化到0。 
  2. 归一化:幅度归一化到同样的范围。 
  3. PCA/白化:用PCA降维,白化是对数据每个特征轴上的幅度归一化。 
  CNN里一般只做去训练集的均值。

2.2 卷积计算层——CONV layer
  卷积计算层是卷积神经网络的核心,这个操作在物理上是可解释的。我们知道神经网络是全连接的,卷积网络不是,是局部关联的。过程是:每个神经元看做一个滤波器filter,filter对局部数据计算。取一个数据窗口,这个数据窗口不断地滑动,直到覆盖所有样本 。需要知道这几个参数: 
  a. 深度depth:神经元个数,决定输出的depth厚度。 
  b. 步长stride:决定滑动多少步可以到边缘 
  c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。 
   
  举例分析:下面这张图中,有两个神经元,即depth=2;取3*3的窗口,每次移动两个步长,stride=2;zero-padding=1。分别以两个滤子为轴滑动数组,得到两组结果。 
   
  具体是怎么计算的呢?对应位置上是数字先乘后相加,中间滤波器filter与数据窗口做内积。以第一个结果-3为例:第0组0∗0+0∗0+0∗(−1)+0∗1+1∗0+2∗0+0∗0+1∗0+0∗1=00∗0+0∗0+0∗(−1)+0∗1+1∗0+2∗0+0∗0+1∗0+0∗1=0,第1组=-4,第2组=0,偏差bias=1,所以 0+(-4)+0+1=-3。整个计算过程的动态图如下,做的很直观明了! 
  
  之所以卷积神经网络的参数不会很大,有一个很重要的性质就是参数共享机制:同一个神经元,无论输入数据如何滑动变化,连接数据窗的权重是固定的。这样一来,有多少个神经元,就制定多少组参数,过程中不会再改变。 
  卷积神经网络在图像上的应用很广泛,下面这张图表示使用不同的滤子处理图像的差别。 
  

2.3 激励层——ReLU
  激励层有一个激励函数,把卷积层输出结果做非线性映射。非线性的映射有:Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout等,大多数用的是ReLU。ReLU收敛快(比sigmoid函数至少提高6倍),求梯度简单,但是较脆弱,它的图像如下: 
   
  改进的有: 
  a. Leaky ReLU:不会“饱和” /挂掉,计算也很快。 
  b. 指数线性单元ELU:所有ReLU有的优点都有,不会挂,输出均值趋于0,因为指数存在,计算量略大。 
  c. Maxout:计算是线性的,不会饱和不会挂,多了好些参数;max(ωT1x+b1,ωT2x+b2)max(ω1Tx+b1,ω2Tx+b2) 
  选择激励函数的一些实际经验:不要用sigmoid,太难以训练;首先试RELU,因为快,但要小心点,打印中间信息判断状态;如果RELU失效,请用Leaky ReLU或者Maxout;某些情况下tanh倒是有不错的结果,但是很少。

2.4 池化层——Pooling layer
  池化层夹在连续的卷积层中间,用于压缩数据和参数的量、减小过拟合。如下图,在不影响图像内容的前提下,把224x224的图片压缩成 112x112,基于的理论是平移不变性。 
   
  池化层有 Max pooling 和 average pooling两种方式,工业界多用Max pooling。Max pooling每次把窗口中最大的值抽出来,如下图: 
  

2.5 全连接层——FC layer
  全连接层中,两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部,因为尾部的信息量没有开始那么大。 
  一般卷积神经网络的结构层次如下: 
  

2.6 卷积神经网络的优缺点
  优点: 
  a. 共享卷积核,对高维数据处理无压力 
  b. 无需手动选取特征,训练好权重,即得特征 
  c. 分类效果好 
  缺点: 
  a. 需要调参,需要大样本量,训练最好要用GPU 
  b. 物理含义不明确

3. 典型CNN
  1. LeNet,这是最早用于数字识别的CNN 
  2. AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层 
  3. ZF Net, 2013 ILSVRC比赛冠军 
  4. GoogLeNet, 2014 ILSVRC比赛冠军 
  5. VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好。

4. CNN常用框架
  1. Caffe:源于Berkeley的主流CV工具包,支持C++,python,matlab,Model Zoo中有大量预训练好的模型供使用。 
  prototxt是用命令行做训练时要用的,定义了cnn的层级结构。 
  2. Torch:Facebook用的卷积神经网络工具包,通过时域卷积的本地接口,使用非常直观,torch定义新网络层比较简单,可以做图像或者RNN。 
  3. TensorFlow:Google的深度学习框架,可视化很方便,数据和模型并行化好,速度快。开源后资源会更丰富。 
   
  CNN的应用:图像识别与检索、人脸识别、性别/年龄/情绪识别、物体检测、场景判定与危险监控等。

More
深度学习—CNN与常用框架 视频及PPT下载
CNN笔记:通俗理解卷积神经网络
--------------------- 
作者:心潇瑶 
来源:CSDN 
原文:https://blog.csdn.net/joycewyj/article/details/51792477?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(深度学习)