深度学习之卷积神经网络

传统的神经网络:

多层感知器神经网络和人工神经网路,DNN,MLP等,

 图片数据,比如:32*32*3,展开大概是4000维的向量,如果每层神经元是1024个那么每层会有400W个参数w和b,100              层会有4千万个参数,参数过多会导致过拟合的,,而且学习很慢,硬件方面也需要从cpu->Gpu!

我们对模型不但需要有好的学习能力,而且需要参数量不那么大,就引出了CNN卷积神经网络结构!

卷积神经网络,

1.层次结构:

数据输入层/input  layer

   :数据的预处理,类别型编码,数值型标准化(图像数据乘1/255),PCA降维.....

   :数值型去均值(每个值都减去,均值),为了不让样本随着非线性变换,有越来越大的偏移度!(一定要做)

       :1.Alexnet是对于所有输入图片计算图片的各个样本点上的均值,得到一个mean矩阵,在处理!

       :2.VGG是对3个颜色通道计算均值,每次计算的时候只需要减去颜色通道的均值即可!

       :需要注意,测试集减去的均值一定是训练集上的均值,在ML里也一样,标准化的计算的系数要相同!

  :总结:对于图像数据,去均值,标准化是都会做的,PCA是在降维后进行白化(就是标准化)!

卷积计算层/CONV layer

      :神经元叫做filter/kernel,通过窗口滑动来遍历所有数据

      :深度(depth)是神经元的个数,步长stride是滑窗滑动的格数(比如3*3的矩阵每次滑动两格),矩阵的padd填充                       值为0!

      :对图片的每个滑窗都对应一个神经元计算得到值!

      :参数共享机制,一个神经元对应图片每个滑窗的权重一样,但是不同神经元的权重是不同的

      :通过这个机制,很大幅度的降低了参数数量,神经元数量不变,原来在整个图片维度上计算的参数变为了在滑窗维                       度计算的参数,参数数量变化:(32*32*3*1024---->3*3*3*1024)

      :每个神经元都会对特定的特征进行记忆学习,权重固定,通过滑窗抽取信息,来探索一种模式!

      :总结:第一,卷积层像是在捕捉一种图像上的模式(在遍历图像嘛),第二,能够把参数量降低下来,主要是能获取高维特征,不同操作的卷积层可以获得不同大小的图像!

激励层/Activation  layer(通常卷积层后面会默认跟一个激励层)

       :把卷积层的的输出结果做一个非线性映射

       :**函数

深度学习之卷积神经网络

       :梯度消失和梯度弥散就是因为sigmod和tanh函数图向上斜率会趋近于零,让梯度趋近于零还有当网络很深,利                         用BP进行误差反传,数值会无限趋近于零的,就是误差传递不过去的!

       :ReLu是修正线性单元,大于0就有斜率,小于0就为0,可以达到随机失活(dropout)!

       :Leakly ReLu 是对ReLu斜率的线性修正,斜率不为零,但是小于零效率小一点。

       :Maxout,是用两条线段进行组合,不同的值在哪条线上斜率大就取谁。

       :ELu,是对ReLu的一种修正,是指数修正

         :总结:切记不用sigmoid函数,ReLu是最快的,可以用但是需要小心防止欠拟合损失下降不了了,如果不行,可                                      以使用Leaky  ReLu或着Maxout或者ELU,特殊情况tanh会有效果但是很少!!

池化层/pooling  layer(下采样层)

         :夹在连续卷积层的中间,起到压缩数据和参数数量

          :在每个特征上进行采样,而不会再神经元上进行采样

         :Max Pooling最大池化:保留数据当中最明显的特征(用的最多)

         :Average Pooling平均池化:保留数据中的平均值嘛(用的不多)

         :池化层并不是会在所有卷积神经网络都会用的,一般会在图片分类里使用!

         :总结:永远会使图片缩小一半!!!! 1.降维, 来降低过拟合的风险   2.特征不变性,我们只关注很特定的一些                                    模式,而不是特征的具体位置,使用池化层可以把这些位置信息去除掉保留,很重要的那个模式!

深度学习之卷积神经网络

全连接层/FC layer

         :两层之间所有的神经元都有权重连接,

         :通常全连接层在卷积神经网络尾部

         :全连接层,必须把图像展开成一维向量,然后与权重相乘来实现全连接!

典型的CNN结构为:卷积层+**层来若干个后接池化层这样的结构来若干个末尾接上全连接层!

Batch  Normalization层/(可能会有)

卷积神经网络训练方法:

:BP+SGD

:**层的求导就是求导的链式法则,f(g(h(x)))’ = f ’ * g’ * h’

:池化层的求导就是对分段函数求导

:卷积层也是类似分段函数求导

:卷积层,**层,池化层,都是可以求偏导的,只是多层感知机全部是全连接层求导比较统一而已!本质无区别!

卷积神经网络优缺点:

优点:

:共享卷积核,可以很大幅度的减少参数的数量

:不需要手动选择特征,训练好权重,即是特征

深层次的网络抽取图像信息丰富,表达效果很好

缺点:

:需要调参,大量样本,GPU等硬件依赖

:黑箱操作,物理含义不明确

正则化与Dropout:

神经网络学习能力很强,经常会过拟合,而ML里的L1和L2正则项却不能很好地处理这方面问题,在这里引出了随机失活思路!

:每一轮训练中,在每一层中的神经元会有一个开关,有概率失活也有概率打开

:开关是闭合的该怎么算就怎摸算,当开关一旦打开,不管前面算到的甚么结果都会失效,值为零,从新进行学习!

训练数据加随机失活,但是测试数据不进行随机失活,但是会点乘进行约束(两点分布嘛),也就是保持了数学期望!

预测阶段的时间转移到训练阶段,直接在训练的时候对神经元除一个p即可!

:就是把工作全部放在训练阶段,进行随机失活加概率缩放!

防止过拟合的理解:

:第一种,神经网络可能学到很多冗余信息,可以对他进行丢弃,别记住那麽多东西,可以保持泛化能力!

:第二种,每轮训练都关掉一部分感知器,就会得到一个新模型,相当于是进行模型融合!

典型的卷积神经网络(CNN)

解决梯度消失这一问题,首先梯度消失是因为当网络层数很深,BP反向传播误差传播导数连乘就会越来越小到最后无限趋近于零,就传递不了了,这一问题就是把乘法换成加法,就解决了,然后ResNet就出世了!

这个网络的连接不是一层扣一层的,每层都会有一个高速通道(算是一条捷径),尽管你网络很深,或许你可能不会过拟合的!