神经网络

卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。多了许多传统神经网络没有的层次。

卷积神经网络的层级结构

  • 数据输入层/Input Layer
  • 卷积计算层/Conv Layer
  • 激励层/ReLU Layer
  • 池化层/Pooling Layer
  • 全连接层/FC Layer

1.数据输入层

该层要做的处理主要是对原始图像数据进行预处理,其中包括:

  • 去均值:把输入数据各个维度都中心化为0
  • 归一化:幅度归一化到同样的范围
  • PCA/白化:用PCA降维;白化是对数据哥哥特征轴上的幅度归一化

去均值归一化的效果图:

去相关与白化效果图:

2.卷积计算层

在卷积层,有两个关键操作:

  • 局部关联。每个神经元看做一个滤波器(filter)
  • 窗口(receptive field)滑动,filter对局部数据进行计算

卷积层遇到的几个名词:

  • 深度/depth
  • 步长/stride(窗口一次滑动的长度)
  • 填充值/zero-padding

填充值是什么呢?比如一个5*5的图片(一个格子一个像素),我们滑动窗口取2*2,步长取2,那么我们发现还剩下1个像素无法滑完,那怎么办?

在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。

卷积计算过程:

 

参数共享机制

  • 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性
  • 需要估算的权重个数减少
  • 一组固定的权重和不同窗口内数据做内积:卷积

3.激励层

把卷积层输出结果做非线性映射。CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下:

激励层的实践经验:

  • 不要用sigmoid
  • 首先试ReLU,因为收敛速度快,但要小心
  • 如果不能使用ReLU,试用Leaky ReLU或者Maxout
  • 某些情况下tanh倒是不错的结果,但是很少

4.池化层

池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减少过拟合。简而言之,如果输入是图像的话,那么池化层的作用就是压缩图像。

池化层用的方法有Max pooling和average pooling,而实际用的较多的是Max pooling。

5.全连接层

跟传统的神经网络的连接方式一样。

卷积神经网络的精华:三概念两核心

两个核心:卷积和池化

  • 卷积:主要起到作用的是抽取特征,是网络具有一定转移不变性,也有一定的降维作用。概述:设定一个n行m列的卷积窗口,采用的ReLU作为激励函数,对于输入X进行卷积操作。注意:1,卷积可能是单通道或者多通道卷积;2,卷积操作分为padding和非padding两种方式,padding也分为很多方式,比如zero-padding,mean-padding等。3,对同一个输入可以设置不同大小卷积和,或从不同的位置,或不同的卷积步长多次进行卷积,目的就是为了尽可能多的抽取特征。
  • 池化:主要起到降维的作用。概述:设置一个n行m列的池化窗口,对输入X进行池化操作,采用Relu作为激活函数,也可以采用sigmoid或tans型激活函数,但注意函数的饱和死区特性导致的反向传播时的梯度消失问题,可以配合Batch Normalization使用。池化也有多种方式,比如max pooling,average polling

三概念:局部感受野,权值共享和下采样/降采样

  • 局部感受野:卷积操作时卷积窗口与输入X重合的部分。
  • 权值共享:卷积操作或池化操作时,卷积窗口或池化窗口的权值不发生变化。
  • 下采样/降采样:直观感觉就是池化操作。

卷积神经网络的训练

  • 同一般机器学习算法,先定义Loss function,衡量和实际结果之间的差距。
  • 找到最小化损失函数的W和b,CNN中用的算法是SGD(随机梯度下降)

卷积神经网络的优缺点

优点:

  • 共享卷积核,对高维数据处理无压力
  • 无需手动选取特征,训练好权重,即得特征分类效果好

