深度学习知识点总结

文章目录

  • 1.深度学习是什么
  • 2.基础知识
    • 2.1 为什么要使用神经网络
    • 2.2 为什么更深的网络好
    • 2.3 更多的数据是否有利于更深的神经网络?
    • 2.4 不平衡数据是否会摧毁神经网络?
    • 2.5 无监督降维提供的是帮助还是摧毁?
    • 2.6 批大小如何影响测试正确率?
    • 2.7 初始化如何影响训练?
    • 2.8 不同层的权重是否以不同的速度收敛?
    • 2.9 正则化如何影响权重?
    • 2.10 神经网络训练中的梯度消失与梯度爆炸
    • 2.11 Batchnorm原理
    • 2.12 损失函数
      • Softmax函数
      • 交叉熵
    • 2.13 dropout的原理:
    • 2.14 L0、L1和L2范数:
    • 2.15 LR如何解决低维不可分问题
    • 2.16 Boosting和Bagging
    • 2.17 梯度下降和牛顿法的区别
    • 2.18 常见激活函数特点
    • 2.19 如何理解卷积、池化等、全连接层等操作
    • 2.20 1x1大小的卷积核的作用
    • 2.21 DenseNet的要点
    • 2.22 空洞卷积及其优点
    • 2.23 超参数搜索方法
  • 总结

1.深度学习是什么

深度学习(DL,Deep Learning)是机器学习(ML,Mchaine Leaning)的一个新的研究方向,他被进入机器学习是使其更接近于最初的目标人工智能(AI,Artificial Intelligence)。“深度”就是从“输入层”到“输出层”所经历的层次的数目,即“隐藏层”的数目,层次越多,网络的深度越深,越是复杂的问题需要的网络深度越深。
深度学习是有着三十多年历史的反向传播算法的新版本,它基于一种抽象的神经元模型。神经元层级将一个信号(如声波的振幅或图像的像素亮度)映射到对这个信号的含义更为明确的高层描述中(如该声波传达的文字或图像中的物体)。反向传播最初只能在两三层神经元中工作,而现在的新版算法可以在更多层级的神经元中工作,使得网络层级越来越深,类似于大脑中相关联的神经元之间的“深度”层级,因而被称为“深度学习”。
即使对于老手而言,深度学习仍然是一种神秘的艺术。因为人们通常在大型数据集上进行复杂的实验,这就掩盖了数据集、超参数和性能之间的基本关系,人们无法窥一斑而知全豹。

2.基础知识

2.1 为什么要使用神经网络

通用逼近性定理指出,一个具有单个隐藏层和标准激活函数的简单前馈神经网络(即多层感知器),如果隐藏层具有足够数量的单位,它就可以近似任何连续函数。随着隐藏单位数量的增加,训练数据的逼近误差一般会减小。

2.2 为什么更深的网络好

在实践中,更深的多层感知器(具有超过一个隐藏层)在许多感兴趣的任务上的表现,在很大程度上都胜过浅层感知器。为什么会出现这种情况呢?有人认为更深的网络需要的参数量多,但李宏毅的课程中对同样参数的“矮胖”(即只有一层,但神经元多)和“高瘦”(层数多,神经元少)网络进行了测试,证明“高瘦”网络更有效。

不同层数的结果对比深度学习知识点总结_第1张图片
深度学习知识点总结_第2张图片
深度学习知识点总结_第3张图片
通过对比,深度网络能充分利用数据,他类比用树的思路来分析,通过对特征的层层分解和提取,可有效利用数据。

2.3 更多的数据是否有利于更深的神经网络?

深度学习和大数据密切相关;通常认为,当数据集的规模大到足够克服过拟合时,深度学习只会比其他技术(如浅层神经网络和随机森林)更有效,并更有利于增强深层网络的表达性。

2.4 不平衡数据是否会摧毁神经网络?

当数据集不平衡时(如一个类的样本比另一个类还多),分类的正确率确实会降低。重采样可以显著提高性能,使用少数类中抽样替换的样本。在重采样法不是有效的情况下,那么可能需要复合方式来合成新的训练样本,以提高正确率。

2.5 无监督降维提供的是帮助还是摧毁?

