防止过拟合方法 深度学习(一)-CNN原理研究

深度学习(一)-CNN原理研究

基本概念

协方差矩阵

关于协方差矩阵的理解

线性与非线性

“线性”=”齐次性”+”可加性”, 
“齐次性”是指类似于: f(ax)=af(x), 
“可加性”是指类似于: f(x+y)=f(x)+f(y), 
这里没有太多特别的原因, 就是一个名字. “非线性”当然就是这两条至少之一不成立.

似然函数

如何理解似然函数? 
贝叶斯公式的直观理解(先验概率/后验概率) 
详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

凹凸函数

定义 
若这里凸集C即某个区间I,那么就是:设f为定义在区间I上的函数,若对I上的任意两点 和任意的实数 ,总有

这里写图片描述

则f称为I上的凸函数,当且仅当其上境图(在函数图像上方的点集)为一个凸集。

判定 
对于实数集上的凸函数,一般的判别方法是求它的二阶导数,如果其二阶导数在区间上非负,就称为凸函数。(向下凸) 
如果其二阶导数在区间上恒大于0,就称为严格凸函数。

梯度下降法

[机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent) 
梯度下降(Gradient Descent)小结

激活函数

1. 激活函数的作用

反向传播算法

1.重点参考:一文弄懂神经网络中的反向传播法——BackPropagation 
2.如何理解神经网络里面的反向传播算法? 
3.反向传播算法(过程及公式推导)

监督与非监督学习

聚类(序)——监督学习与无监督学习

主成分分析(Principal Components Analysis,PCA)

PCA是用来数据降维的。思想是:假设nxn的矩阵A,有协方差矩阵B,计算B的n个特征值和特征向量 U = [u1 u2….un]。U就构成了n维空间的新基,将特征值按从大到小排列,取前K个特征向量。

数据旋转 
对矩阵A进行在U基上进行旋转,即 

Arot=UTAArot=UT∗A

降维 
将矩阵A从n维降到k维,只需取 ArotArot的前K个成分。

选择主成分个数 
一般采用经验法,计算方差百分比大于99%,即从n个特征值(从大到小排序)取前k个特征值,使得:

K=ki=0λini=0λi>=0.99K=∑i=0kλi∑i=0nλi>=0.99

参考:UFLDL 教程学习笔记(四)主成分分析

CNN的整体网络结构

卷积神经网络( Convolutional Neural Network,简称CNN)是深度学习的一种重要算法。卷积神经网络是在BP神经网络的改进,与BP类似,都采用了前向传播计算输出值,反向传播调整权重和偏置;CNN与标准的BP最大的不同是:CNN中相邻层之间的神经单元并不是全连接,而是部分连接,也就是某个神经单元的感知区域来自于上层的部分神经单元,而不是像BP那样与所有的神经单元相连接。

CNN的有三个重要的思想架构:

1.局部区域感知

每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。

隐含层每个神经元负责图像的一部分区域,综合起来就是整个图像。例如:图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了。这只是一种滤波器,也就是一个Feature Map的神经元个数,如果100个Feature Map就是100倍了。需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1 。这个也是同一种滤波器共享的。

这里写图片描述

2.权重共享

每个神经元与局部区域的连接权值参数都是一样的,也就是说它们共享一个过滤器(即卷积核),但是这只能过滤一种特征。如果需要关注多个特征,就设计多个卷积核。

权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

3.空间或时间上的降采样

为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。

对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

CNN整体网络结构

这里写图片描述

这里写图片描述

下面我来推导一下每层的神经元数目和参数的个数。 
1、输入层:输入层输入一个28*28的图片。 
2、卷积层1:该层使用20个5*5的卷积核分别对输入层图片进行卷积,所以包含20*5*5=500个参数权值参数。卷积后图片边长为(28-5+1)/1 = 24,故产生20个24*24个map,包含20*24*24 = 11520个神经元。 
3、池化(pooling)层1:对上一层每个2*2区域进行降采样,选取每个区域最大值,这一层没有参数。降采样过后每个map的长和宽变为原来的一半。 
4、卷积层2:该层使用50个5*5的卷积核分别对上一层的20个map进行卷积(每个卷积核一次同时对20个map进行卷积),所以包含50*5*5=1250个参数权值参数。卷积后图片边长为(12-5+1)/1 = 8,故产生50个8*8个map,包含50*8*8 = 3200个神经元。 
5、池化层2:和上一个池化层功能类似,将8*8的map降采样为4*4的map。该层无参数。 
6、全连接层1:将上一层的所有神经元进行连接,该层含有500个神经元,故一共有50*4*4*500 = 400000个权值参数。 
7、relu层:激活函数层,实现x=max[0,x],该层神经元数目和上一层相同,无权值参数。 
8、全连接层2:功能和上一个全连接层类似,该层共有10个神经元,包含500*10=5000个参数。 
9、softmax层:实现分类和归一化。

卷积层

卷积输出大小计算 
输入图片大小:nxn 
卷积核大小:fxf 
步长:s 
Padding大小:p,假设上下补齐一样大 
则卷积输出大小为:[(n+2p-f)/s + 1],向下取整。

卷积层的前向计算

输入为28*28的图像,经过5*5的卷积之后,得到一个(28-5+1)*(28-5+1) = 24*24、的map。卷积层2的每个map是不同卷积核在前一层每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。

