当前位置:   article > 正文

【11】机器学习算法面试八股_dropout后跟softmax层

dropout后跟softmax层

191relu在零点可导吗,不可导如何进行反向传播?

不可导。人为将梯度规定为0

192Softmax公式,溢出怎么处理,求导在这里插入图片描述

193推导sigmoid求导公式

在这里插入图片描述

194说一下你了解的优化函数

优化函数就是用来最小化我们的损失函数的。

  1. 梯度下降法。
    梯度下降法是原始的优化方法,梯度下降的核心思想:负梯度方向是使函数值下降最快的方向,因此我们的目标就是求取目标函数的负梯度。
    在梯度下降法中,因为每次都遍历了完整的训练集,其能保证结果为全局最优(优点),但是也因为我们需要对于每个参数求偏导,且在对每个参数求偏导的过程中还需要对训练集遍历一次,当训练集很大时,计算费时(缺点)。整个训练集对应一个梯度

目标函数是凸函数的时候,用梯度下降的方法取得的最小值是全局最优解。但神经网络的损失函数往往是非凸函数,所以梯度下降法往往找到的是局部最优解。
2. 批次梯度下降法。
为了解决梯度下降法的耗时问题,批次梯度下降法在计算梯度时,不用遍历整个训练集,而是针对一个批次的数据。一个批次数据对应一个梯度
3. 随机梯度下降法。
再极端一点,就是随机梯度下降法,即每次从训练集中随机抽取一个数据来计算梯度。因此,其速度较快(优点),但是其每次的优化方向不一定是全局最优的(缺点)。因为误差,所以每一次迭代的梯度受抽样的影响比较大,也就是说梯度含有比较大的噪声,不能很好的反映真实梯度,并且SGD有较高的方差,其波动较大。而且SGD无法逃离鞍点。
优点: 收敛速度快。
缺点:1. 训练不稳定。2. 选择适当的学习率可能很困难。 3. 无法逃脱鞍点。

  1. Momentum随机梯度下降法((一阶动量))
    Momentum借用了物理中的动量概念,即前一次的梯度也会参与运算。为了表示动量,引入了一阶动量mmm(momentum)。mmm是之前的梯度的累加,但是每回合都有一定的衰减。
    • 在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡;
    • 在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛。
    总而言之,momentum能够加速SGD收敛,抑制震荡。并且动量有机会逃脱局部极小值(鞍点)。
  2. Nesterov动量型随机梯度下降法(一阶动量)
    Nesterov动量型随机梯度下降法是在momentum更新梯度时加入对当前梯度的校正,让梯度“多走一步”,可能跳出局部最优解。
    相比momentum动量法,Nesterov动量型随机梯度下降法对于凸函数在收敛性证明上有更强的理论保证。
  3. Adagrad法(二阶动量)
    SGD的学习率是线性更新的,每次更新的差值一样(学习率一样)。后面的优化法开始围绕自适应学习率进行改进。Adagrad法引入二阶动量,根据训练轮数的不同,对学习率进行了动态调整。
    但缺点是Adagrad法仍然需要人为指定一个合适的全局学习率,同时网络训练到一定轮次后,分母上梯度累加过大使得学习率为0而导致训练提前结束。
  4. Adadelta法(二阶动量)
    Adadelta法是对Adagrad法的扩展,通过引入衰减因子ρ消除Adagrad法对全局学习率的依赖
    Adadelta法避免了对全局学习率的依赖。而且只用了部分梯度加和而不是所有,这样避免了梯度累加过大使得学习率为0而导致训练提前结束。
  5. RMSProp法(二阶动量)
    AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。为了解决这一问题,RMSprop算法对Adagrad算法做了一点小小的修改,RMSprop使用指数衰减只保留过去给定窗口大小的梯度,使其能够在找到凸碗状结构后快速收敛。RMSProp法可以视为Adadelta法的一个特例。
    RMSProp法缺陷在于依然使用了全局学习率,需要根据实际情况来设定。可以看出分母不再是一味的增加,它会重点考虑距离它较近的梯度(指数衰减的效果)。优点是只用了部分梯度加和而不是所有,这样避免了梯度累加过大使得学习率为0而导致训练提前结束。
  6. Adam法(一二阶动量)
    Adam法本质上是带有动量项的RMSProp法,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam法主要的优点在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳。
    最流行并且使用很高的优化器(算法)包括SGD、具有动量的SGD、RMSprop、具有动量的RMSProp、AdaDelta和Adam。
    有两个参数很重要。一个是优化方向,反映为梯度或动量;另一个是步长,反映为学习率。

