面试帖

  • 什么是欠拟合,什么是过拟合?

 

  • 解决过拟合的方法? 

解决过拟合的方法:

  1. 提前终止(当验证集上的效果变差的时候)
  2. L1和L2正则化
  3. Dropout
  4. 增加噪声
  5. 数据集增扩
  6. 结合多种模型

L1和L2正则化的区别

L1、L2正则化是通过修改代价函数来解决过拟合问题。

正则化是用来解决过拟合问题的,过拟合指的是当一个模型过为复杂之后,它可以很好的“记忆”每一个训练数据中随机噪音的部分而忘记了要去“学习”训练数据中通用的趋势。

 

面试帖

图:L1正则化

面试帖

图: L2正则化 

区别:

  • L1正则化会让参数变得稀疏,而L2正则化不会。所谓参数变得更加稀疏是指会有更多的参数变成0,这样可以达到类似特征选取的功能。
  • L1正则化的计算公式不可导,而L2正则化公式可导,因为在优化时需要计算损失函数的偏导数,所以对含有L2正则化损失函数的优化要更加简洁,优化带有L1正则化的损失函数要更加复杂

 

Dropout

Dropout是通过修改神经网络本身来解决过拟合问题。

  • 为什么dropout对于过拟合有效果?

dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

Hintion的直观解释和理由如下:

  1. 由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。

  2. 可以将dropout看作是模型平均的一种。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时share隐含节点的权值。这样不同的样本就对应不同的模型,是bagging的一种极端情况。个人感觉这个解释稍微靠谱些,和bagging,boosting理论有点像,但又不完全相同。

  3. native bayes是dropout的一个特例。Native bayes有个错误的前提,即假设各个特征之间相互独立,这样在训练样本比较少的情况下,单独对每个特征进行学习,测试时将所有的特征都相乘,且在实际应用时效果还不错。而Droput每次不是训练一个特征,而是一部分隐含层特征。

  4. 还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。

结合多种模型如何解决过拟合(略)

结合多种模型。模型的bias和Variance会影响过拟合、欠拟合,即bias越大,模型越欠拟合、Variance越大,模型越过拟合。这里多说一点,Variance和bias是trade off, 我为了让模型处处更准(小的bias),往往会导致模型过拟合(大的Variance,即每次判定不稳定) 
bagging (bootstrap aggregation)

采用多次对样本的采样,并行进行多个模型的训练,最终对分类结果进行投票获得最终结果。这中方法可以减小模型的Variance。因为bagging是多个强分类器的组合,每个强分类器的Variance高。 数学上,由于bagging的模型不是完全独立的,因此var(avg(x))/n < bagging < var(avg(x)), 所以可以起到降低Variance的作用。
boosting

串行地进行采样的模型训练,即比如每次取上个模型的错分样本。它是多个弱分类器的组合,每个弱分类器的bias高,组成强分类器后,bias就变低了。由于boosting 是迭代地进行损失最小化,越往后,模型的bias越小。
 

  • 验证集的作用?

原始数据集分为三部分:training data、validation data,testing data。

validation data:用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。

training data:计算梯度更新权重。

testing data:给出一个accuracy以判断网络的好坏。
 

 

 

参考:

机器学习中用来防止过拟合的方法有哪些?

L1正则化与L2正则化   讲讲正则化为什么能降低过拟合程度,并且说明下下L1正则化和L2正则化。

Deep learning:四十一(Dropout简单理解)