卷积神经网络(CNN)入门讲解

卷积神经网络(CNN)入门讲解


)
转载: 知乎专栏系列文章 卷积神经网络(CNN)入门讲解 @蒋竺波

微信公号:follow_bobo
机器学习(自动找Loss最小的函数)问题分类
回归:得到的output为数值。预测未来的数据
分类:方法RNN,CNN。
生成Generate:比如翻译文字,生成图片。
监督学习Supervised Learning:准备海量数据作为input+Labled Data(期待结果)
强化学习Reinforcement:不需要期待结果,让机器自己相互对弈,自己判断输出结果是否为理想答案

对于机器找到的函式用Loss损失函数来评估函数的好坏。
神经网络架构(Network Architecture)确定函式的搜寻范围
CNN
简化神经网络的架构
每个neutral只要连接到图片的一个很小的局部区域(一些patterns比整张图片小很多)—— Convolution处理
侦察同样pattern的neutral共用一组参数(同样的patterns出现在一张图片的不同区域)——Convolution处理
Subsampling the pixels(下采样) 抽取掉偶数和奇数的像素条使得图片缩小(Subsamling部分像素不会改变整张图片的特性)——Pooling处理
CNN结构

CNN主要由3种模块构成:

卷积层(Convolution)
采样层(Pooling)
全连接层

大致上可以理解为:

通过第一个卷积层提取最初特征,输出特征图(feature map)
通过第一个采样层对最初的特征图(feature map )进行特征选择,去除多余特征,重构新的特征图
第二个卷积层是对上一层的采样层的输出特征图(feature map)进行二次特征提取
第二个采样层也对上层输出进行二次特征选择
全连接层就是根据得到的特征进行分类
在这里插入图片描述

这个最简单的卷积神经网络说到底,终究是起到一个分类器的作用
卷积层负责提取特征,采样层负责特征选择,全连接层负责分类

卷积层

卷积核(滤波器Filter,convolution kernel)是可以用来提取特征的,图像和卷积核卷积,就可以得到特征值,就是destination value。卷积核放在神经网络里,就代表对应的权重(weight)
每一个FIlter都是一个Matrix,每个Matrix中的数值都是网络的参数,需要进行学习后得到。如下图3X3的卷积核相当于在侦察3X3的pattern,不看整张图
Convolution

这里我想强调一下点乘,虽说我们称为卷积,实际上是位置一一对应的点乘,不是真正意义的卷积。点乘完所有结果加起来,实际上就是把所有作用效果叠加起来。
比如:通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色, 这三个颜色通道叠加之后,就是我们看到的RGB图片了。
RGB
每种颜色的对应分量代表原图中该色彩通道对应的像素值,对应的三个卷积核,里面的数字即相当于权重,与反向传播算法(backpropagation)有关。
假设我们已经知道对应分量以及卷积核:
在这里插入图片描述

我们知道输入,知道神经元的权值(weights)了,根据神经网络公式:

Output = = = 在这里插入图片描述
我们实现卷积运算最后的方式,就是先从左到右,每隔x列Pixel,向右移动一次卷积核进行卷积(x可以自己定义),如下图黄—蓝---紫,就是卷积核移动的顺序,这里x =1(这里的x我们叫作stride,就是步长的意思,如果我们x = 2, 就是相当每隔两行或者两列进行卷积,当已经到最右),再从上到下,每隔X行pixel,向下移动一次卷积核,移动完成,再继续如上所述,从左到右进行。
这里出现了一个问题,如果按照下面的这种卷积方式,以上面的例子,第一层卷积输入的特征图是5X5,但输出的会变成3X3,如果第二层卷积层的卷积核仍然是3x3, 那么第二层卷积层输出的特征图就是1x1,CNN的特征提取就这么结束了。

在这里插入图片描述

因此,我们需要zero-padding
在这里插入图片描述
同样是stride x=1 的情况下,补0比原来没有添0 的情况下进行卷积,从左到右,从上到下都多赚了2次卷积,这样第一层卷积层输出的特征图(feature map)仍然为5x5,和输入图片的大小一致。而没有添0的第一层卷积层输出特征图大小为3x3

这样有什么好处呢

(1)我们获得的更多更细致的特征信息,上面那个例子我们就可以获得更多的图像边缘信息

