阅读提醒,本文以严谨为主,兼顾理解。

目标

介绍CNNs的基础结构和训练方法。

理解本文所需知识: 高中数学,高中语文

完全读懂本文所需知识: 微积分,线性代数

为了大众阅读,在英文第一次出现的时候,会有标注汉语。

概述

神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络是深度卷积神经网络(deep convolutional neural networks, CNNs),虽然卷积网络也存在浅层结构,但是因为准确度和表现力等原因很少使用。目前提到CNNs和卷积神经网络,学术界和工业界不再进行特意区分,一般都指深层结构的卷积神经网络,层数从”几层“到”几十上百“不定。

CNNs目前在很多很多研究领域取得了巨大的成功,例如: 语音识别,图像识别,图像分割,自然语言处理等。虽然这些领域中解决的问题并不相同,但是这些应用方法都可以被归纳为:CNNs可以自动从(通常是大规模)数据中学习特征,并把结果向同类型未知数据泛化。

背景

半个世纪以前,图像识别就已经是一个火热的研究课题。

1950年中-1960年初,感知机吸引了机器学习学者的广泛关注。这是因为当时数学证明表明,如果输入数据线性可分,感知机可以在有限迭代次数内收敛[1]。感知机的解是超平面参数集,这个超平面可以用作数据分类。然而,感知机却在实际应用中遇到了很大困难,因为1)多层感知机暂时没有有效训练方法,导致层数无法加深,2)由于采用线性激活函数,导致无法处理线性不可分问题,比如“与或”。

这些问题随着后向传播(back propagation,BP)算法和非线性激活函数的提出得到解决。1989年,BP算法被首次用于CNN中处理2-D信号(图像)。

2012年,ImageNet挑战赛中CNN证明了它的实力,从此在图像识别和其他应用中被广泛采纳。

通过机器进行模式识别 ,通常可以被认为有四个阶段:数据获取: 比如数字化图像

预处理: 比如图像去噪和图像几何修正

特征提取:寻找一些计算机识别的属性,这些属性用以描述当前图像与其它图像的不同之处

数据分类:把输入图像划分给某一特定类别

CNN是目前图像领域特征提取最好的方式,也因此大幅度提升了数据分类精度,我将在下文详细解释。

网络结构

基础的CNN由 卷积(convolution), 激活(activation), and 池化(pooling)三种结构组成。CNN输出的结果是每幅图像的特定特征空间。当处理图像分类任务时,我们会把CNN输出的特征空间作为全连接层或全连接神经网络(fully connected neural network, FCN)的输入,用全连接层来完成从输入图像到标签集的映射,即分类。当然,整个过程最重要的工作就是如何通过训练数据迭代调整网络权重,也就是后向传播算法。目前主流的卷积神经网络(CNNs),比如VGG, ResNet都是由简单的CNN调整,组合而来。

这些加粗名词将会在下文详细解释。

CNN图1 某个stage内CNN工作原理

图1显示的是CNN的基础结构,现在大型深层的卷积神经网络(CNNs, 请注意这里是复数)通常由多个上述结构前后连接、层内调整组成,根据功能不同,我们称这些前后连接的结构处于不同阶段(stage)。虽然在主流CNNs中,不同stage里CNN会有不同的单元和结构,比如卷积核 (kernel)大小可能不同,激活函数(activition function) 可能不同,pooling操作可能不存在,但是图1的CNN结构应当能够包含所有的情况。

我们跟随图1来解释,一个stage中的一个CNN,通常会由三种映射空间组成(Maps Volume, 这里不确定是不是应该翻译为映射空间,或许映射体积会更准确),输入映射空间(input maps volume)

特征映射空间(feature maps volume)

池化映射空间(pooled maps volume)

例如图中,输入的是彩色RGB图像,那么输入的maps volume由红,黄,蓝三通道/三种map构成。我们之所以用input map volume这个词来形容,是因为对于多通道图像输入图像实际上是由高度,宽度,深度三种信息构成,可以被形象理解为一种"体积"。这里的“深度”,在RGB中就是3,红,黄,蓝三种颜色构成的图像,在灰度图像中,就是1。

卷积

CNN中最基础的操作是卷积convolution,再精确一点,基础CNN所用的卷积是一种2-D卷积。也就是说,kernel只能在x,y上滑动位移,不能进行深度 (跨通道) 位移。这可以根据图1来理解,对于图中的RGB图像,采用了三个独立的2-D kernel,如黄色部分所示,所以这个kernel的维度是