195SGD和Adam谁收敛的比较快?谁能达到全局最优解?

SGD算法没有动量的概念,SGD和Adam相比,缺点是下降速度慢,对学习率要求严格。
而Adam引入了一阶动量和二阶动量,下降速度比SGD快,Adam可以自适应学习率,所以初始学习率可以很大。
SGD相比Adam,更容易达到全局最优解。主要是后期Adam的学习率太低,影响了有效的收敛。
我们可以前期使用Adam,后期使用SGD进一步调优。

196adam用到二阶矩的原理是什么在这里插入图片描述

Adam法主要的优点在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳。

197Batch的大小如何选择,过大的batch和过小的batch分别有什么影响

Batch选择时尽量采用2的幂次,如8、16、32等
在合理范围内,增大Batch_size的好处:

  1. 提高了内存利用率以及大矩阵乘法的并行化效率。
  2. 减少了跑完一次epoch(全数据集)所需要的迭代次数,加快了对于相同数据量的处理速度。
    盲目增大Batch_size的坏处:
  3. 提高了内存利用率,但是内存容量可能不足。
  4. 跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加,从而对参数的修正也就显得更加缓慢。
  5. Batch_size增大到一定程度,其确定的下降方向已经基本不再变化。
    Batch_size过小的影响:
  6. 训练时不稳定,可能不收敛
  7. 精度可能更高。

198梯度下降的思想

梯度下降法是原始的优化方法,梯度下降的核心思想:负梯度方向是使函数值下降最快的方向,因此我们的目标就是求取目标函数的负梯度。
在梯度下降法中,因为每次都遍历了完整的训练集,其能保证结果为全局最优(优点),但是也因为我们需要对于每个参数求偏导,且在对每个参数求偏导的过程中还需要对训练集遍历一次,当训练集很大时,计算费时(缺点)

199解决模型训练过拟合有哪些思路

l1正则化,
在这里插入图片描述l2正则化
在这里插入图片描述Dropout
验证集的使用和早停
在训练过程中使用训练集,在每一个epoch结束后使用验证集验证模型效果,画出训练曲线,这样就可以判断是否过拟合了。当发现网络有点过拟合了,当然就是“早停”了,可以直接停止训练了。
扩充数据集
数据集越大,网络泛化性能越好,所以努力扩充数据集,通过平移、翻转、旋转、放缩、随机截取、加噪声、色彩抖动等等方式
BN(Batch Normolization)
作为正则化的一种形式
批规范化,即在模型每次随机梯度下降训练时,通过mini-batch来对每一层卷积的输出做规范化操作,使得结果(各个维度)的均值为0,方差为1。
在这里插入图片描述BN实际就是对网络的每一层都进行白化操作。白化操作是线性的,最后的“尺度变换和偏移”操作是为了让BN能够在线性和非线性之间做一个权衡。引入了可学习参数γ、β,这就是算法关键之处。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。

Bagging和Boosting(模型融合)
Bagging算法使用Bootstrap方法从原始样本集中随机抽取样本。共提取K个轮次,得到K个独立的训练集,元素可以重复。分类问题以结果中的多个值投票作为最终结果,回归问题以平均值作为最终结果。结果采用投票法,避免了决策树的过拟合问题。
Boosting是为每个训练样本设置一个权重,在下一轮分类中,误分类的样本权重较大,即每轮样本相同,但样本权重不同;对于分类器来说,分类误差小的分类器权重较大,反之则小

201正则化l1(lasso)和l2(ridge)的区别?

L1是模型各个参数的绝对值之和;L2是模型各个参数的平方和。
• L1会趋向于产生少量的特征,而其他的特征都是0;L2会选择更多的特征,这些特征都会接近于0,得到的解比较平滑(不是稀疏),降低模型的复杂度。
在这里插入图片描述在这里插入图片描述

202L1有什么缺点?

L1正则要算绝对值,算绝对值比较麻烦;直接平方要比算绝对值来得简单,这一点上L2正则计算更加简便(优化时求导方便)。

203L1正则为什么可以达到模型的稀疏性

L1是模型各个参数的绝对值之和∣w⃗∣,L1正则项解空间为菱形。最优解必定是有且仅有一个交点。菱形的唯一交点大概率出现在坐标轴上,那么对目标函数经过优化后,一部分参数会变为0,另一部分参数为非零实值。这样我们就得到了稀疏特征了。

204知道BN吗?公式写一下,有什么作用与优势?BN的计算过程。BN训练和测试有什么不同?在这里插入图片描述

205介绍一下BN和LN?有什么差异?LN是在哪个维度上进行归一化

