从今天起,豆芽有空也尽己所能,帮助一下大家。
面经来源:https://www.nowcoder.com/discuss/702074?source_id=discuss_experience_nctrack&channel=-1
1. 牛顿法和拟牛顿法介绍一下
牛顿法可由二阶泰勒展开求导可近似得到牛顿法迭代公式:
但是在实际应用过程中,我们会发现海塞矩阵的逆矩阵往往计算比较复杂,于是又有了拟牛顿法来简化这一过程。
在拟牛顿法中,考虑优化出一个n阶矩阵D来代替海塞矩阵的逆矩阵。可以发现海塞矩阵逆矩阵的近似矩阵D(x)的选择条件比较灵活,可以有多种具体的实现方法。比较常用的算法是DFP算法替代海塞矩阵逆矩阵的迭代公式
2. 有哪些优化方法使用了二阶动量?
Adagrad法、Adadelta法、RMSProp法、Adam法
3. 描述一下过拟合现象
过拟合:训练集效果很好,测试集效果较差
欠拟合:训练集效果差,测试集效果也差。
4. 抑制过拟合的方法有哪些?
扩充数据集、l1、l2,dropout、BN、验证集、模型集成
5. 介绍一下BatchNorm。
BN(Batch Normolization)是Google提出的用于解决深度网络梯度消失和梯度爆炸的问题,可以起到一定的正则化作用。我们来说一下它的原理:
批规范化,即在模型每次随机梯度下降训练时,通过mini-batch来对每一层卷积的输出做规范化操作,使得结果(各个维度)的均值为0,方差为1。
BN操作共分为四步。输入为,第一步计算均值:
第二步计算数据方差:
第三步进行规范化:
第四步尺度变换和偏移:
表示mini-batch中的数据个数,可以看出,BN实际就是对网络的每一层都进行白化操作。白化操作是线性的,最后的“尺度变换和偏移”操作是为了让BN能够在线性和非线性之间做一个权衡,而这个偏移的参数和 是神经网络在训练时学出来的
经过BN操作,网络每一层的输出小值被“拉大”,大值被“缩小”,所以就有效避免了梯度消失和梯度爆炸。总而言之,BN是一个可学习、有参数(γ、β)的网络层。
6. BN在测试阶段使用的mean、var是如何获得的?
训练时,均值和方差针对一个Batch。
测试时,均值和方差针对整个数据集而言。因此,在训练过程中除了正常的前向传播和反向求导之外,我们还要记录每一个Batch的均值和方差,以便训练完成之后按照下式计算整体的均值和方差:
上面简单理解就是:测试模型中,对于均值来说直接计算所有batch 值的平均值;然后对于标准偏差采用每个batch 的无偏估计(无偏估计是用样本统计量来估计总体参数时的一种无偏推断)。
最后测试阶段,BN的使用公式就是:
以上所有题的答案其实都来源于我的博客面经,欢迎大家围观:https://blog.nowcoder.net/jiangwenbo
全部评论
(6) 回帖