深度学习Deep Learning(01)_CNN卷积神经网络

深度学习 Deep Learning

  • github地址:https://github.com/lawlite19/DeepLearning_Python
  • 有关神经网络的部分可以查看这里的BP神经网络的部分:https://github.com/lawlite19/MachineLearning_Python

一、CNN卷积神经网络

  • 参考文章:http://cs231n.github.io/convolutional-networks/#conv

1、概述

  • 典型的深度学习模型就是很深层的神经网络,包含多个隐含层,多隐层的神经网络很难直接使用BP算法进行直接训练,因为反向传播误差时往往会发散,很难收敛
  • CNN节省训练开销的方式是权共享weight sharing,让一组神经元使用相同的权值
  • 主要用于图像识别领域

2、卷积(Convolution)特征提取

  • 卷积核(Convolution Kernel),也叫过滤器filter,由对应的权值W和偏置b体现
  • 下图是3x3的卷积核在5x5的图像上做卷积的过程,就是矩阵做点乘之后的和
    深度学习Deep Learning(01)_CNN卷积神经网络_第1张图片
    i个隐含单元的输入就是:,其中就时与过滤器filter过滤到的图片
  • 另外上图的步长stride1,就是每个filter每次移动的距离
  • 卷积特征提取的原理

    • 卷积特征提取利用了自然图像的统计平稳性,这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。
    • 当有多个filter时,我们就可以学到多个特征,例如:轮廓、颜色等
  • 多个过滤器filter(卷积核)

    • 例子如下
      深度学习Deep Learning(01)_CNN卷积神经网络_第2张图片
    • 一张图片有RGB三个颜色通道,则对应的filter过滤器也是三维的,图像经过每个filter做卷积运算后都会得到对应提取特征的图像,途中两个filter:W0和W1,输出的就是两个图像
    • 这里的步长stride2(一般就取2,3)
    • 在原图上添加zero-padding,它是超参数,主要用于控制输出的大小
    • 同样也是做卷积操作,以下图的一步卷积操作为例:
      与w0[:,:,0]卷积:0x(-1)+0x0+0x1+0x1+0x0+1x(-1)+1x0+1x(-1)+2x0=-2
      与w0[:,:,1]卷积:2x1+1x(-1)+1x1=2
      与w0[:,:,2]卷积:1x(-1)+1x(-1)=-2
      最终结果:-2+2+(-2)+1=-1 (1为偏置)
      深度学习Deep Learning(01)_CNN卷积神经网络_第3张图片

3、池化(Pooling)

  • 也叫做下采样
  • Pooling过程
    • 把提取之后的特征看做一个矩阵,并在这个矩阵上划分出几个不重合的区域,
    • 然后在每个区域上计算该区域内特征的均值最大值,然后用这些均值或最大值参与后续的训练
      深度学习Deep Learning(01)_CNN卷积神经网络_第4张图片
      -下图是使用最大Pooling的方法之后的结果
      深度学习Deep Learning(01)_CNN卷积神经网络_第5张图片
  • Pooling的好处
    • 很明显就是减少参数
    • Pooling就有平移不变性((translation invariant)
      如图feature map12x12大小的图片,Pooling区域为6x6,所以池化后得到的feature map2x2,假设白色像素值为1,灰色像素值为0,若采用max pooling之后,左上角窗口值为1
      深度学习Deep Learning(01)_CNN卷积神经网络_第6张图片
      将图像右移一个像素,左上角窗口值仍然为1
      深度学习Deep Learning(01)_CNN卷积神经网络_第7张图片
      将图像缩放之后,左上角窗口值仍然为1
      深度学习Deep Learning(01)_CNN卷积神经网络_第8张图片
  • Pooling的方法中average方法对背景保留更好,max对纹理提取更好
  • 深度学习可以进行多次卷积、池化操作

4、激活层

  • 在每次卷积操作之后一般都会经过一个非线性层,也是激活层
  • 现在一般选择是ReLu,层次越深,相对于其他的函数效果较好,还有Sigmod,tanh函数等
    深度学习Deep Learning(01)_CNN卷积神经网络_第9张图片
  • sigmodtanh都存在饱和的问题,如上图所示,当x轴上的值较大时,对应的梯度几乎为0,若是利用BP反向传播算法, 可能造成梯度消失的情况,也就学不到东西了

5、全连接层 Fully connected layer

  • 将多次卷积和池化后的图像展开进行全连接,如下图所示。
    这里写图片描述
  • 接下来就可以通过BP反向传播进行训练了
  • 所以总结起来,结构可以是这样的
    深度学习Deep Learning(01)_CNN卷积神经网络_第10张图片

6、CNN是如何工作的

  • 看到知乎上的一个回答还不错:https://www.zhihu.com/question/52668301
  • 每个过滤器可以被看成是特征标识符( feature identifiers)
  • 如下图一个曲线检测器对应的值
    深度学习Deep Learning(01)_CNN卷积神经网络_第11张图片
  • 我们有一张图片,当过滤器移动到左上角时,进行卷积运算
    深度学习Deep Learning(01)_CNN卷积神经网络_第12张图片
  • 当与我们的过滤器的形状很相似时,得到的值会很大
    深度学习Deep Learning(01)_CNN卷积神经网络_第13张图片
  • 若是滑动到其他的部分,可以看出很不一样,对应的值就会很小,然后进行激活层的映射。
    深度学习Deep Learning(01)_CNN卷积神经网络_第14张图片
  • 过滤器filter的值怎么求到,就是我们通过BP训练得到的。

你可能感兴趣的:(原创,GitHub,深度学习,机器学习)