LN:Layer Normalization,LN是“横”着来的,对一个样本,经过同一层的所有神经元间做归一化。Layer Normalization是每个样本内部做标准化,跟size没关系,不受其影响。也适用于RNN等动态网络
BN:Batch Normalization,BN是“竖”着来的,经过一个神经元的所有样本做归一化,所以与batch size有关系。
缺点:1BN比较依赖size的大小
2在训练的时候,是分批量进行填入模型的,但是在预测的时候,如果只有一个样本或者很少量的样本来做inference,这个时候用BN显然偏差很大
3. BN并不适用于RNN等动态网络
二者提出的目的都是为了加快模型收敛,减少训练时间。
在这里插入图片描述通道C可以理解为神经元
在这里插入图片描述

206要同时使用BN和dropout该如何使用?

同时使用BN和dropout时,可能存在方差偏移的问题
针对方差偏移,论文给出了两种解决方案:

  1. 拒绝方差偏移,BN层+dropout+softmax层只在所有BN层的后面采用dropout层(现在大部分开源的模型,都在网络的中间加了BN,我们也就只能在softmax的前一层加加dropout了,效果还行,至少不会比不加dropout差。还有另外一种方法是模型训练完后,固定参数,以测试模式对训练数据求BN的均值和方差,再对测试数据进行归一化,论文证明这种方法优于baseline)
  2. dropout原文提出了一种高斯dropout,论文再进一步对高斯dropout进行扩展,提出了一个均匀分布Dropout,这样做带来了一个好处就是这个形式的Dropout(又称为“Uout”)对方差的偏移的敏感度降低了
    dropout
    dropout在训练时,以一定的概率p来drop掉相应的神经网络节点,以(1-p)的概率来保留相应的神经网络节点,这相当于每一次训练时模型的网络结构都不一样,也可以理解为训练时添加了不同的数据,所以能够有效减少过拟合。

因为训练的时候以概率p drop了一些节点,比如dropout设置为0.5,隐藏层共有6个节点,那训练的时候有3个节点的值被丢弃,而测试的时候这6个节点都被保留下来(测试时候不加dropout),这就导致了训练和测试的时候以该层节点为输入的下一层的神经网络节点获取的期望会有量级上的差异。为了解决这个问题,在训练时对当前dropout层的输出数据除以(1-p),之后再输入到下一层的神经元节点,以作为失活神经元的补偿,以使得在训练时和测试时每一层的输入有大致相同的期望。

Batch Normalization
BN就是在深度神经网络训练时通过对每一个batch的数据采用均值和方差进行归一化,使得每一层神经网络的输入保持相同的分布,这样能够加快训练的速度。此外,因为在训练时,为每一次迭代求全局的均值和方差是不现实的,因此借鉴moment的方式对均值和方差进行更新,使得每一层归一化的均值和方差都不一样,也相当于引入了噪声,能够增加模型的鲁棒性,有效减少过拟合。
方差偏移
dropout和BN结合使用使模型性能下降的连接方式,用通俗的话讲,就是先在网络的内部使用dropout,随后再跟上一个BN层,而且这个BN层还不止一个。原因有二。首先,如上图所示,因为训练时采用了dropout,虽然通过除以(1-p)的方式来使得训练和测试时,每个神经元输入的期望大致相同,但是他们的方差却不一样。第二,BN是采用训练时得到的均值和方差对数据进行归一化的,现在dropout层的方差不一样,一步错步步错,最终导致输出不准确,影响最后的性能。

207BN的gama labada意义

对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的。于是BN最后的“尺度变换和偏移”操作,引入了可学习参数γ、β,这就是算法关键之处。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布

208数据增强的方法 7

数据集越大,网络泛化性能越好,所以努力扩充数据集,通过平移、翻转、旋转、放缩、随机截取、加噪声、色彩抖动等等方式。

209两个正则化的参数分布

L1正则化假设参数分布为Laplace分布;L2正则化假设参数分布为正态分布

210在预测的时候,是使用dropout训练出的权重还是要乘以keep-prib呢,为什么?

要乘以keep-prib。
因为神经元预测的时候就没办法随机丢弃,一种”补偿“的方案就是每个神经元的权重都乘以一个p,这样在“总体上”使得测试数据和训练数据是大致一样的。保证测试的时候把这个神经元的权重乘以p可以得到同样的期望。
注:目前主流是采用inverted dropout替代dropout,inverted dropout不需要乘以keep-prib。它的做法是在训练阶段对执行了dropout操作的层,其输出激活值要除以keep_prob,而测试的模型不用再做任何改动。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/75089
推荐阅读
相关标签
  

闽ICP备14008679号