。在基础CNN的不同stage中,kernel的深度都应当一致,等于输入图像的通道数。

卷积需要输入两个参数,实质是二维空间滤波,滤波的性质与kernel选择有关,CNN的卷积是在一个2-D kernel 和输入的 2-D input map 之间,RGB中各图像通道分别完成。

我们假设单一通道输入图像的空间坐标为

,卷积核大小是

,kernel权重为

,图像亮度值是

,卷积过程就是kernel 所有权重与其在输入图像上对应元素亮度之和,可以表示为,

我们可以用一个例子来说明,

如上图所示,这时候输出的单一元素是

并将kernel随(x,y)平移扫描,可以得到输出空间,这时假设输入图像大小是

,卷积核是

,在不考虑零填充(zero padding)的情况,输出是

注意卷积层的kernel可能不止一个,扫描步长,方向也有不同,这些进阶方式可以归纳一下:可以采用多个卷积核,设为n 同时扫描,得到的feature map会增加n个维度,通常认为是多抓取n个特征。

可以采取不同扫描步长,比如上例子中采用步长为n, 输出是

padding,上例里,卷积过后图像维度是缩减的,可以在图像周围填充0来保证feature map与原始图像大小不变

深度升降,例如采用增加一个1*1 kernel来增加深度,相当于复制一层当前通道作为feature map

跨层传递feature map,不再局限于输入即输出, 例如ResNet跨层传递特征,Faster RCNN 的POI pooling

激活

卷积之后,通常会加入偏置(bias), 并引入非线性激活函数(activation function),这里定义bias为b,activation function 是

,经过激活函数后,得到的结果是,

.

这里请注意,bias不与元素位置相关,只与层有关。主流的activation function 有,线性整流单元(ReLU):

Sigmoid函数:

tanh函数:

根据实际参数大小等性质调整。

图1中feature maps volume的每个元素就是由

。我们可以回到图1的上半部分,这里的feature map是可以可视化的。为了保证阅读体验,我这里再把图1粘贴一遍,

例如采用277*277的RGB图像, 采用96个11*11*3的kernels同时扫描,很容易得到输出的feature maps是96个267*267的二维 feature map, 267*267是单个图像feature map的x,y轴大小,96是卷积核个数,原本的3通道在积分的时候会被作为一个元素加起来。 如上图,这些feature map可视化之后,可以看到4 和35表示边缘特征,23是模糊化的输入,10和16在强调灰度变化,39强调眼睛,45强调红色通道的表现。

池化

池化(pooling),是一种降采样操作(subsampling),主要目标是降低feature maps的特征空间,或者可以认为是降低feature maps的分辨率。因为feature map参数太多,而图像细节不利于高层特征的抽取。

目前主要的pooling操作有:最大值池化 Max pooling:如上图所示,2 * 2的max pooling就是取4个像素点中最大值保留

平均值池化 Average pooling: 如上图所示, 2 * 2的average pooling就是取4个像素点中平均值值保留

L2池化 L2 pooling: 即取均方值保留

Pooling操作会降低参数,降低feature maps的分辨率,但是这种暴力降低在计算力足够的情况下是不是必须的,并不确定。目前一些大的CNNs网络只是偶尔使用pooling.

以上是一个CNN stage的基本结构,需要强调的是,这个结构是可变的,目前大部分网络都是根据基本结构堆叠调整参数,或跳层连接而成。CNN的输出是feature maps,它不仅仅可以被输入全连接网络来分类,也可以接入另外一个“镜像”的CNN,如果输入图像维度与这个新的CNN输出feature maps特征维度相同,即这个新接入的CNN在做上采样, upsampling, 得到的图像可以认为是在做像素级的标注,图像分割[2]。

全连接网络

出现在CNN中的全连接网络(fully connected network)主要目的是为了分类, 这里称它为network的原因是,目前CNNs多数会采用多层全连接层,这样的结构可以被认为是网络。如果只有一层,下边的叙述同样适用。它的结构可能如下图所示:图2,全连接层结构

不同于CNN的滑动卷积,全连接网络每一层的所有单元与上一层完全连接。通常,除了输入层和输出层的其他层,都被认为是隐含层。如图2所示,对于第

层的第