当处理非常高维的数据时,神经网络可能难以学习正确的分类边界。在这些情况下,可以考虑在将数据传递到神经网络之前进行无监督的降维。这做法提供的是帮助还是摧毁呢?数据 PCA 为更小的维数,并查看分类正确率是否提高。当维度非常大时,无监督的 PCA 步骤可以显著改善下游分类。但有一个有趣的阈值行为。当维数超过一个阈值时,分类的质量会有显著的下降。在这些情况下,少几 维的 PCA 可显著地改善下游分类。

2.6 批大小如何影响测试正确率?

运行时间会随着批大小的增加而下降。然而,这导致了测试正确率的妥协,因为测试正确率随着批大小的增加而单调递减。但这与普遍的观点不一致,严格来说,即中等规模的批大小更适用于训练。这可能是由于没有调整不同批大小的学习率。因为更大的批大小运行速度更快。总体而言,对批大小的最佳折衷似乎是为 64 的批大小。

2.7 初始化如何影响训练?

Xavier 和高斯(具有较低的方差)初始化会得到很好的训练。Xavire 初始化提供了最好的性能,这并不奇怪。标准偏差小的高斯也适用(但不像 Xavire 那样好)。如果方差变得太大,那么训练速度就会变得较慢,这可能是因为神经网络的大部分输出都发生了爆炸。有趣的是,持续的初始化(理论上不应该能够训练神经网络)在几个轮数之后就会导致训练进行。这可能是由于核心并行化导致小的数值误差,最终导致了不同权重的散度。当权重都为 1 时,这些就都不起作用了。

2.8 不同层的权重是否以不同的速度收敛?

我们期望后一层的权重会更快地收敛,因为它们在整个网络中进行反向传播时,后期阶段的变化会被放大。最终结论也是后一层的权重比前一层收敛得更快。

2.9 正则化如何影响权重?

正则化对训练过程中习得的权重有着显著的影响。我们在 L1 正则化的情况下能够获得一定程度的稀疏性,虽然看起来有较大的正则化强度,这就导致正确率的折衷。而 L2 正则化不会导致稀疏性,它只有更小幅度的权重。同时,对正确率似乎没有什么有害的影响。

2.10 神经网络训练中的梯度消失与梯度爆炸

层数比较多的神经网络模型在训练时也是会出现一些问题的,其中就包括梯度消失问题(gradient vanishing problem)和梯度爆炸问题(gradient exploding problem)。梯度消失问题和梯度爆炸问题一般随着网络层数的增加会变得越来越明显。
以下图的反向传播为例(假设每一层只有一个神经元,其中激活函数为sigmoid函数)
在这里插入图片描述
可以推导出:深度学习知识点总结_第4张图片
因此对于上面的链式求导,层数越多,求导结果越小,因而导致梯度消失的情况出现,这样,梯度爆炸问题的出现原因就显而易见了,也就是w比较大的情况。但对于使用sigmoid激活函数来说,这种情况比较少。
其实梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑用ReLU激活函数取代sigmoid激活函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。

2.11 Batchnorm原理

Batchnorm是归一化的一种手段,极限来说,这种方式会减小图像之间的绝对差异,突出相对差异,加快训练速度,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,会给下一层的网络学习带来困难。batchnorm就是为了解决这个分布变化问题。
BatchNorm就是对神经网络的每一层进行归一化,假设将每一层输出后的数据都归一化到0均值,1方差,满足正太分布,但是,此时有一个问题,每一层的数据分布都是标准正太分布,导致其完全学习不到输入数据的特征,因为,费劲心思学习到的特征分布被归一化了,因此,直接对每一层做归一化显然是不合理的。但是如果稍作修改,加入可训练的参数做归一化,那就是BatchNorm实现的了。
深度学习知识点总结_第5张图片
深度学习知识点总结_第6张图片之前也说过如果直接做归一化不做其他处理,神经网络是学不到任何东西的,但是加入这两个参数后,事情就不一样了,先考虑特殊情况下,如果γ和β分别等于此batch的标准差和均值,那么 [公式] 不就还原到归一化前的x了吗,也即是缩放平移到了归一化前的分布,相当于batchnorm没有起作用,β和γ分别称之为 平移参数和缩放参数 。这样就保证了每一次数据经过归一化后还保留的有学习来的特征,同时又能完成归一化这个操作,加速训练。