(2)我们可以控制卷积层输出的特征图的size,从而可以达到控制网络结构的作用,还是以上面的例子,如果没有做zero-padding以及第二层卷积层的卷积核仍然是3x3, 那么第二层卷积层输出的特征图就是1x1,CNN的特征提取就这么结束了。同样的情况下加了zero-padding的第二层卷积层输出特征图仍然为5x5,这样我们可以再增加一层卷积层提取更深层次的特征

采样

采样(pooling/subsample)层实际上就是一个特征选择的过程。
假设我们用边缘滤波器去卷积输入图片,得到的特征值矩阵如下:

在这里插入图片描述
采样层(pooling)非常好理解,我们这里特指maxpooling,在四个方格里选最大的那个,对,就是9
这个矩阵就是特征图,数字的含义,你可以理解为能代表这个特征的程度。比如上一层卷积层的卷积核或者说过滤器是边缘过滤器。9的意思就代表在这个区域,这一块部位最符合边缘特征。

Maxpooling

Maxpooling 就是在这个区域内选出最能代表边缘的值,也就是9,然后丢掉那些没多大用的信息
在这里插入图片描述
可以理解成每2X2的大正方形(包含四个最小正方形)为一个单位,在每个单位的四个小方块中选一个最大值作为这个单位的代表。共同组成池化后的结果。
池化层还有什么性质
它可以一定程度提高空间不变性,比如说平移不变性,尺度不变性,形变不变性。单独区域的特征,以及特征之间的相对位置(而不是绝对位置)不发生改变。
以平移不变性(translation invariant)为例,意思就是图像经过一个小小的平移之后,依然产生相同的池化特征。这个小小的平移要注意了,这个平移是在你的池化矩阵的范围,对于单个像素,有8个变换的方向(上、下、左、右、左上、左下、右上、右下),如果最大层是在2*2的窗口上面实现,这8个可能的配置中,有3个可以准确的产生和平移前相同的结果(filter size 2x2)【右,下,右下】
在这里插入图片描述
池化层提高空间不变性的重要性在于当像素位置发生变化时,我们仍然希望分类器可以识别。比如下图中的数字2,虽然位置发生了变化,但分类器仍然可以识别。
在这里插入图片描述
Pooling 层说到底还是一个特征选择,信息过滤的过程,也就是说我们损失了一部分信息,这是一个和计算性能的一个妥协,随着运算速度的不断提高,我觉得这个妥协会越来越小。现在有些网络都开始少用或者不用pooling层了。

average pooling

实际上就是把filter 里面的所以值求一个平均值

特征提取的误差主要来自两个方面:

(1)邻域大小受限;

(2)卷积层权值参数误差。

目前主流上对于average pooling 和max-pooling 的主要区别在于

average -pooling能减小第一种误差,更多的保留图像的背景信

max-pooling能减小第二种误差,更多的保留纹理信息

激活函数

在讨论激活函数之前,我们先来看一个普通的神经网络,有多普通
在这里插入图片描述
这个神经网络,可以轻松解决普通的线性二分类问题。
在这里插入图片描述

可是现实生活中,更多的是复杂的二分类。你会发现,一个普通的线性神经网络无论怎么移动和反转,都无法将上图分类,因为给出的样本点就不是线性可分的。
也就是说,现在的神经网络学习能力非常有限,无法去解决非线性问题。
其实大数早已经教过我们,线性函数具有可加性和齐次性,任意线性函数连接都可以等价为一个单一线性函数即叠加简单神经网络解决不了非线性分类问题

因为我们最终要解决一个分类问题(classification)

那我们还是从最简单的二分类非线性激活函数开始—阶跃函数(Step Function),当输入(也就是神经网络Y的输出)大于0就被分类到1(100% 被激活 ),小于0就分到0,(没有被激活)
我们希望它可以是0%—100%任意值,值越大,激活程度越高 对于分类,也就意味着它属于这一类的概率越大。
综上所述,各种激活函数层数不穷,各有优缺点。比如大家都经常听到或者用到的Relu, sigmoid,tanh等等。
在这里插入图片描述

你看sigmoid 只会输出正数,以及靠近0的输出变化率最大,tanh和sigmoid不同的是,tanh输出可以是负数,ReLu是输入只能大于0,如果你输入含有负数,ReLu就不适合,如果你的输入是图片格式,ReLu就挺常用的。
因为每个激活函数都要考虑输入输出以及数据变化,所以要谨慎选择。
激活函数确实是很好宽广的点,它对于提高模型鲁棒性,非线性表达能力,缓解梯度消失问题,将特征图映射到新的特征空间从何更有利于训练,加速模型收敛等问题都有很好的帮助。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值