个神经元,它的输出计算方式是,

考虑activation function之后,对于第

层的第

个神经元,输出是

计算这一层中的所有神经元之后, 作为下一层的输入。

全连接网络和CNN的数学表达结构其实很相似,只是不存在关于图像空间上的滑动卷积。

目标函数与训练方法(数学高能预警)

CNN网络的训练误差需要通过一个目标函数来衡量,目前比较流行的目标函数是均方误差(Mean Square Error)和K-L散度(K-L divergence),对于输出层的误差公式很容易判断:MSE:

----------------------------(1)

K-L divergence :

其中

是期望输出(标注标签),

是第

层的第

个神经元的输出。

K-L divergence 和MSE原理本文不再过多介绍,通常K-L divergence的权重更新会比MSE更快,不过本文将通过MSE来举例说明,

如果我们仅仅考虑最后一层的更新,通过梯度下降,权重

的更新方式把

代入公式求导就可以算出,

---(6)

其中

是learning rate, 如果learning rate 取值过大,可能会收敛于震荡,如果learning rate取值过小,可能收敛速度太慢。

以上是如果网络只有最后一层的训练方式,但是实际上对于深层网络,我们很难一次通过数学计算出每一层的权重更新公式,也就是权重很难更新。

可以看出,如果想要训练网络,就需要根据误差更新权重,而如果想要获得误差

,不论是MSE,还是K-L divergence, 都需要两种参数:期望输出

,和当前层权重

(回顾公式,即

)。其中期望输出

来自标签集,很容易获得,而

和误差

相互影响。那么,解决方式就很明显,我们可以先固定一方,更新另一方,这是alternating optimazition优化多参数模型的经典思路。CNN的训练方法思路也来自于此,被称作backpropagation。

Backpropagation算法,大概可以分为两步:

1. 通过训练数据计算网络中的所有

,这里可以回想一下

的计算方法,最初的

只需要输入图像和初始化权重就可以计算,这一步是从输入图像到输出层的计算,即上图中的前向传播。

2. 获得所有

之后,再我们就可以通过目标函数和期望输出计算出最后一层的

,而有了最后一层的

,可以计算出倒数第二层的期望输出

,以此类推,可以计算误差到第一层,并通过求导更新权重。这是上图的后向误差传播(这里表述不严谨)。

上述1,2部操作会交替进行。

实际上BP算法通过以下四个公式更新:

---------(2)

-----------(3)

--------(4)

-----------(5)

(2)和(3)用来计算更新权重

和bias

的所需的梯度(请往上回顾一下单层权重更新部分)

(4)和(5)是(2)和(3)中未知项的来源,(5)用来计算最后一层梯度,(4)用来计算除最后一层外其他层的梯度,并通过传播梯度来传递误差,其中activition function的梯度

和各层权重

都可以在前向传播过程中计算出来。

严谨的BP算法流程:

1. 用随机小数初始化所有权重

和bias

;

2. 利用来自训练集的输入向量(例如一副图像),算出所有的

3.用公式(1)计算 MSE或K-L divergence

4. 用(5)计算

, 并后向传播,用(4)计算出所有其他层的

,

5. 利用(6)更新权重

6. 对训练集中的所有输入向量(图像)重复 2-5,完成一次所有训练成为一个epoch。当MSE误差稳定不变,或者到达某个迭代次数后,BP算法停止。

这就是CNNs的训练过程。

完。

[1] F. Rosenblatt, “Two theorems of statistical separability in the perceptron,” in Proc. Symp. No. 10 Mechanisation Thought Processes, London, 1959, vol. 1, pp. 421–456.

[2] E. Shelhamer, J. Long, and T. Darrell, “Fully convolutional networks for semantic segmentation,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 39, no. 4, pp. 640–651, 2017.

[3] Gonzalez R C. Deep Convolutional Neural Networks [Lecture Notes][J]. IEEE Signal Processing Magazine, 2018, 35(6): 79-87.

[4] Y. LeCun, Y. Bengio, and G. E. Hinton, “Deep learning,” Nature, vol. 521, pp. 436–444, May, 2015.

[5] Y. LeCun, B. Boser, J. S. Denker D. Henderson,R. E. Howard, W. Hubbard, and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition,” Neural Comput., vol. 1, no. 4, pp. 541–551, 1989.