batchnorm是在输入值和激活函数之间进行的,每次训练给一个批量,然后计算批量的均值方差,但是在测试的时候可不是这样,测试的时候每次只输入一张图片,这怎么计算批量的均值和方差,于是,在训练的时候实现计算好mean var测试的时候直接拿来用就可以了,不用计算均值和方差。

2.12 损失函数

在Logistic regression二分类问题中,我们可以使用sigmoid函数将输入Wx+b映射到(0,1)区间中,从而得到属于某个类别的概率。将这个问题进行泛化,推广到多分类问题中,我们可以使用softmax函数,对输出的值归一化为概率值。

Softmax函数

这里假设在进入softmax函数之前,已经有模型输出C值,其中C是要预测的类别数,模型可以是全连接网络的输出aa,其输出个数为C,即输出为:a1,a2,……,aC
所以对每个样本,它属于类别i的概率为:
在这里插入图片描述
通过上式可以保证属于各个类别的概率和为1。
输入值很大时对应的函数值接近1或0,处于函数的饱和区,导致梯度几乎为0,造成梯度消失问题。

交叉熵

说交叉熵之前先介绍相对熵,相对熵又称为KL散度(Kullback-Leibler Divergence),用来衡量两个分布之间的距离
深度学习知识点总结_第7张图片
这里H§是p的熵。假设有两个分布p和q,它们在给定样本集上的相对熵定义为在这里插入图片描述
从这里可以看出,交叉熵和相对熵相差了H§,而当p已知的时候,H§是个常数,所以交叉熵和相对熵在这里是等价的,反映了分布p和q之间的相似程度。
关于熵与交叉熵等概念回到我们多分类的问题上,真实的类标签可以看作是分布,对某个样本属于哪个类别可以用One-hot的编码方式,是一个维度为C的向量,比如在5个类别的分类中,[0, 1, 0, 0, 0]表示该样本属于第二个类,其概率值为1。我们把真实的类标签分布记为p,该分布中,ti=1当i属于它的真实类别c。同时,分类模型经过softmax函数之后,也是一个概率分布,所以我们把模型的输出的分布记为q,它也是一个维度为CC的向量,如[0.1, 0.8, 0.05, 0.05, 0]。
对一个样本来说,真实类标签分布与模型预测的类标签分布可以用交叉熵来表示:
在这里插入图片描述
最终,对所有的样本n,我们有以下loss function:
在这里插入图片描述
其中 tki是样本k属于类别i的概率, yki是模型对样本k预测为属于类别i的概率。
在这里插入图片描述
深度学习知识点总结_第8张图片
深度学习知识点总结_第9张图片

2.13 dropout的原理:

每次做完dropout相当于从原网络中找到一个更瘦的网络,强迫神经元和其他随机挑选出来的神经元共同工作,减弱了神经元节点间的联合适应性,增强泛化能力。

2.14 L0、L1和L2范数:

  • L0范数:很难优化求解(NP难问题)
  • L1范数:是L0的最优凸近似(L1是L0的最紧的凸放松),且具有特征自动选择和使得模型更具解释性的优点
  • L2范数:使得权重接近于0但是不等于0,有利于处理条件数不好情况下矩阵求逆问题(条件数用来衡量病态问题的可信度,也就是当输入发生微小变化的时候,输出会发生多大变化,即系统对微小变动的敏感度,条件数小的就是well-conditioned的,大的就是ill-conditioned的),对于线性回归来说,如果加上L2规则项,原有对XTX(转置)求逆就变为可能,而目标函数收敛速率的上界实际上是和矩阵XTX的条件数有关,XTX的 condition number 越小,上界就越小,也就是收敛速度会越快;另外从优化的角度来看,加入规则项实际上是将目标函数变成λ强凸,这样可以保证函数在任意一点都存在一个非常漂亮的二次函数下界,从而能通过梯度更快找到近似解。总结就是:L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。

2.15 LR如何解决低维不可分问题

通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。具体方法:核函数,如:高斯核,多项式核等等

