1、卷积神经网络(Convolutional Neural Networks,CNN)的作用:
1.cnn跟全连接的区别:原来一个输出神经元的计算是跟所有输入层的神经元相连,现在只是局部输入层的
神经元相连;同一所个通道中所有神经元的计算共享同一组权重和偏置
CNN可以有效的降低 传统深度神经网络 参数量与计算量。
2.FC DDN 参数量与连接数:
参数量 = 连接数 = 输入featureMap总特征数(尺寸) * 输出featureMap总特征数(尺寸)
3.CNN参数量(卷积核): 跟模型总的训练时间和次数有很大关系,参数量越多花的训练时间越长,越难训练;
参数量就是W数(卷积核尺寸,例:3*3*3*2)
CNN链接数量(卷积): 跟当次训练的时间有关,越多计算量越大,训练时间越长;
连接数的数量就是参数量(即卷积核的大小)*输出层的尺寸(卷积核大小)*输出层的尺寸。
注意b加的位置就是每一个输出通道所有输入通道计算结果总和 + b
CNN下采样(池化)的连接数: filter尺寸(4)*通道数*输出层的尺寸
CNN全连接的连接量: 等于参数量,等于输入层尺寸(2维)*输入层通道数*输出尺寸(1维)
2、常见的CNN结构有:
LeNet-5、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet等等,其中在LVSVRC2015冠军ResNet是AlexNet的20多倍,
是VGGNet的8倍;
其中:AlexNet、ZFNet、GoogleNet 是过度的神经网络
① LeNet-5:结构最为简单,常用作小型简单的项目,例如嵌入式芯片常常用到LeNet-5
② VGGNet16、ResNet(151层):模型复杂,适合处理大型的项目,占用资源较高。
3、从这些结构来讲CNN发展的一个方向就是层次的增加,通过这种方式可以利用增加的非线性得出目标函数的近似结构,同时得出更好
的特征表达,但是这种方式导致了网络整体复杂性的增加,使网络更加难以优化,很容易过拟合。
4、CNN的应用主要是在图像分类和物品识别等应用场景应用比较多
https://cs231n.github.io/assets/conv-demo/index.html
卷积核设计:
1.输入层是7*7*3 3称为通道数 channel(程序中、图像中),又称厚度(depth、ppt、书), 也称 featureMap数 (论文/ppt)
例:
黑白图片:28*28*1
彩色图片:28*28*3 ---- RGB三色
2.卷积核的大小(3*3*3*2):第一个3是H(高),第二个3是W(宽),第三个3是输入层的通道数,第四个2是输出层
的通道数,也就是说卷积核的大小包含着 输入通道数*输出通道数,所以卷积核的大小
就是参数量;卷积核的尺寸不能比输入层的尺寸大(否则称之为反卷积);
3.卷积核的个数 以共享的w为基础确定,同一种权重组成的卷积核称同一个卷积核,3*3*3*2有2个卷积核
输出层的通道数有多少个就有多少个卷积核,一个卷积核对应一种特征
4.卷积核3*3*3*2 卷积核尺寸前两个3是可以自己设计和改变的,第三个3是输入通道数,是不能改变的,第
四个2是输出通道数,是可以改变和设计的
5.CNN网络的连接数:见下图
6、CNN网络连接数与参数量对 迭代时间与迭代次数的影响:
CNN连接数:主要影响 1次迭代 BP时 迭代时间
CNN的参数量:主要影响 总体迭代时间 与 迭代次数
卷积核工作流程查看网址:https://cs231n.github.io/assets/conv-demo/index.html
1.激活函数的使用: 在隐层尽量使用tanh和relu,只有在全连接或输出层使用sigmoid/softmax;tanh和relu究竟
哪个适应你的模型,要通过实验决定
2.池化: 又称下采样,一般都会减少输入层的尺寸,池化不改变输入层通道数,池化没有w和b;
深度学习论文中提到的深度学习网络的层数一般不包含池化层;每通过一次池化,数据量
会减少从而减少计算量,每通过一次池化,卷积层特征都能学到很大范围更轮廓性的特征;
池化一般都是2*2,很少有别的尺寸
3.多次卷积和池化: 是为了从细节特征,过渡到学习更轮廓性的特征
4.BN: batch中所有样本同一维特征进行归一化;普遍加速运算;某些深度学习网络提高精度
一般放在激活函数的后面
5.dropOut: 解决过拟合的问题;输入和输出节点任何位置都可以被随机置0;任何地方的w,b都不能置0;
隐层神经元都可以随机置0;keep_prob=0.7;一般区间取[0.5,09];这里的删除是置0的意思,
不是真正从物理上删除节点或神经元;加入了dropout一次训练时间会减少,但是要降低到
相同的loss,总的时间会增加;
6.样本不均衡: 1.取类别中样本数最多的那类样本的个数N=5,作为每个类最后要达到的样本数量;
2.蓝x1=shuffle(0,1,2,3,4) 橘色x2 = shuffle(0,1,2,3,4) 绿x3=shuffle(0,1,2,3,4)
3.取模x1 mod 3(原来蓝色是3个) x2 mod 2 x3 mod 5 作为输出
7.batch_size: 设定范围4~100不等,要通过实验得出较好的,对精度无大的影响;对训练速度有影响;对
内存大小有要求(防止内存溢出,就要减少batch_size,减少参数量)
8.lr学习率 : 最重要的调参对象,学习率过大,loss会下降到一个较高的值就开始上升;如果过小,下降
到一个较高的值就不能再降了,但也不会上升;只有合适才能使得loss降低到很小
深度学习跑飞了是指loss不降反升
9 Inception: 将传统的串行结构变为并行结构,在达到同样效果的情况下,需要更少的参数量;每次计算
需要的时间更少(因为能局部并行计算);concat是矩阵的拼接,拼接的矩阵拼接至少有一个
维度的长度要相同(到程序或项目中展开);
通过加入一个小尺寸的卷积核(1*1),将原始的输入层的通道进行压缩(降维),达到减少参数量
的目的;压缩是有信息损失的,压缩有经验的比例大约(1,10]之间,不能太大
10 目前流行结构: Inception主要是图像视觉和语音;resnet主要是图像视觉和语音;膨胀卷积全领域;
seq2seq主要自然语言处理
11. 网络结构场景: LeNet是在简单的场景中应用(手写字、验证码识别);AlexNet、ZFNet、GoogleNet基本不用了;
VGGNet和ResNet用在大型项目中,如人脸识别、目标检测、语音识别等;inception-resnet
是目前最先进的结构之一,通常用在大型项目中,用在人脸识别、目标检测、语音识别;
12. 作业: 熟悉inceptionV3 inceptionV4
13. 拉平op: 7*5*50 ,一定是先拼接50 再拼接5 最后拼接7
自然语言处理必须:
1 章
2 章
5 章
7 章
8 章
9 章
提高:
6 章
10-16除了第12章
大神:
1. 卷积核设计
2. 深度学习网络设计
3. 网络调参
4. 网络优化
5. 算法建模
6. 算法创新
测试:
placeholder None变为-1; reshape的-1变为None
RNN:
1. 与CNN不同,CNN只有隐层与隐层之间有联系,有W,b,叫竖直方向联系;RNN除了隐层与隐层之间有联系有权重w,b之外(竖直方向
联系),输入序列之间也有关联,有权重U,b(横向联系),也即记忆能力;
2.
一般的CNN结构依次为: --------- 也可能中间加 BN 层
INPUT
[[CONV -> RELU] * N -> POOL?]*M
[FC -> RELU] * K
FC
注意:通常激励层是整合到 CONV层内部的,因为做了卷积层一定会进行激励,他们是成对出现的。
1、问题一:为什么用 多层 卷积层(包含激励层)+ 池化层 ?
① 第一个原因很明显,卷积核的局部感知的输出通道数逐渐增加,如果还是用最初的 featureMap尺寸就会有大量的参数连
接,而池化通过减小featureMap的尺寸可以有效减少卷积核的参数连接。
② 第二原因:卷积核提取特征是局部感知,这是我们都知道的,也就是说在卷积核大小不变的情况下featureMap的尺
寸越大,局部获取 原图的特征就越少,而池化减小featureMap的尺寸可以使得卷积核获取更多的 原图的局部特征。
一个很明显的特点就是随着卷积池化层数增加,原有 的featureMap就变成了的许多个黑白原图缩减图
2、问题二:为什么在一个Pooling层前面有多个卷积层?
Pooling层前面有多个卷积层是 为了更多的提取样本图片的特征后再池化。也可以再pooling前加入一层卷积层。
数据输入层:Input Layer
卷积计算层:CONV Layer ------ CNN网络的参数层
ReLU激励层:ReLU Incentive Layer
池化层:Pooling Layer
全连接层:FC Layer
备注:Batch Normalization Layer(可能有)
1、数据输入层:输入样本的特征向量(与FC DNN 不同的是,CNN输入特征向量时结构通常为:高*宽*通道数 的三维结构)
1、神经网络/机器学习一样,需要对输入的数据需要进行预处理操作,需要进行预处理的主要原因是:
① 输入数据单位不一样,可能会导致神经网络收敛速度慢,训练时间长
② 数据范围大的输入在模式分类中的作用可能偏大,而数据范围小的作用就有可能偏小:
解决手段:归一化 [0,1]
③ 由于神经网络中存在的激活函数是有值域限制的,因此需要将网络训练的目标数据映射到激活函数的值域,S形激活函数
在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X),f(100)与f(5)只相差0.0067
https://blog.csdn.net/f110300641/article/details/85099520
https://blog.csdn.net/hongxue8888/article/details/78775078/
1、常见3种数据预处理方式:
① 去均值(中心化)
将输入数据的各个维度中心化到0
② 归一化
将输入数据的各个维度的幅度归一化到同样的范围
③ 正态化:
去均值也去方差 (x - np.mean(x))/np.std(x)
④ PCA/白化
用PCA降维(去掉特征与特征之间的相关性)
白化是在PCA的基础上,对转换后的数据每个特征轴上的幅度进行归一化
http://ufldl.stanford.edu/wiki/index.php/白化
1、CNN网络中一般采用系列两种数据预处理方式:
① 先中心化 后 归一化
② 白化(PCA >>> 归一化)
注意:第一种方法使用居多
备注:虽然我们介绍了PCA去相关和白化的操作,但是实际上在卷积神经网络中,一般并不会适用PCA和白化的操作,一般去均值
和归一化使用的会比较多。
建议:对数据特征进行预处理,去均值、归一化.
1、卷积计算层是局部感知提取特征,他是一个分布式的(多个输出通道),所以需要FC层将这个局部感知的结果进行合并 到样本
的标签空间。
1、卷积核(filter):又名filter
① 卷积核的概念:用来计算各层输入数据与输出数据的参数,代替FC DNN中的 w矩阵。
② 卷积核存在的意义: 为了代替全连接DNN中的参数矩阵叉乘的方式,减少了网络参数的数量和总体的计算量
2、卷积核的几个注意点:
① 卷积核的初始对应位置(padding :VALID 或 SAME)
② 卷积核的尺寸、中心点
卷积核常见的尺寸:3*3 5*5 7*7 11*11 15*15 ------ 注意:其实卷积核的大小也包含了 输入通道数和输出
通道数,这里假设这两者均为1。
filter尺寸构建策略:
a 卷积核高与宽的设定:经验值,具体情况根据业务需求
优先:质数 * 质数, 其次:奇数*奇数 奇数*质数, 最后:偶数 * 偶数
b 卷积核的设计尽可能的小:可以采取多个小的卷积核在代替大的卷积核。
c 通常我们使用正方形的卷积核,但需要知道的是:当数据存在着较多噪声数据时,不规整的卷积核可以降低噪声。
③ 卷积核移动步长 stride:
注意:当计算下一次卷积运算时,卷积核的参数不变,只是滑动了一定的步长。
观察上图卷积计算后,我们会发现最外围有一圈数据没有计算到,针对这种情况,常见有两种处理方式:
padding :VALID 后 输出 imge 与 原始 imge 尺寸的关系 :
padding :SAME 后 输出 imge 与 原始 imge 尺寸的关系 :
1、卷积层的特点:
① 减少了参数量和连接数,从而大大减少了模型的迭代次数与迭代时间。(减少了多少?参数量、连接参数的计算方式?参数
量与连接数具体对模型训练的影响? ---- 详情见上文)
② 卷积层模拟了人视觉处理图像的运行方式:
局部感知: 在进行计算的时候,将图片划分为一个个的区域进行计算/考虑;再利用高层次的神经网络对局部感知处
理的数据进行汇总。
参数共享机制:假设每个神经元(指的是同一张featureMap)连接数据窗的权重是固定的
滑动窗口重叠:降低窗口与窗口之间的边缘不平滑的特性。
固定每个神经元的连接权重,可以将神经元看成一个模板;也就是每个神经元只关注一个特性
常用非线性映射函数
Sigmoid(S形函数)
Tanh(双曲正切,双S形函数)
ReLU
Leaky ReLU
ELU
Maxout
https://blog.csdn.net/qq_16555103/article/details/97614879 ------ 各个激活函数的图像表达
1、优点:值域取值范围为 0-1 ,简单容易理解
缺点:
① 容易出现饱和区,终止梯度传递(“死神经元”);
② sigmoid函数的输出没有0中心化。
1、sigmoid函数在实际梯度下降中,容易饱和和终止梯度传递。我们来解释一下,大家知道反向传播过程,依赖于计算的梯度,在一元
函数中,即斜率。而在sigmoid函数图像上,大家可以很明显看到,在纵坐标接近0和1的那些位置(也就是输入信号的幅度很大
的时候),斜率都趋于0了。我们回想一下反向传播的过程,我们最后用于迭代的梯度,是由中间这些梯度值结果相乘得到的,
因此如果中间的局部梯度值非常小,直接会把最终梯度结果拉近0,也就是说,残差回传的过程,因为sigmoid函数的饱
和被杀死了。说个极端的情况,如果一开始初始化权重的时候,我们取值不是很恰当,而激励函数又全用的sigmoid函数,那
么很有可能神经元一个不剩地饱和到无法学习,整个神经网络也根本没办法训练起来。
2、sigmoid函数的输出没有0中心化,这是一个比较闹心的事情,因为每一层的输出都要作为下一层的输入,而未0中心化会直接影响梯
度下降,我们这么举个例子吧,如果输出的结果均值不为0,举个极端的例子,全部为正的话(例如f=wTx+b中所有x>0),那么反
向传播回传到w上的梯度将要么全部为正要么全部为负(取决于f的梯度正负性),这带来的后果是,反向传播得到的梯度用于权
重更新的时候,不是平缓震荡地迭代变化,而是朝着某个方向去迭代。当然,要多说一句的是,这个缺点相对于第一个缺点,还
稍微好,第一个缺点的后果是,很多场景下,神经网络根本没办法学习。
tanh的有优缺点:
优点:
① tanh输出的值域范围为 -1 - +1,容易理解
② 输出值 0 中心化(输出值会作为下一层的输入值),方便神经网络的训练 残差平滑更新
缺点:
① 和sigmoid激活一样,tanh激活同样存在着饱和区,饱和区处容易出现死神经元。
ReLU函数是从生物学角度,模拟出脑神经元接收信号更加准确的激活模型。
相比于Sigmoid函数,具有以下优点:
1. 单侧抑制; ------ 左侧抑制了一些特征x
2. 相对宽阔的兴奋边界; ------ 右侧有着较大的兴奋区(虽说被截断了一部分,输出抑制到一个值,但是梯度仍为 1 )
3. 稀疏激活性; ------ 左侧为饱和区,抑制一部分神经元
4. 更快的收敛速度; -------- 梯度右侧恒为 1 ,不用计算
1、对于输入的x以0为分界线,左侧的均为0,右侧的为y=x这条直线。
缺点:
① 没有边界,可以使用变种ReLU: min(max(0,x), 6)。截取经验值为: 5 6 20
② 比较脆弱,比较容易陷入出现”死神经元”的情况
解决方案:较小的学习率
优点:
① 相比于Sigmoid和Tanh,提升收敛速度(因为ReLU的梯度为1,不用计算)
② 梯度求解公式简单,不会产生梯度消失和梯度爆炸
解释:1) ReLU曲线本身会造成梯度爆炸,为什么呢?
反向BP梯度的传递与两个值有关(激活函数的梯度 * 上一层激活函数的输出值),ReLU梯度 = 1,没什
么问题,但是ReLU函数的右侧没有边界,这就导致ReLU激活层的输出值可能无限大,因此他们的乘积还
是会产生梯度爆炸,因此我们通常使用ReLU的变种 ReLU: min(max(0,x), 6),通过截取右侧的取值来
抑制梯度爆炸。
2) ReLU曲线会造成梯度消失吗?
ReLU 会产生死神经元(左侧),但是他不会产生梯度消失,ReLU本身没有接近于 0 很小的梯度(ReLU 的
梯度 == 1),它不会出现 随着梯度的乘积越来越小的现象。
参考:https://arxiv.org/pdf/1302.4389.pdf
1、CNN尽量不要使用sigmoid,如果要使用,建议只在全连接层使用
2、隐层首先使用ReLU(有时用tanh),ReLU迭代速度快,但是有可能效果不佳
3、如果使用ReLU失效的情况下,考虑使用Leaky ReLu或者Maxout,此时一般情况都可以解决啦
4、tanh激活函数在某些情况下有比较好的效果,但是应用场景比较少
1、在连续的卷积层中间存在的就是池化层,主要功能是:
通过逐步减小featureMap尺寸来减小参数量和网络中的计算;
池化层在每个特征图上独立操作,使得下一层的卷积核可以更高的层次提取特征,减小过拟合。
2、池化层的特点:
① pooling 没有添加新的w b参数,有些文章中并不把pool作为CNN网络设计层数
② pooling 没有改变通道数(channel)
3、一般的CNN结构依次为: --------- 也可能中间加 BN 层
INPUT
[[CONV -> RELU] * N -> POOL?]*M
[FC -> RELU] * K
FC
在池化层中,进行压缩减少特征数量的时候一般采用两种策略:
Max Pooling:最大池化,一般采用该方式
Average Pooling:平均池化
1、Batch Normalization Layer(BN Layer)是期望我们的结果是服从高斯分布的,所以对神经元的输出(即所有样本的 列特征)
进行一下标准正态化修正(mean = 0,std = 1)
2、BN层的作用:
① 增加网络的泛化能力(参考多项式扩展的线性回归,参数θ较大的时候容易造成偏置误差)
② 减少样本数据范围且使数据中心化,解决反向BP的导链偏置问题,加快网络的迭代速度
③ 一定程度上解决的梯度爆炸的问题
1、类似传统神经网络中的结构,FC层中的神经元连接着之前层次的所有激活输出;换一句话来讲的话,就是两层之间所有神经元都
有权重连接;通常情况下,在CNN中,FC层只会在尾部出现
2、CNN FC的作用:
将前面卷积核提取的分布式局部特征 映射到 样本标签空间,FC层可能有多个 ------ 全局考量
池化层反向传播BP算法
数据增强(图片)
水平翻转:优点:从不同的角度来提取特征
随机裁剪:优点:增加细节特征、模拟遮挡的实际场景
PCA数据增强
样本不均衡 数据增强
SGD、BGD、MBGD 学习率
学习率动态调优(现在大多是根据迭代次数epoch)
momentum、SGD用到该公式手动动态调整学习率,实际工程中常用momentum,而其他优化器内部自动会优化调整学习率
调整参数
interception结构
VGG-NET
res-NET
为什么除了resNET 其他在一定层数后效果为变差