卷积云神经网络_卷积神经网络相关推荐

  1. 卷积网络和卷积神经网络_卷积神经网络的眼病识别

    卷积网络和卷积神经网络 关于这个项目 (About this project) This project is part of the Algorithms for Massive Data cour ...

  2. 卷积云神经网络_卷积神经网络简介

    广告 一.卷积 我们在 2 维上说话.有两个 的函数 f(x, y) 和 g(x, y) .所谓 f 和 g 的卷积就是一个新的 的函数 c(x, y) .通过下式得到: 这式子的含义是:遍览从负无穷 ...

  3. cnn卷积神经网络_卷积神经网络(CNN)原理及应用

    一.CNN原理 卷积神经网络(CNN)主要是用于图像识别领域,它指的是一类网络,而不是某一种,其包含很多不同种结构的网络.不同的网络结构通常表现会不一样.从CNN的一些典型结构中,可以看到这些网络创造 ...

  4. 人脸检测卷积神经网络_卷积神经网络和计算机视觉的人脸面具检测算法

    人脸检测卷积神经网络 In this article, we explore an application of Computer Vision that is largely relevant to ...

  5. 径向基函数神经网络_卷积神经网络的发展

    1968 Hubel & Wiesel 猫脑实验 Hubel和Wiesel干了一件事,他们将猫麻醉后,把电极插到其视觉神经上连接示波器,并给它们看不同的图像,观察脑电波的反应.他们发现猫看到鱼 ...

  6. 神经网络与卷积神经网络_神经网络与人的思想

    神经网络与卷积神经网络 If you are familiar with the terms Artificial Intelligence, Machine Learning , Deep Lear ...

  7. 卷积神经网络学习指南_卷积神经网络的直观指南

    卷积神经网络学习指南 by Daphne Cornelisse 达芙妮·康妮莉丝(Daphne Cornelisse) 卷积神经网络的直观指南 (An intuitive guide to Convo ...

  8. 人工神经网络和卷积神经网络_神经生理学和人工神经网络

    人工神经网络和卷积神经网络 I'm not a doctor in medicine, but I'm really fascinated by biology and especially how ...

  9. 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)

    文章目录 作业1:实现卷积神经网络 1. 导入一些包 2. 模型框架 3. 卷积神经网络 3.1 Zero-Padding 3.2 单步卷积 3.3 卷积神经网络 - 前向传播 4. 池化层 5. 卷 ...

最新文章

  1. 视频检测分割--Deep Feature Flow for Video Recognition
  2. 雨课堂c语言考试题库2020,雨课堂2020题目答案,雨课堂2020作业答案
  3. 上行数据和下行数据什么意思_上行带宽和下行带宽什么意思?
  4. E:VUE 插件 开发与使用 (一)
  5. 程序员发展应该尽早明白13个道理
  6. fcntl函数(网络编程会用)
  7. 信息学奥赛C++语言:满足条件的数累加
  8. PyTorch 深度学习:33分钟快速入门——VGG
  9. ssas表格模型 权限控制_如何在SQL Server 2016中自动执行SSAS表格模型处理
  10. MySQL 联合索引测试2
  11. linux系统网络命令(六)
  12. 安装dubbo管理控制台
  13. Scale和Resolution的相互转换算法
  14. 语音增强算法研究系列笔记 - 语音噪声分类及特点
  15. 一份网站的商业计划书内容概要
  16. 点云 数据增强(Data Augmentation):方法与python代码
  17. win10主题更换_小白如何做到不更换硬件提升电脑性能做到不卡顿?
  18. 如何使用思岚robostudio进行地图优化?
  19. android 键盘隐藏监听,Android监听键盘显示和隐藏
  20. 某位算法工程师对自己工作的反思

热门文章

  1. 黑马程序员高薪就业学习方法揭秘
  2. RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍
  3. 成都计算机应用研究所夏令营,北京师范大学环境学院2015年大学生暑期夏令营...
  4. 天天爱跑步noip2016
  5. 密室鼻祖 深红色房间超详细攻略
  6. CISP-DSG证书有效期多久?是否需要续证?
  7. KT1025A蓝牙音频BLE芯片读取U盘和TF卡的TXT BIN文件串口输出
  8. MySQL 自动故障转移工具--mysqlfailover
  9. 2013新东方考研英语视频课程(33G)【全程无加密】
  10. 安装使用Discuz!破解模版插件提示“您安装的不是正版应用