深度学习基础原理
深度学习
1.深度学习是否⽆所不能?
适合掌握深度学习的任务应具备这样⼀些特点:
(1)具备⼤量样本数据。如果样本数据难以获取或者数量太少,我们认为就不适合深度学习技术解决
(2)样本数据对场景的覆盖度⾜够完善。深度学习模型的效果完全依赖样本数据表现,如果出现样本数据外的情况,模型的推⼴性会变差
(3)结果对可解释性的要求不⾼。如果应⽤场景不仅要机器能够完成某项任务,还需对完成过程有明确的可解释性,这样的场景就不那么适合深度学习。
2.深度学习的基本流程
(1)模型搭建
(2)数据预处理
(3)训练模型
(4)结果可视化
(5)测试(预测)
3.常见的CNN模型有哪些?各有什么优缺点,如何选择模型
【1】⽤于图像分类问题的卷积神经⽹络架构正则表达式:
输⼊层-->(卷积层+ -->池化层?) + --> 全连接层+
⼀般不会连续使⽤超过三个卷积层。部分论⽂中发现可以通过调整卷积层步长来代替池化层的减少参数作⽤,有些⽹络中没有池化层。卷积神经⽹络在输出之前⼀般有着1-2个全连接层;每经过⼀次池化,卷积核的深度⼀般会乘以2倍(逐层递增);卷积步长⼀般为1;卷积核的尺⼨⼤⼩⼀般不超过5;池化层的步长⼀般为2或者3;步长⼀般为2或者3;
【2】模型的另⼀种设计模式(Inception)
将不同的卷积层通过并联的⽅式结合在⼀起。每条之路使⽤不同的卷积核尺⼨(原始图像通过填充可以使得卷积后的feature map⼤⼩⼀致)(1)LeNet5(1998)
lecun⼤神设计的第⼀个卷积神经⽹络,结构:(7层)卷积+池化+卷积+池化+三个全连接层,第⼀个成功应⽤于数字识别问题的CNN
(2)AlexNet(2012)
Hinton跟其学⽣在2012提出。特点:引⼊了ReLU和dropout,引⼊数据增强、池化相互之间有覆盖,三个卷积⼀个最⼤池化+三个全连接层
(3)ZF Net(2013)
(4)VGGNet(2014)
采⽤1x1和3x3的卷积核以及2x2的最⼤池化使得层数变得更深。常⽤VGGNet-16和VGGNet19
优点:(1)模型⽹络简洁:使⽤统⼀的3x3卷积核+2x2的maxpool(2)⼏个⼩的卷积核效果⽐⼀个⼤的卷积核效果好原因:更多的激活函数,更多的⾮线性,模型提取特征更加深层;同时参数更少(3)模型变得更深,如此可以提⾼⽹络的性能
缺点:(1)耗费更多的计算资源,更多的参数,更多的内存,因为有三个全连接层
(5)Google Net(2014 Inception v1)
这个在控制了计算量和参数量的同时,获得了⽐较好的分类性能,和上⾯相⽐有⼏个⼤的改进: 
 【1】去除了最后的全连接层,⽽是⽤⼀个全局的平均池化来取代它; 
【2】引⼊Inception Module,这是⼀个4个分⽀结合的结构。所有的分⽀都⽤到了11的卷积,这是因为11性价⽐很⾼,可以⽤很少的参数达到⾮线性和特征变换。 
 【3】Inception V2第⼆版将所有的55变成2个33,⽽且提出来著名的Batch Normalization;(2015)
 【4】Inception V3第三版就更变态了,把较⼤的⼆维卷积拆成了两个较⼩的⼀维卷积,加速运算、减少过拟合,同时还更改了Inception