每次用卷积核与map中对应元素相乘,然后移动卷积核进行下一个神经元的计算。如图中矩阵C的第一行第一列的元素2,就是卷积核在输入map左上角时的计算结果。在图中也很容易看到,输入为一个4*4的map,经过2*2的卷积核卷积之后,结果为一个(4-2+1) *(4-2+1) = 3*3的map。

这里写图片描述

卷积层的后向计算

在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。 
在上图中,我们的矩阵A11通过权重B11与C11关联。而A12与2个矩阵C中2个元素相关联,分别是通过权重B12和C11关联,和通过权重B11和C12相关联。矩阵A中其他元素也类似。

那么,我们有没有简单的方法来实现这样的关联呢。答案是有的。可以通过将卷积核旋转180度,再与扩充后的梯度矩阵进行卷积。扩充的过程如下:如果卷积核为k*k,待卷积矩阵为n*n,需要以n*n原矩阵为中心扩展到(n+2(k-1))*(n+2(k-1))。具体过程如下: 
假设D为反向传播到卷积层的梯度矩阵,则D应该与矩阵C的大小相等,在这里为3*3。我们首先需要将它扩充到(3+2*(2-1))* (3+2*(2-1)) = 5*5大小的矩阵。 
这里写图片描述 
同时将卷积核B旋转180度: 
这里写图片描述 
将旋转后的卷积核与扩充后的梯度矩阵进行卷积: 
这里写图片描述

实际上convn内部是否旋转对网络训练没有影响。计算出的梯度矩阵就可以用来更新权值与偏置了。

池化层

池化层的输入一般来源于上一个卷积层,主要作用是提供了很强的鲁棒性(例如max-pooling是取一小块区域中的最大值,此时若此区域中的其他值略有变化,或者图像稍有平移,pooling后的结果仍不变),并且减少了参数的数量,防止过拟合现象的发生。池化层一般没有参数,所以反向传播的时候,只需对输入参数求导,不需要进行权值更新。

池化输出大小计算 
采用卷积一样的公式,则卷积输出大小为:[(n+2p-f)/s + 1],向下取整。

前向计算

前向计算过程中,我们对卷积层输出map的每个不重叠(有时也可以使用重叠的区域进行池化)的n*n区域(我这里为2*2,其他大小的pooling过程类似)进行降采样,选取每个区域中的最大值(max-pooling)或是平均值(mean-pooling),也有最小值的降采样,计算过程和最大值的计算类似。

后向计算

对于max-pooling,在前向计算时,是选取的每个2*2区域中的最大值,这里需要记录下最大值在每个小区域中的位置。在反向传播时,只有那个最大值对下一层有贡献,所以将残差传递到该最大值的位置,区域内其他2*2-1=3个位置置零。具体过程如下图,其中4*4矩阵中非零的位置即为前边计算出来的每个小区域的最大值的位置。

对于mean-pooling,我们需要把残差平均分成2*2=4份,传递到前边小区域的4个单元即可。

局部响应归一化LRN(Local Response Normalization)

LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力

深度学习的局部响应归一化LRN(Local Response Normalization)理解

全连接层

全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全相连的特性,一般全连接层的参数也是最多的。

正则化及Dropout层

正则化及Dropout都能很好的防止过拟合。

正则化 
P-范数公式

xp=(i=0|xpi|)1p‖x‖p=(∑i=0∞|xip|)1p

L1范数:

λx1λ‖x‖1

L2范数:

λ2x2λ2‖x‖2

参考:Markdown公式编辑学习笔记 
Dropout

Dropout: A Simple Way to Prevent Neural Networks from Overfitting

softmax层

Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。比如我们的网络要完成的功能是识别0-9这10个手写数字,若最后一层的输出为[0,1,0, 0, 0, 0, 0, 0, 0, 0],则表明我们网络的识别结果为数字1。 
Softmax的公式为这里写图片描述,可以直观看出如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,并且对所有输入数据进行归一化。

参考:简单易学的机器学习算法——Softmax Regression 
Logistic Regression(逻辑回归)原理及公式推导 
Softmax回归

参数初始化、更新、调优

权值初始化

1.权重初始化 
参考:caffe中weight_filler:7种权值初始化的方法 
caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?

2.其它常用层及参数 
参考:Caffe学习系列(5):其它常用层及参数

权值更新

参数调优

Paper Reading

AlexNet

原文地址:ImageNet Classification with Deep Convolutional Neural Networks 
参考文章

VGGNet

LeNet-5(难懂)

精读第2段,泛读第3段

疑问

1.对一张图片进行卷积,边缘特征如何保证检测到?例如在一张 32 x 32 的输入图像上,5 x 5 的过滤器能够覆盖到 784 个不同的位置。这 784 个位置可映射为一个 28 x 28 的数组 
A:Zero Padding。就是在32x32周围增加两层0变成36x36,这样就达到了卷积后仍保持32x32

2.每层卷积核大小3x3/5x5是经验选择?每层卷积核数量如何确定? 
A:

参考文章

1.【重要】CNN(卷积神经网络)是什么?有入门简介或文章吗? 
3.卷积神经网络算法的一个实现 
4.系统学习深度学习(四) –CNN原理,推导及实现源码分析 
5.编写C语言版本的卷积神经网络CNN之一:前言与Minst数据集 
6.【重要】深度学习笔记系列 
7.【原理深刻】Deep Learning(深度学习)学习笔记整理系列之(七)

猜你喜欢

转载自blog.csdn.net/hellocsz/article/details/80764776