2.16 Boosting和Bagging

  • Boosting主要思想是将一族弱学习器提升为强学习器的方法,具体原理为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,来训练下一个基学习器,如此重复进行直至学习器数目达到了事先要求,最终进行学习器的加权结合。用于underfitting的情况。
  • Bagging是并行式集成学习方法最著名的代表,具体做法是对样本进行有放回的采样,然后基于每个采样训练集得到一个基学习器,再将它们进行组合。在预测时,对于分类任务通常使用简单投票法,对回归任务使用简单平均法。用于overfitting情况。

2.17 梯度下降和牛顿法的区别

  • 梯度下降公式如下
    在这里插入图片描述
    一阶优化,收敛速度较慢,容易逃离鞍点,优化过程中需要进行步长调整
  • 牛顿法公式如下,其中H为海塞矩阵,其实就是目标函数对参数θ的二阶导数。只适用于Hessian矩阵是正定的情况
    在这里插入图片描述
    二阶优化,收敛速度较快,需要更新一个二阶矩阵(计算代价大),对初始值有一定要要求,在非凸优化过程中容易陷入鞍点。

2.18 常见激活函数特点

  • sigmoid:输入值很大时对应的函数值接近1或0,处于函数的饱和区,导致梯度几乎为0,造成梯度消失问题
  • Relu:解决梯度消失问题,但是会出现dying relu现象,即训练过程中,有些神经元实际上已经"死亡“而不再输出任何数值
  • Leaky Relu:f = max(αx, x),解决dying relu问题,α的取值较大时比较小时的效果更好。它有一个衍生函数,parametric Leaky Relu,在该函数中α是需要去学习的
  • ELU:避免dying神经元,并且处处连续,从而加速SGD,但是计算比较复杂
  • 激活函数的选择顺序:ELU>Leaky Relu及其变体>Relu>tanh>sigmoid

2.19 如何理解卷积、池化等、全连接层等操作

  • 卷积的作用:捕获图像相邻像素的依赖性;起到类似滤波器的作用,得到不同形态的feature map
  • 激活函数的作用:引入非线性因素,
  • 池化的作用:减少特征维度大小,使特征更加可控;减少参数个数,从而控制过拟合程度;增加网络对略微变换后的图像的鲁棒性;达到一种尺度不变性,即无论物体在图像中哪个方位均可以被检测到

2.20 1x1大小的卷积核的作用

  • 通过控制卷积核个数实现升维或者降维,从而减少模型参数
  • 对不同特征进行归一化操作
  • 用于不同channel上特征的融合

2.21 DenseNet的要点

  • 由于前后层之间的Identity function,有效解决了梯度消失问题,并且强化了特征的重用和传播
  • 相比ResNet输出通过相加的方式结合从而阻碍信息的传播,DN通过串联方式结合
  • 串联要求特征图大小一致,故把pooling操作放在transition layer中
  • 为防止靠后的串联层输入通道过多,引入bottleneck layer,即1x1卷积。文中把引入bottleneck layer的网络成为DenseNet-B
  • 在transition layer中进一步压缩通道个数的网络成为DN-C(输入m个通道,则输出θm个通道,0<θ≤1)。同时包含bottleneck layer的和压缩过程的网络称为DN-BC

2.22 空洞卷积及其优点

  • pooling操作虽然能增大感受野,但是会丢失一些信息。空洞卷积在卷积核中插入权重为0的值,因此每次卷积中会skip掉一些像素点
  • 空洞卷积增大了卷积输出每个点的感受野,并且不像pooling会丢失信息,在图像需要全局信息或者需要较长sequence依赖的语音序列问题上有着较广泛的应用

2.23 超参数搜索方法

  • 网格搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果
  • 贝叶斯优化其实就是在函数方程不知的情况下根据已有的采样点预估函数最大值的一个算法。该算法假设函数符合高斯过程(GP)
  • 随机搜索:已经发现,简单地对参数设置进行固定次数的随机搜索,比在穷举搜索中的高维空间更有效。 这是因为事实证明,一些超参数不通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。具体方法:核函数,如:高斯核,多项式核等等。
  • 基于梯度:计算相对于超参数的梯度,然后使用梯度下降优化超参数。

总结

参考链接:深度学习从入门到进阶的12个经典问题及解答[公众号:AI前线]
深度学习面试要点总结(面试题)
自己总结的一点和深度学习相关的面试考点

你可能感兴趣的:(神经网络,深度学习)