Module的结构。(2015)
(6)ResNet(2015)
引⼊残差模块,让模型变得更深
4.LSTM、GRU、RNN⼜是什么样的模型结构
LSTM:长短时记忆⽹络
RNN:递归神经⽹络
GRU:
5.常见的数据预处理有哪些
(1)数据增强:翻转、剪切、加噪声、调节亮度饱和度⾊度等
(2)⼤⼩调整:NN的输⼊节点数是固定的,需要将图像的⼤⼩统⼀
(3)标准化:消除量纲的影响;加速GD算法的收敛速度;提⾼模型的精度(KNN)
(4)PCA算法降维:⼀种⽆监督的降维算法
(5)图像编码:存储时先是压缩编码,⽤时进⾏解码还原成三维矩阵(Tensorflow)
(6)处理标注框:关注需要识别的对象⽬标
6. 数据增强的⽅式有哪些?
(1)对图像数据的翻转、剪切、加噪声等
(2)⽣成模型:GAN⽣成数据
(3)机器翻译:翻译成需要的语种数据
7.训练模型的基本步骤
(1)初始化权值
(2)前向反馈计算loss
(3)反向传播计算loss相对权值的梯度
(4)更新权值,梯度下降
(5)直⾄模型收敛
7.初始化权重的⽅法有哪些?(如何初始化权重)
(1)⼀般使⽤服从的⾼斯分布(mean=0, stddev=1)或均匀分布的随机值作为权重的初始化参数;使⽤0作为偏置的初始化参数
(2)⼀些启发式⽅法会根据输⼊与输出的单元数来决定初始值的范围(均匀分布,Xiver初始化)
(3)随机正交矩阵、截断⾼斯分布(tensorflow⾥⾯很常见)
(4)使⽤pretrain的⽅法进⾏初始化
随机初始化、正太分布初始化、hekaiming的初始化⽅式、Xiver初始化算法
注意:
(1)不能把神经⽹络的参数初始化为0,因为初始化为0,每⼀层学习到的东西⼀样(输出值⼀样),在反向传播的时候,每层内的神经元也⼀样,因为他们的梯度⼀样。
(2)简单的随机初始化:实际上是从均值为0,⽅差为1的⾼斯分布中采样,当层数加深时,激活函数的输出值接近0,梯度也会接近0,由此可能产⽣梯度消失问题。
(3)Xiver初始化:解决随机初始化的问题。可以有效应对tanh激活函数,但对relu函数⽆能为⼒。
基本思想:保持输⼊和输出的⽅差⼀致,这样就避免了所有输出值都趋向于0
(4)He 初始化:专门针对relu函数的初始化⽅法。很有效。现在的神经⽹络常⽤relu激活函数,初始化⽅式常⽤He 初始化⽅法。(⾼斯分布)
基本思想:在ReLU⽹络中,假定每⼀层有⼀半的神经元被激活,另⼀半为0,所以,要保持variance不变,只需要在Xavier的基础上再除以2
(5)BN层的应⽤可以缓解对初始化的依赖
5.前向反馈中设计到哪些操作?
(1)卷积运算(卷积层):对应元素相乘再相加
(2)池化(最⼤池化与平均池化)
(3)激活函数的选择
(4)1x1卷积(降维)、BN层、dropout
(5)全连接层
6.引⼊激活函数的⽬的是啥?常见的激活函数有哪些?各有什么特点,如何选择激活函数
⽬的:是为了向⽹络中引⼊⾮线性,从⽽加强⽹络的表⽰能⼒,解决线性模型⽆法解决的问题
注:没有激活函数的神经⽹络,每⼀层的输出都是输⼊的线性组合,是线性模型;不过部分层是纯线性的话可以减少参数的数量
为何引⼊⾮线性可以加强⽹络的表⽰能⼒?
神经⽹络的万能近似定理:只要神经⽹络具有⾄少⼀个⾮线性隐藏层,那么只要给予⽹络⾜够数量的隐藏单元,它就可以以任意的精度来近似任何从⼀个有限维空间到另⼀个有限维空间的函数(已经有数学证明)
sigmoid:取值范围在[0,1]之间,符合概率的取值范围,在分类问题中⽐较受欢迎
公式: $\sigma (x) = \frac{1}{1+exp(-x)} $ 取值在0-1之间,关于\((0, \frac{1}{2})\) 对称
缺点:(1)会出现梯度消失(弥散)现象(2)图像不是关于原点对称(3)计算\(exp(-x)\) 值⽐较慢,耗时
优点:(1)引⼊⾮线性,加强⽹络的表征能⼒(2)输出值在0-1之间,符合概率的取值范围,在分类中效果⽐较好
tanh:双曲正切函数,范围在[-1,1]之间,形状同sigmoid
公式:\(tanh(x) = 2\sigma(x) - 1\) 关于原点对称
缺点:(1)梯度弥散现象没有解决
优点:(1)关于原点对称(2)收敛速度⽐sigmoid函数快
RELU:⼩于0时输出0,⼤于0时输出本⾝
公式:\(f(x) = max(0, x)\)
缺点:(1)梯度弥散问题没有完全解决(2)在(-)部分神经元死亡且不会复活
优点:(1)很⼤程度解决了梯度消失问题(2)收敛速度更快
Leaky ReLU:针对RELU函数的改进,(-)部分改变,解决神经元死亡问题
公式:\(f(x)= \begin{cases} \alpha x& \text{x<0}\\ x& \text{x>=0} \end{cases}\)
maxout:分段线性函数
公式:\(f(x) = max(w^T_1 x + b_1, w^T_2 x + b_2)\)
缺点:(1)参数⽐较多,本质相当于在结果的后⾯新加⼊⼀个层
优点:(1)解决了RELU的缺点(2)拟合能⼒⾮常强,可以拟合任意的凸函数(3)具备relu的优点
Relu跟Sigmoid函数的⽐较
(1)Relu可以避免梯度消失:
sigmoid函数在输⼊取绝对值⾮常⼤的正值或负值时会出现饱和现象——在图像上表现为变得很平,此时函数会对输⼊的微⼩变化不敏感——从⽽造成梯度消失;
正则化网络
ReLU的导数始终是⼀个常数——负半区为 0,正半区为 1——所以不会发⽣梯度消失现象
(2)减缓过拟合
ReLU在负半区的输出为 0。⼀旦神经元的激活值进⼊负半区,那么该激活值就不会产⽣梯度/不会被训练,造成了⽹络的稀疏性——稀疏激活
这有助于减少参数的相互依赖,缓解过拟合问题的发⽣
(3)加速计算:
ReLU的求导不涉及浮点运算,所以速度更快
为什么 ReLU 不是全程可微/可导也能⽤于基于梯度的学习?
虽然从数学的⾓度看 ReLU 在 0 点不可导,因为它的左导数和右导数不相等;
但是在实现时通常会返回左导数或右导数的其中⼀个,⽽不是报告⼀个导数不存在的错误。从⽽避免了这个问题
激活函数的选择跟初始化⽅式也是有关系的,激活函数的选择很重要
7. 1x1卷积有什么作⽤(也叫Network in Network)
(1)实现跨通道的交互和信息整合(卷积都具有的特性)
对于某个卷积层,⽆论输⼊图像有多少个通道,输出图像通道数总是等于卷积核数量!
对多通道图像做1x1卷积,其实就是将输⼊图像于每个通道乘以卷积系数后加在⼀起,即相当于把原图像中本来各个独⽴的通道“联通”在了⼀起。
(2)降维或者升维:通过改变卷积核的数量达成降维(升维)的⽬的;信息通道的压缩
8.简单说⼀下卷积的原理?
卷积层 + 池化层 + 激活函数 + 全连接层
9.什么是过拟合与⽋拟合?深度学习中防⽌过拟合的⽅式有哪些
⽋拟合:是指模型太简单,不能够学习到训练数据集上的内在规律;具体表现为在训练数据集上取不到⾜够低的训练误差。
过拟合:模型的学习能⼒太强,在训练数据集上可以达到很低的训练误差,⽽在测试集上的误差却是⽐较⾼,也就是泛化能⼒⽐较弱。
防⽌过拟合的策略:数据增强、dropout、BN层、正则化权重、提早停⽌训练模型
10.BN层的原理是什么?在什么位置嵌⼊BN层
位置:⼀般在卷积层、全连接层的后⾯,激活函数前加⼊BN层
11.BN层的作⽤有哪些?
(1)防⽌过拟合
(2)减少初始化的影响
(3)加速⽹络的训练(缓解梯度消失,⽀持更⼤的学习率)
12.BN层在训练、测试时分别是怎么操作的?
13. dropout的原理是什么?⼀般⽤在什么位置?为何会 work
以⼀定的概率随机使⽹络中的节点不⼯作(相当于丢弃掉),减少⽹络的复杂度,防⽌过拟合。
理解:让节点不⼯作之后,可以避免模型太依赖局部特征,指导⽹络学习数据的本质共性,可以防⽌过拟合
dropout⼀般⽤在全连接层的后⾯
dropout防⽌过拟合的理由
(1)模型在训练过程中取平均:优点类似集成思想:dropout通过参数共享,相当于集成了经过dropout之后的所有⼦⽹络。集成⽅法能够防⽌过拟合
(2)破坏了⽹络层间隐含节点的固定关系,避免模型太依赖局部特征,倾向于学习更加本质的共性特
(3)神经⽹络中不同模型的独⽴误差:随机初始化的差异、批训练数据的随机选择、超参数的差异等⾮确定性实现往往⾜以使得集成中的不同成员具有部分独⽴的误差
集成学习能够防⽌过拟合现象原因解析:
(1)每个模型在测试集上取得的误差不⼀样;如果模型成员的误差是独⽴的,集成将显著提升模型的性能
(2)通过投票裁决(加权⽅式)可以使得⼀些负⾯影响得到消除
14.Dropout 与 Bagging 的不同
在 Bagging 的情况下,所有模型都是独⽴的;⽽在 Dropout 的情况下,所有模型共享参数,其中每个模型继承⽗神经⽹络参数的不同⼦集。
在 Bagging 的情况下,每⼀个模型都会在其相应训练集上训练到收敛。⽽在 Dropout 的情况下,通常⼤部分模型都没有显式地被训练;取⽽代之的是,在单个步骤中我们训练⼀⼩部分的⼦⽹络,参数共享会使得剩余的⼦⽹络也能有好的参数设定。
15.BN层与dropout同时使⽤效果是否会更好?
dropout有些依赖神经⽹络中的随机性,因为这样可以使得模型具有独⽴的误差,效果会好
BN层:统⼀数据的分布,减少模型初始化的影响;感觉有点破坏随机性,如此看来在BN层之前⽤dropout不会使效果更好,反⽽会变差。论⽂的解释:(⽅差偏移)
当模型状态由训练到测试时,Dropout 会使具体神经元的⽅差产⽣偏移。但是,BN 在整个测试阶段都会保留它在训练过程学习并累计得到的⽅差。当在 BN 之前应⽤ Dropout 时,该⽅差的不⼀致(我们将该现象命名为「⽅差偏移」)造成推理中的数值不稳定性,最终将导致更多的错误预测
总的来说就是:⽅差发⽣偏移,导致⽅差不⼀致,造成推理中的数值不稳定,有更多的错误预测
16.如何结合使⽤dropout与BN层
(1)在BN层的后⾯使⽤dropout,避免BN层对dropout的影响;dropout统⼀放在softmax前的最后⼀层上
(2)修改dropout的公式,是的她对⽅差不那么敏感;⽐如⾼斯dropout、均匀dropout,这个⽅案的效果⽐上⾯的⽅案效果好,更加稳定。
17.什么是正则化?常见正则化有哪些?谈谈L1正则与L2正则的区别
正则化是指对经验误差函数加上约束,正则化参数相当于引⼊参数的先验分布,⽐如L1正则化是引⼊拉普拉斯先验;从⽽使得在优化误差函数的时候倾向于选择满⾜约束的梯度减少的⽅向,使最终的解倾向于符合先验知识;正则化的策略主要是⽤来防⽌过拟合,减少测试误差,增强模型的泛化能⼒。(本质是以偏差的增加换取⽅差的减少)
常见的正则化有L1正则化、L2正则化;
区别:
(1)定义
(2)先验分布
(3)达到的效果
在神经⽹络中通常只是对权重做惩罚,对偏置不惩罚:因为精确拟合偏置需要的数据量⽐拟合权重要少得多,偏置仅仅控制⼀个单变量,数量也⽐较少,这意味着我们不⽤惩罚也不会导致太⼤的⽅差。另外,正则化偏置有可能会导致明显的⽋拟合
18.如何选择正则化⽅式
这个主要看我们正则化的附加⽬的。虽然都可以⽤于防⽌过拟合,但是
(1)L1正则化:倾向于产⽣稀疏权重,可⽤于特征选择
(2)L2正则化,也叫岭回归,可以⽤于减缓变量之间的多重共线性,主要⽤于防⽌过拟合
19.L1正则化的先验为何是拉普拉斯分布,L2为何是⾼斯分布,怎么理解?
20.如何降低⽋拟合?
这⾥⽋拟合主要是因为模型过于简单,学习能⼒不够强导致的。可以考虑模型复杂化,或者反着过拟合的思路
(1)增加模型的复杂度
⽐如加⼊⽹络的层数或者神经元的个数;线性模型:加⼊⾼次项
(2)减⼩正则化项的系数
添加正则化项是为了限制模型的学习能⼒,减⼩正则化项的系数则可以放宽这个限制
没有正则化项的模型倾向于选择更加⼤的众,如此可以更好的拟合数据
(3)加⼊新的特征
⽐如交叉特征、多项式特征等
深度学习:因⼦分解机、Deep-Crossing、⾃编码器

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。