Python文集机器视觉Python机器学习

哈尔滨工业大学沈俊楠:典型模式-卷积神经网络入门

2018-03-22  本文已影响231人  阿里云云栖号

摘要: 在2018年3月13日云栖社区,来自哈尔滨工业大学的沈俊楠分享了典型模式-卷积神经网络入门。本文详细介绍了关于卷积神经网络的基础概念和知识与讲解,并列举实例展示了卷积和池化的效果。

以下是精彩视频内容整理:

问题引出

学习知识从问题引出入手是一个很好的方法,所以本文将可以围绕下面三个问题来展开:

1.CNN从何而来?有何作用?运行原理是什么?

2.为什么现在图像上用得这么多?怎么用?

3.我想要入门,怎么实践操作下?

本文思维导图如下:

概念原理

预备知识-神经元

神经网络有大量的节点(或称“神经元”、“单元”)和相互链接而成。每个神经元接受输入的线性组合,进行非线性变换(亦称激活函数activation function)后输出。每两个节点之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。

以上图为例,该图即为一个神经元。神经元有a1,a2,a3...an输入,而每个输入中都有权值以及偏置值,对应图中的w1,w2,w3...wn以及b。这些输入与权值的乘积加上偏置会经过激活函数的处理得到输出t。

神经远的作用我们可以根据上图以是否参加音乐节的决策为实力来详细介绍一下。图中a1,a2代表是否有人陪同参加音乐节,w1,w2代表今天的天气如何。分别赋值a1为1,a2为0,w1为5,w2为-2,偏置b代表随意事件,此处赋值为0。这些值的和为s,s=a1w1+a2w2+b。

s作为输入进入激活函数,此处激活函数代表决策,当决策大于某一个值时就参加音乐节,若小于该值就不参加音乐节,最后的输出t即为是否参加音乐节。这就是神经远的构成。

预备知识-激活函数

常用的非线性激活函数有sigmoid、relu等等,前两者sigmoid比较常见与全连接层,后者relu常见与卷积层。这里先简要介绍下最基础的sigmoid。

sigmoid的函数表达式如下:

其中z时一个线性组合,比如z可以等于:z=b+w1a1+w2a2。通过带入很大的正数或很小的负数到g(z)函数中可知,其结果趋近与0或1。因此,sigmoid函数g(z)的图形表示如下图(横轴表示定义域z,纵轴表示值域g(z))。

Sigmoid函数的功能是相当于把一个叔叔压缩值0到1之间。当z是非常打的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。压缩至0到1之间的作用是这样以来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

预备知识-神经网络

定义:将神经元组织在一起,其实便形成了神经网络。下图便是一个三层神经网络结构

最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。

输入层(Input layer)众多神经元(Neuron)接受大量非线性形输入讯息。输入的讯息称为输入向量。

输出层(Output layer)讯息在圣经元链接中传输、分析、权衡,形成输出结果。输出的讯息成为输出向量。

隐藏层(Hidden layer)简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有同多个隐藏层,则意味着多个激活函数

同时,每一层都可能有单个或多个神经元组成,每一层的输出将会作为下一层的输入数据,不断传递,最终有输出层输出最终结果。

CNN的结构

卷积神经网络(Convolutional Neural Network,CNN)是受到神经科学启发后的多层感知机模型的进化。

卷积的概念来自信号处理,是对输入信号经过持续的转换持续的输出另一组信号的过程。图像处理中可以通过卷积完成边缘检测、模糊、锐化等效果。

在计算机视觉(Computer Version)领域中卷积层是指感受野(Receptive Field)于卷积核(Kernel)的内积通过激活函数(Activation Function)之后输出特征图像(Feature Map)

结果多层的卷积层、池化层、全连接层,卷积神经网络便可以赋予计算机视觉等能力。

CNN的机构-感受野

感受野是指某个卷积核在输入图像所看到的空间。

上图表示卷积操作为:卷积核3x3、填充1、步长2。第一排是对5x5蓝色图像进行卷积操作,得到3x3绿色图像。相对左侧的通常表示方法, 左侧表示方法更容易观察到特征的关注点(感受野的中心)和视野(感受野的范围)。第二排是对3x3的绿色图像进行卷积操作,得到2x2黄色图像。

CNN的结构-卷积操作

图像处理中,卷积操作是从输入图像中取出与卷积核大小相同的区块,与卷积核执行内积后生成一个像素,计算完毕后取下一个区块一次类推,最终得到特征图像,过程如下图所示:

卷积操作的好处有两点,第一稀疏连接:眼睛在看东西的时候目光是聚焦在要给相对很小的局部,而不是全部。相对传统多层感知器的隐层节点会连接到图像的每个像素点上,卷积神经网络模拟了眼睛的特性,每个隐层节点通过卷积核连接到图像某个足够小局部的像素点上,从而大大减少权值参数。第二权值共享:如同神经中枢中的神经细胞,知识对某些形状有反应,这样的神经细胞被卷积核来模拟,同一个特征图像中的卷积核的权值是一样的,从而大大减少全职参数。通过仿生而提出的稀疏连接,卷积不仅仅符合视觉原理,复杂度也得到了很好的控制。

CNN的结构-卷积核

以图像为例,卷积是从输入图像中取出与卷积核大小相同的区块,与卷积核执行点乘后生成了特征图像(feature Map)中的一个像素,当一个像素计算完毕后,移动一个像素取下一个区块执行相同的运算。

不同的卷积核会得到不同的输出数据,比如深浅,轮廓等。如果想提取图像的不同特征,则需要使用不同的卷积核。所以卷积核有时候也被形象的称为检测器(Detector)。

CNN的结构-激活函数&特征图像

激活函数(Activation Function)是用来增加非线性能力,使得神经网络可以更好的解决较为复杂的问题。典型的激活函数有Rectified Linear Unit(非线性激活函数),即ReLU函数:Y=max{0,x}。

不同的卷积核将产生不同的特征图像,适合的卷积核就可以为特征来进行图像识别。

CNN的结构-池化层

池化是对某个区域内的内容进行一定统计操作以改变输出的图像。池化层操作有两个典型用途:

1.降低计算

理想情况下,学习到的特征都嗯那个用来分类就好了,但是这种做法不仅在计算机的压力会非常打,还会容易造成过拟合。鉴于图像的特征往往出现在图片的多个地方,所以对于特征进行聚合来提高抽象程度,便显得非常合情合理了。这种池化操作往往通过控制步长使得感受野不重叠。

2.平移不变性

如果特征在不同的图像上有轻微的移动,池化操作能够确保该特征以一定概率在感受野上被识别与保留。这样,比如MNIST所针对的手写数字,及时有轻微的平移,仍然能够被正确识别。这种池化操作的感受野往往是重叠的。

池化操作的算法有两个,分别为平均池化核最大池化。平均池化考虑各种特征,最大池化强调突出特征。

CNN的结构-全连接层

最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,进行了最后一次池化,输出了20个1212的图像,然后通过了一个全连接层变成了1100的向量。

自所以能够做到这样,其实就是有20100个1212的卷积核卷积出来的,对于输入的每一张图,用了一个和图像一样大小的核卷积,这样整幅图就变成了一个数了,如果厚度是20那就是20个核卷积完了之后相加求和。这样就能把一张图高度弄成了一个数了。

由于传统的网络输出都是分类,也就是几个类别的概率甚至就是要给数类别号,那么全连接层的目的就是高度提纯特征,方便交给最后的分类器或者回归。

CNN的处理图像的例子-卷积效果与池化效果

四张图片对应不同卷积核计算结果非别为:左上角模糊blur、右上角向下Sobel、左下角emboss、右下角outline

该池化操作通过max_pool进行的,max_pool为最大池化。如图中为44的特征图像,对其用一个22的框架进行最大池化。可以看出提取出的四个结果分别为四个模块中的最大值分别为6、4、5、8。

应用介绍-LeNet5数字分类

LeNet是第一个卷积神经网络,它的架构室友Yann LeCun等在1998年的论文Gradient-Based Learning Applled to Document Recognition中首先提出的,主要用来识别数字。下图为LeNet的架构:

MNIST数据作为场景。很大程度上,LeNet+MNIDST已经称为深度学习图像处理的Hello World了。MNIST包含三种数据:55000个训练数据点,10000个测试数据点,5000个验证数据点。每个MNIST 数据点有两部分内容:手写数字的图像,对应图像的标签。每个图像的长和宽都是28个像素,总共784像素。

LeNet模型包含:1.使用卷积核最大池化。2.仍然是卷积核最大池化,只是使用64个特征,卷积核仍然是5x5。最大池化后图像大小变为7x7。3.全连接层。4.对全连接层的输出使用劝退。5.直观的softmax层,得到最后的概率输出。

训练是通过损失函数表示模型的预测对比预期有多糟糕,训练的目标是最小化损失函数。预测是最后通过计算图谱便能够完成的。

本文由云栖志愿小组谭昊整理,编辑百见

上一篇下一篇

猜你喜欢

热点阅读