开始:先考虑两个问题
1. 衡量一下,在你要完成的任务上,人类水平怎样?
2. 你的训练数据和测试数据是否服从相同的概率分布?
衡量人类水平
衡量人类水平的真正目标,是为了估算贝叶斯错误率。知道贝叶斯错误率,有助于算出你的模型对于训练数据是欠拟合还是过拟合。
更清楚地说,它有助于我们衡量吴恩达所定义的“Bias(偏差)”,稍后在工作流程中会用到。
注:在统计分类中,贝叶斯错误率是指一类已知分类器的最低可能错误率。
如果训练、测试数据服从同分布
1. 打乱数据,分割成训练/验证/测试集
吴恩达推荐按70%/15%/15%的比例来分割训练/验证(Dev)/测试集。
2. 测量训练集错误和Dev集错误,计算偏差和方差
偏差和方差的计算方法如下:
▪ 偏差=训练集错误 - 人类错误
▪ 方差=验证集错误 - 训练集错误
3. 你得到的偏差高吗?如果高,先解决这个问题
举个高偏差的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 5% |
验证集错误 | % |
这就需要在进行下一步之前,先修正高偏差。
4. 方差高吗?如果高,也需要先修正
举个高方差的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 2% |
验证集错误 | 6% |
修正了高方差就完工了。
如果训练集和测试机不服从同分布
1. 分割数据
如果你的训练数据和测试数据不服从相同概率分布,那么要确保你的验证数据和测试数据集服从同分布。
具体操作上,可以将测试集一半数据用于验证,另一半留着测试;然后从训练集中分出一小部分,用作训练验证集。
2. 测量错误,计算关键指标
计算这些指标能帮你了解在那些方面努力:
错误类型 | 公式 |
偏差 | 训练集错误 - 人类错误 |
方差 | 训练验证集错误 - 训练集错误 |
训练/测试集失配 | 验证集错误 - 训练验证集错误 |
验证集过拟合 | 测试集错误 - 验证集错误 |
3. 你得到的偏差高吗?如果高,先修正偏差
一个高偏差的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 10% |
训练验证集错误 | 10.1% |
验证集错误 | 10.2% |
这就需要在进行下一步之前,修正高偏差。
4. 你得到的方差高吗?如果高,先修正高方差
一个高方差的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 10.1% |
验证集错误 | 10.2% |
在进行下一步之前,先修正高方差。
5. 训练/测试集失配率高吗?如果高,还是要修正
一个训练/测试集高失配率的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 2.1% |
验证集错误 | 10% |
在进行下一步之前,先修正失配率。
6. 验证集有没有过拟合?对过拟合进行修正
一个训练/测试集高失配率的例子:
错误类型 | 错误率 |
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 2.1% |
验证集错误 | 2.2% |
测试集错误 | 10% |
修正了高方差就完工了。
关于上文提到的各项修正
修正高偏差
吴恩达推荐下面这些修正高偏差模型的方式:
▪ 尝试用更大的模型
▪ 延长训练时间
▪ 尝试用新的模型架构(这个比较难)
修正高方差
依然是吴恩达推荐的修正方式:
▪ 获取更多数据(包括数据合成和数据扩充)
▪ 试试加上正则化
▪ 尝试提早停止训练(early stopping)
▪ 尝试用新的模型架构(这个比较难)
修正训练/测试集高失配
吴恩达推荐的方式:
▪ 获取更多和测试集相似的数据
▪ 尝试数据合成和数据扩充
▪ 尝试用新的模型架构(这个比较难)
修正验证集过拟合
吴恩达推荐
▪ 获取更多验证数据
笔记的作者推测,这应该也包括数据合成和数据扩充。