参考书:《神经网络与深度学习》(邱锡鹏)《机器学习实战》《百面机器学习》
还在更新ing...
目录
4.2.6 综合学习率调整和梯度估计修正的方法:Adam算法
1. 前馈神经网络
1.1 激活函数需要具备什么性质?
- 连续并可导(允许少数点上不可导)的非线性函数,可导的激活函数可以直接利用数值优化的方法来学习网络参数。
- 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
- 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。
1.2 有哪些常见的激活函数?
Sigmoid型函数:Logistic函数,值域为(0,1),Tanh函数,值域为(-1,1)
ReLU函数:max(0,x)
1.3 ReLU的优点和缺点是什么?
优点
- 计算高效
- 具有生物学合理性,比如单侧抑制、宽兴奋边界。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏,Sigmoid型激活函数会导致一个非稀疏的网络,而ReLU却具有很好的稀疏性,大约50%的神经元会处于激活状态。
- 在优化方面,相比于Sigmoid型函数的两端饱和,ReLU函数为左饱和函数,且在x>0时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。
缺点
- ReLU输出非零中心化,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。
- ReLU在训练时比较容易死亡。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题。
1.4 神经网络如何采用梯度下降法学习参数?
如果采用交叉熵损失函数,对于样本,其损失函数为
训练集在数据集D上的结构化风险函数为
是F范数(每个权重参数w的平方和)
在梯度下降法的每次迭代中,第层的参数参数更新方式为
梯度下降法需要计算损失函数对参数的偏导数,如果通过链式法则逐一对每个参数进行求偏导比较低效,在神经网络的训练中经常使用反向传播算法来高效地计算梯度。
1.5 误差反向传播算法中的误差是指什么?
偏导数表示第层神经元对最终损失的影响,也反映了最终损失对第层神经元的敏感程度,一般称为第第层神经元的误差项,用来表示。
1.6 简述误差反向传播算法的前馈神经网络训练过程
- 前馈计算每一层的净输入和激活值,直到最后一层
- 反向传播计算每一层的误差项
- 计算每一层的偏导数,并更新参数
1.7 误差反向传播算法的含义是什么?
第层的一个神经元的误差项是所有与该神经元相连的第层的神经元的误差项的权重和,然后再乘上该神经元激活函数的梯度。其中误差项的定义是
1.8 在BP算法中,权重和偏置的梯度是什么?
1.9 为什么神经网络的参数学习比线性模型要更加困难?
因为存在非凸优化和梯度消失问题。
1.10 什么是梯度消失问题?
Sigmoid型函数在z很大或z很小的时候,梯度都接近于0,这样,误差经过每一层传递都会不断衰减,当网络层数很深时,梯度就会不停衰减,甚至消失,使得整个网络很难训练。
一种简单有效的解决方法是使用导数比较大的激活函数,比如ReLU
2. 卷积神经网络
2.1 卷积神经网络具有什么特性?请解释其含义及作用
卷积神经网络具有局部连接、权重共享以及池化三个结构特性,这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性。
局部连接:在卷积层中的每一个神经元都只和上一层中某个局部窗口内的神经元相连,构成一个局部连接网络,卷积层与下一层之间的连接数大大减少。
权重共享:某一层的参数(卷积核)对于这一层的所有神经元都是相同的,权重共享可以理解为一个卷积核只捕捉输入数据中一种特定的局部特征,如果要提取多种特征,就需要使用多个不同的卷积核。我们只需要学习一组参数集合,而不需要针对每个位置的每个参数都进行优化,大大降低了模型的存储需求。
池化:是指对每个区域进行下采样得到一个值,作为这个区域的概况,常用的池化函数有最大池化和平均池化。可以有效减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。
2.2 卷积神经网络的参数学习
与全连接神经网络类似,都依赖于当前层的误差项
2.3 举例介绍几种典型的卷积神经网络
Inception网络:一个卷积层包含多个不同大小的卷积操作,成为Inception模块
ResNet:将目标函数拆分成两部分:恒等函数和残差函数,将原来的优化问题转化为让去近似残差函数,并用去逼近。残差网络将很多个残差单元串联起来构成一个非常深的网络。
MobileNet:可分离深度卷积
2.3.1 ResNet残差网络(待补充)
提出背景:解决和缓解深层网络训练中的梯度消失问题。
2.3.2 MobileNet(待补充)
3.循环神经网络
3.1 在循环神经网络中计算梯度的方式有什么?
随时间反向传播算法(BPTT):计算得到的误差项(第t时刻的损失对第k时刻隐藏神经层的净输入的导数)
参数梯度:整个损失函数L关于参数、权重、偏置的梯度分别为
实时循环学习算法(RTRL)
3.2 什么是梯度爆炸问题?什么是梯度消失问题?
在BPTT算法中,将误差项的公式展开得到
如果定义,则
若,当间隔t-k比较大时,梯度也变得很大,会造成系统不稳定,称为梯度爆炸问题。
相反,,当间隔t-k比较大时,梯度也变得很小,会出现梯度消失问题。
梯度消失不是说的梯度消失了, 而是的梯度消失了,也就是说,参数U的更新主要靠当前时刻t的几个相邻状态来更新,长距离的状态对参数U没有影响。
3.3 什么是长程依赖问题?
在循环神经网络中,参数可以通过随时间反向传播算法来学习,但是当输入序列比较长时,会存在梯度爆炸和消失问题,也成为长程依赖问题。
3.4 梯度消失或梯度爆炸有什么改进方案?
梯度爆炸问题
权重衰减:给参数增加正则化项来限制参数的取值范围,从而使得
梯度截断:当梯度的模大于一定阈值时,就把它截断成为一个较小的数
梯度消失问题
引入门控机制:用LSTM模型。
3.5 循环神经网络有哪些模式?
序列到类别:主要用于序列数据的分类问题,输入为序列,输出为类别
同步的序列到序列:主要用于序列标注任务,即每一个时刻都有输入和输出,输入序列和输出序列的长度相同
异步的序列到序列:也称编码器-解码器模型,例如机器翻译
3.6 什么是编码器-解码器模型?
先将样本按不同时刻输入到一个循环神经网络中(编码器),并得到其编码,再使用另一个循环神经网络(解码器),得到输出序列(图参考3.5)
3.7 长短期记忆网络的结构是什么?
引入门控机制,输入门:控制当前时刻的候选状态有多少信息需要保存
遗忘门:控制上一时刻的内部状态需要遗忘多少信息
输出门:控制当前时刻的内部状态有多少信息需要输出给外部状态
4.网络优化与正则化
4.1 神经网络优化的改善方法有什么?
- 使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性,比如动态学习率调整、梯度估计修正
- 使用更好的参数初始化方法、数据预处理方法来提高优化效率
- 修改网络结构来得到更好的优化地形,比如使用ReLU激活函数、残差连接、逐层归一化等
- 使用更好地超参数优化方法
4.2 优化算法
可以分为两大类:1)调整学习率,使得优化更稳定;2)梯度估计修正,优化训练速度。
4.2.1 梯度下降法有哪些形式?
批量梯度下降、随机梯度下降、小批量梯度下降
4.2.2 影响小批量梯度下降法的主要因素有哪些?
批量大小、学习率、梯度估计
4.2.3 批量大小对网络优化有何影响?
批量大小越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率。当批量大小较小时,需要设置较小的学习率,否则模型会不收敛。
批量大小越大,下降效果越明显,下降曲线越平滑。批量大小越小,适当小的批量大小与导致更快的收敛。
4.2.4 优化算法中学习率调整的方法有哪些?
学习率衰减、学习率预热、周期性学习率调整,以及一些自适应调整学习率的方法,比如AdaGrad,RMSprop,AdaDelta
学习率衰减:学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些来避免来回振荡。
学习率预热:在刚开始训练时,参数是随机初始化的,梯度往往也比较大,再加上比较大的初始学习率,会使得训练不稳定,因此,为了提高训练稳定性,可以在最初几轮迭代中采用比较小的学习率,等梯度下降到一定程度后再恢复到初始学习率
周期性学习率调整:为了使得梯度下降法能够逃离鞍点或尖锐最小值,在训练过程中周期性地增大学习率,当参数处于尖锐最小值附件时,增大学习率有助于逃离尖锐最小值,当参数处于平坦最小值附近时,增大学习率仍然有可能在该平台最小值的吸引域内。因此,周期性地增大学习率虽然短期内损害优化过程,使得网络收敛的稳定性变差,但是长期来看有助于找到更好的局部最优解。
AdaGrad算法:每次迭代自适应地调整每个参数的学习率,在第t次迭代时,先计算每个参数梯度平方的累计值
(Hadamard乘积,两个矩阵点对点相乘)是第次迭代时的梯度
AdaGrad算法的参数更新差值为
是初始学习率,是为了保持数值稳定性而设置的非常小的常数
在AdaGrad算法中,如果某个参数的偏导数累积比较大,其学习率相对较小,相反,如果其偏导数累积较小,其学习率相对比较大,整体是随着迭代次数的增加,学习率逐渐缩小。
缺点是经过一定次数的迭代还没有找到最优点时,由于此时的学习率已经非常小了,很难再继续找到最优点。
RMSprop算法:是一种自适应学习率的方法,可以在有些情况下避免AdaGrad算法学习率不断单调下降以至于过早衰减的缺点。
RMSprop算法首先计算每次迭代梯度平方的指数衰减移动平均
其中为衰减率,一般取值为0.9
RMSprop算法的参数更新差值为
RMSprop算法与AdaGrad算法的区别在于的计算由累积方式变成了指数衰减移动平均,在迭代过程中,每个参数的学习率并不是呈衰减趋势,既可以变大也可以变小。
AdaDelta算法:也是AdaGrad算法的一个改进,通过梯度平方的指数衰减移动平均来调整学习率,此外,还引入了每次参数更新差值的平方的指数衰减权移动平均。
第t次迭代时,参数更新差值的平方的指数衰减权移动平均为
其中为衰减率
AdaDelta算法的参数更新差值为
其中的计算方式和RMSprop算法一样,为参数更新差值的指数衰减权移动平均
AdaDelta算法将RMSprop算法中的初始学习率改为动态计算的,在一定程度上平抑了学习率的波动
4.2.5 梯度估计修正的方法有哪些?
动量法、Nesterov加速梯度、梯度截断。
动量法:用之前积累的动量来替代真正的梯度。在t次迭代时,计算负梯度的加权移动平均作为参数的更新方向
其中,为动量因子,常设为0.9,是学习率
这样,每个参数的实际更新差值取决于最近一段时间内梯度的加权平均值。当某个参数在最近一段时间内梯度方向不一致时,其真实的参数更新幅度变小,相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用。在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快地到达最优点。在迭代后期,梯度方向会不一致,在收敛值附件振荡,东连发会起到减速作用,增加稳定性。
梯度截断:当梯度的模大于一定阈值时,就把它截断成为一个较小的数
4.2.6 综合学习率调整和梯度估计修正的方法:Adam算法
Adam算法:可以看作是动量法和RMSprop算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率。Adam算法一方面计算梯度的指数加权平均,另一方面计算梯度平方的指数加权平均
其中和分别为两个移动平均的衰减率,通常取值为。可以把分别看作梯度的均值(一阶矩)和未减去均值的方差(二阶矩)
假设,那么在迭代初期的值会比真实的均值和方差要小,特别是当和都接近于1时,偏差会很大,因此需要对偏差进行修正
Adam算法的参数更新差值为
补充:指数移动加权平均法,是指各数值的加权系数随时间呈指数式递减,越靠近当前时刻的数值加权系数就越大
指数加权移动平均详解 附代码实现(全网之最)_指数加权移动平均法-CSDN博客
4.3 参数初始化
- 预训练初始化:一个已经在大规模数据上训练过的模型可以提供一个比较好的参数初始值
- 随机初始化:在线性模型的训练中,一般将参数全部初始化为0,但是在神经网络中如果参数都为0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同,在反向传播时,所有权重的更新也相同,这样会导致隐藏层神经元没有区分性,这种现象称为对称权重现象,比较好的方式是对每个参数都随机初始化,使得不同神经元之间的区分性更好。
- 固定值初始化:对一些特殊的参数,可以根据经验用一个特殊的固定值来进行初始化,比如偏置用0来初始化
随机初始化的方法:基于固定方差的参数初始化、基于方差缩放的参数初始化、正交初始化
4.4 数据预处理
4.4.1 为什么要进行数据预处理/归一化?
归一化方法泛指把数据特征转换为相同尺度的方法。
不同尺度的输入特征会增加参数初始化难度,影响梯度下降法的效率(尺度不同会造成在大多数位置上的梯度方向并不是最优的搜索方向,当使用梯度下降法寻求最优解时,会导致需要很多次迭代才能收敛,如果把数据归一化为相同尺度,大部分位置的梯度方向近似于最有搜索方向,在梯度下降求解时,每一步梯度的方向都基本指向最小值,训练效率会大大提高。
-
4.4.2 有什么常用的归一化方法?
- 最小最大值归一化:通过缩放将每一个特征的取值范围诡异到[0,1]或[-1,1]之间
- 标准化/Z值归一化:把每一维特征调整为均值为0,方差为1
- 白化:降低数据特征之间的冗余性。数据经过白化处理后,特征之间的相关性较低,并且所有特征都具有相同的方差,白化的一个主要实现方式就是PCA,去除掉各个成分之间的相关性
4.5 逐层归一化
4.5.1 逐层归一化可以提高训练效率的原因是什么?
- 更好的尺度不变性:把每个神经层的输入分布都归一化为标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性。不论低层的参数如何变化,高层的输入保持相对稳定。另外,尺度不变性可以使参数初始化和超参数选择更加高效。
- 更平滑的优化地形。逐层归一化一方面可以使得大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题,另一方面可以使得神经网络的优化地形更平滑,以及使梯度变得更加稳定,从而允许使用更大的学习率,提高收敛速度。
4.5.2 有什么常用的逐层归一化方法?
- 批量归一化:是在不同样本之间进行归一化。CNN适合用BN层
- 层归一化:是在同一样本内部进行归一化。RNN、transformer等适合用LN层
- 权重归一化和局部响应归一化。
【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别_bn和ln-CSDN博客
4.6 超参数优化
4.6.1 常见的超参数有哪些?
- 网络结构:包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型
- 优化参数:包括优化方法、学习率、小批量的样本数量
- 正则化系数
4.6.2 有哪些超参数配置方法?
- 网格搜索:通过尝试所有超参数的组合来寻找一组合适的超参数配置的方法。
- 随即搜索:对超参数进行随机组合,然后选取一个性能最好的配置。
- 贝叶斯优化:是一种自适应的超参数优化方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。时序模型优化方法。
- 动态资源分配
- 神经架构搜索
4.7 网络正则化
4.7.1 正则化是什么?
正则化是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法,比如引入约束、增加先验、提前停止等。
4.7.2 有什么常见的正则化方法?
- 正则化,通过约束参数的范数来减小模型在训练数据集上的归你和现象
- 权重衰减:每次参数更新时,引入一个衰减系数
- 提前停止:在试验梯度下降法进行优化时,可以有验证集上的错误来代替期望错误,当验证集上的错误率不再下降,就停止迭代。
- Dropout:随机丢弃一部分神经元。
- 数据增强:主要应用在图像数据上,通过算法对图像进行转变,引入噪声等方法来增加数据的多样性,增强的方法主要有几种:旋转、反转、缩放、平移、加噪声。
- 标签平滑:在输出标签中添加噪声来避免模型过拟合
4.7.3 Dropout具体是如何操作的?
设置一个固定的概率p,对每个神经元都以概率p来判定要不要保留,对于每一个神经层,可以引入一个掩蔽函数使得。掩蔽函数的定义为
,其中是丢弃掩码,通过以概率为p的伯努利分布随机生成。在训练时,激活神经元的平均数量为原来的p倍,在测试时,所有神经元都是可以激活的,但是这会造成训练和测试时网络的输出不一致,为了缓解这个问题,在测试时需要将神经层的输入乘以p,也相当于把不同的神经网络做了平均。
保留率p可以通过验证集来选取一个最优的值,一般来讲,p=0.5时效果最好。
4.7.4 为什么Dropout可以防止过拟合?
- 集成学习的角度解释:每做一个丢弃,相当于从原始网络中采样得到一个子网络,每次迭代都相当于训练一个不同的子网络,这些子网络都共享原始网络的参数,那么最终的网络可以近似看作集成了指数级个不同的网络的组合模型。因为不同的子网络会产生不同的过拟合情况,对结果取平均可能将“相反”的拟合相互抵消。从而使得整个网络减少过拟合程度。
- 减少神经元之间复杂的共适应关系。因为Dropout技术使得某两个神经元不一定每次都在一个子网络结构中出现。基于此权值的更新不在依赖于固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特征下才能有效的情况。迫使网络去学习更加鲁棒的特征(更加具有通适性)。
Dropout是什么?为什么Dropout可以防止过拟合?-CSDN博客
5.其他问题
5.1 机器学习和深度学习有何不同?
二者提取特征的方式不同,深度学习具备自动提取对象特征的能力,机器学习大多是人们手动选取特征和构造特征。
5.2 机器学习、深度学习和人工智能的关系
AI是一个主要研究如何制造智能机器或智能系统,借以模拟人类的智能活动,从而延伸人类智能的科学。人工智能包含机器学习,机器学习包含深度学习。
5.3 Tensorflow
是一个采用计算图来计算数值的开源软件库。它的核心思想在于将计算过程表示为一个有向图,这个有向图即模型的计算图。
keras是深度学习模型开发框架,大部分功能已经并入Tensorflow框架。