缺点:

  • 需要调参,需要大样本量,训练最好要GPU
  • 物理含义不明确(也就是说,我们并不知道每个卷积层提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

卷积神经网络之典型CNN

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

卷积神经网络之fine-tuning

fine-tuning就是使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练,那么我们为什么不随机选取几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时。

fine-tuning具体做法:

  • 复用相同层的权重,新定义层取随机权重初始值
  • 调大新定义层的学习率,调小复用层学习率

边缘过渡不平滑

  • 解决办法:采样窗口彼此重叠

总结

卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好的避免了BP神经网络中反向传播时候梯度损失得太快。

卷积神经网络CNN主要用来识别位移,缩放及其他形式扭曲不变性的二维图形,由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。

CNN结构的更多相关文章

  1. CNN结构:图片风格分类效果已成(StyleAI)

    CNN结构:图片风格分类效果已成.可以在色彩空间对图片风格进行分类,并进行目标分类. StyleAI构架:FasterRCnn + RandomTrees 为何不使用MaskRCNN? MaskRCN ...

  2. CNN结构:用于检测的CNN结构进化-分离式方法

    前言: 原文链接:基于CNN的目标检测发展过程       文章有大量修改,如有不适,请移步原文. 参考文章:图像的全局特征--用于目标检测 目标的检测和定位中一个很困难的问题是,如何从数以万计的候选 ...

  3. AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)

    前言: 文章:CNN的结构分析-------:  文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...

  4. CNN结构演变总结(一)经典模型

    导言:    自2012年AlexNet在ImageNet比赛上获得冠军,卷积神经网络逐渐取代传统算法成为了处理计算机视觉任务的核心.    在这几年,研究人员从提升特征提取能力,改进回传梯度更新效果 ...

  5. CNN结构演变总结(二)轻量化模型

    CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...

  6. CNN结构演变总结(三)设计原则

    CNN结构演变总结(一)经典模型 CNN结构演变总结(二)轻量化模型 前言: 前两篇对一些经典模型和轻量化模型关于结构设计方面的一些创新进行了总结,在本文将对前面的一些结构设计的原则,作用进行总结. ...

  7. CNN结构:场景分割与Relation Network

    参考第一个回答:如何评价DeepMind最新提出的RelationNetWork 参考链接:Relation Network笔记  ,暂时还没有应用到场景中 LiFeifei阿姨的课程:CV与ML课程 ...

  8. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...

  9. CNN结构:SPP-Net为CNNs添加空间尺度卷积-神经元层

    前几个CNN检测的框架要求网络的图像输入为固定长宽,而SPP-Net在CNN结构中添加了一个实现图像金字塔功能的卷积层SPP层,用于在网络中实现多尺度卷积,由此对应多尺度输入,以此应对图像的缩放变换和 ...

随机推荐

  1. nginx整合php+lua+oracle环境搭建

    nginx整合php+lua+oracle环境搭建 标签: nginxluaoraclephplinux -- : 1473人阅读 评论() 收藏 举报 分类: 技术() 版权声明:本文为博主原创文章 ...

  2. WEB前端的性能优化

    转自:http://www.2cto.com/kf/201604/498725.html 网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发 ...

  3. anaconda指定镜像源,解决conda下载速度慢失败问题

    conda升级默认官网地址,速度会特别慢,现在我们指定一个当前可用的镜像,步骤如下: 1.执行命令,生成.condarc文件 conda config --add channels https://m ...

  4. UCI机器学习库和一些相关算法(转载)

    UCI机器学习库和一些相关算法 各种机器学习任务的顶级结果(论文)汇总 https://github.com//RedditSota/state-of-the-art-result-for-machi ...

  5. Webdings 图形字体

    如果想在网页上插入图形,最简单的方式就是使用图形字体.Webdings 是一种微软开发的图形字体,在IE浏览器上可以使用它. 什么是Webdings Webdings 是一个TrueType的ding ...

  6. TCP会话劫持_转

    前言通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意:其实,真正的入侵是占领整个内部网络.针对内部网络的攻击方法比较多,但比较有效的方法非ARP欺骗.DNS欺骗莫属了.但是,不管 ...

  7. 手把手教你Chrome扩展开发:本地存储篇

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

  8. ctrl +z

    #bg 1 [1]+ /root/bin/rsync.sh & 用 jobs 命令查看正在运行的任务: #jobs [1]+ Running /root/bin/rsync.sh & ...

  9. Python中如何将字符串作为变量名

    应用场景描述: 通过配置文件获取服务器上配置的服务名及运行端口号,编写python脚本检测服务上服务是否在运行? #!/usr/bin/env python # -*- coding:utf-8 -* ...

  10. Python_uuid 学习总结

    1. 背景知识: UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, ...