深度模型拥有很多超参:
- 学习步长:alpha
- momentum 梯度下降参数:beta
- Adam 梯度下降参数:beta1, beta2, epsilon
- 网络层数layers
- 每层隐藏层的神经元的数量hidden units
- learning rate decay
- mini-batch size
- activation functions
超参优化的优先级
- 学习步长alpha最重要
- momentum参数beta,默认=0.9; mini-batch; hidden units;
- layers; learning rate decay;
- beta1, 默认=0.9; bera2, 默认=0.999; epsilon, 默认=pow(10, -8)
train/dev/test sets
所有的数据将被划分为 training set/development set/test set
首先在training set上训练很多模型,然后在dev set上验证(可以cross validation)一个最好的模型,最后在test set上测试模型的性能。
数据集划分
在传统的机器学习算法中,数据集通常划分为70%的training set和30%的test set,或者60% training set, 20%dev set, 20%test set。当数据集的总量在10000量级以内,这种划分方法最合适不过了。
当如果数据总量很大,比如在百万集的量级时,我们也许需要重新思考数据的划分策略了。通常,我们会倾向与划分更小比例的数据到dev set和test set。划分dev set的目标是校验模型并且调整以及选择一个最佳的模型,同样,划分test set的目标是评估最优模型的性能。
所以,不必要划分太多的数据到这两个数据集上。如果,拥有一百万量级的数据,那么,分别划分10000条数据到dev set和test set就足够了。
此外,为了让模型拥有更好的泛化能力,training set/dev set/test set的数据分布比例必须大致相同。
Bias & Variance
Bias和Variance代表训练出来的模型往往是偏执的,为了更好地解释这个概念,本人认为偏执一般与泛化相对。其中,Bias指的是训练偏执,Variance是测试偏执。如何降低模型的偏执,增强泛化能力呢?
首先,如果模型在训练数据上拟合不足,我们认为模型已经Bias了;相反,如果模型在训练集上过度拟合,认为模型Variance,并且出现了overfitting。这两种情况都不是理想的训练结果。
下面解释Bias和Variance的判断依据:
偏执类型 | Bayes optimal error | Training set error | Dev set error |
---|---|---|---|
High Bias | 0.01% | 12.00% | 12.10% |
High Variance | 0.01% | 0.50% | 12.10% |
High Bias & High Variance | 0.01% | 12.00% | 20.10% |
Low Bias & Low Variance | 0.1% | 0.50% | 0.80% |
Bayes optimal error 指的是由于数据本身的规律性和合理性的限制(数据质量不够),理论上最理想的最小识别误差值的大小。这个值往往是由相关专业人士识别数据所推导出来的误差极限(计算机算法很难达到)。Training set error指的是算法在训练集上训练出来的识别误差。Dev set error指验证集上的识别误差。
优化high Bias & high Variance
优化策略如下:
High Bias
- Bigger network
- Trains longer
- Uses more advanced optimization algorithms
- Finds a better suited network architecture
High Variance
- get more data
- Dropout
- regulariztion
- Finds a better suited network architecture
好的模型判断方法
机器学习模型算法训练的好或是不好,可以通过以下两个方面判断:
- 模型在训练集上数据拟合的好,可以认为此时模型的Bias error很低,数据拟合的好
- 模型在训练集上的优势依然体现在验证集和测试集上,在这两个数据集上有很好的拟合效果
此外,还有一些情况,模型在测试集上拟合的很好,性能表现优越,但在现实使用情况下表现幷不尽人意,此时需要考虑的是数据集的选择出现了偏差,需要根据现实情况合理调整数据的分布了。
正所谓,模型好坏的极限是由数据的质量决定的,而算法的性能只能让模型无限逼近这个极限。由此,数据质量的重要性可见一斑。