转载和提炼自:https://blog.csdn.net/red_stone1/article/details/78208851
1. 深度学习的实用层面
如何有效的运作神经网络?超参数调优、如何构建数据、如何确保优化算法快速运行
- 选择最佳的训练集(Training sets)、验证集(Development sets)、测试集(Test sets)对神经网络的性能影响非常重要。
- 除此之外,在构建一个神经网络的时候,我们需要设置许多参数,例如神经网络的层数、每个隐藏层包含的神经元个数、学习因子(学习速率)、激活函数的选择等等。
- 实际上很难在第一次设置的时候就选择到这些最佳的参数,而是需要通过不断地迭代更新来获得。
- 即使是最有经验的深度学习专家也很难第一次就找到最合适的参数。因此,应用深度学习是一个反复迭代的过程,需要通过反复多次的循环训练得到最优化参数。
1.1 Train/Dev/Test sets
一般地,我们将所有的样本数据分成三个部分:Train/Dev/Test sets。
- Train sets用来训练你的算法模型;
- Dev sets用来验证不同算法的表现情况,从中选择最好的算法模型;
- Test sets用来测试最好算法的实际表现,作为该算法的无偏估计。
数据量不是很大,如100,1k,10k,Train/Dev/Test sets 设置比例为60%、20%、20%。
数据量很大:100万,则:Train/Dev/Test sets 设置比例为98%/1%/1%,或者99%/0.5%/0.5%。
- 训练样本和测试样本分布上不匹配,意思是训练样本和测试样本来自于不同的分布。如自己的和用户上传的!
- 解决这一问题的比较科学的办法:尽量保证Dev sets和Test sets来自于同一分布
- 值得一提的是,训练样本非常重要,通常我们可以将现有的训练样本做一些处理,例如图片的翻转、假如随机噪声等,来扩大训练样本的数量,从而让该模型更加强大。
- 即使Train sets和Dev/Test sets不来自同一分布,使用这些技巧也能提高模型性能。
1.2 方差与偏差
高偏差——欠拟合(对应着训练集)
高方差——过拟合(对应着测试集)
- 假设Train set error为1%,而Dev set error为11%,即该算法模型对训练样本的识别很好,但是对验证集的识别却不太好。这说明了该模型对训练样本可能存在过拟合,模型泛化能力不强,导致验证集识别率低。这恰恰是high variance的表现。
- 过拟合,模型泛化能力不强。
- 假设Train set error为15%,而Dev set error为16%,虽然二者error接近,即该算法模型对训练样本和验证集的识别都不是太好。这说明了该模型对训练样本存在欠拟合。这恰恰是high bias的表现。
- 训练集和测试集误差都很高,欠拟合。
- 假设Train set error为15%,而Dev set error为30%,说明了该模型既存在high bias也存在high variance(深度学习中最坏的情况)。
- 再假设Train set error为0.5%,而Dev set error为1%,即low bias和low variance,是最好的情况。
- 值得一提的是,以上的这些假设都是建立在base error是0的基础上,即人类都能正确识别所有猫类图片。base error不同,相应的Train set error和Dev set error会有所变化,但没有相对变化。
- 一般来说,Train set error体现了是否出现bias,Dev set error体现了是否出现variance(正确地说,应该是Dev set error与Train set error的相对差值)。
- 模型既存在high bias也存在high variance,可以理解成某段区域是欠拟合的,某段区域是过拟合的。
1.3 减小偏差和方差的办法
- 减少高偏差(训练集误差)欠拟合的办法:当前模型过于简单,需要增加复杂性
- 增加神经网络的隐藏层个数——增加层数
- 增加神经元的个数
- 训练时间延长
- 选择其他更复杂的模型
在base error不高的情况下,一般都能通过这些方式有效降低和避免high bias,至少在训练集上表现良好。
- 减小高方差(测试集误差)过拟合的方法:
- 增加训练样本数据
- 进行正则化regularization
- 选择其他更复杂的模型
这里有几点需要注意的。第一,解决high bias和high variance的方法是不同的。实际应用中通过Train set error和Dev set error判断是否出现了high bias或者high variance,然后再选择针对性的方法解决问题。
第二,Bias和Variance的折中tradeoff。传统机器学习算法中,Bias和Variance通常是对立的,减小Bias会增加Variance,减小Variance会增加Bias。而在现在的深度学习中,通过使用更复杂的神经网络和海量的训练样本,一般能够同时有效减小Bias和Variance。这也是深度学习之所以如此强大的原因之一。
1.4 正则化
如果出现过拟合,即高方差,则需要采用正则化来解决。虽然扩大训练样本数量也是减小高方差的一种方法,但是通常获得更多训练样本的成本太高,比较困难。所以,更可行有效的办法就是使用regularization。