吴恩达曾做了一次1小时19分钟的演讲:Nuts and Bolts of Applying Deep Learning,谈论深度学习应用的细节。这次演讲流传甚广,演讲中提到的工作流程在Reddit、Twitter上也经常被推荐。
最近,Github用户thomasj02看演讲视频写了一份笔记,总结出了1000字左右的“深度学习项目工作流程”。
吴恩达的演讲是在去年9月,他和Pieter Abbeel、Samy Bengio等人一起在湾区联合举办了两天的“深度学习学院”,请了12位湾区各校科研人员来给工程师们讲课。
在这份文档中,我试着总结吴恩达在2016年深度学习夏季学院,“深度学习应用细节”演讲中提出的,备受推荐的机器学习工作流程。如有错误或曲解,是我的问题,(不是吴恩达的)。
1. 衡量一下,在你要完成的任务上,人类水平怎样?
2. 你的训练数据和测试数据是否服从相同的概率分布?
衡量人类水平的真正目标,是为了估算贝叶斯错误率。知道贝叶斯错误率,有助于算出你的模型对于训练数据是欠拟合还是过拟合。
更清楚地说,它有助于我们衡量吴恩达所定义的“Bias(偏差)”,稍后在工作流程中会用到。
吴恩达推荐按70%/15%/15%的比例来分割训练/验证(Dev)/测试集。
偏差和方差的计算方法如下:
▪ 偏差=训练集错误 - 人类错误
▪ 方差=验证集错误 - 训练集错误
举个高偏差的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 5% |
验证集错误 | 6% |
这就需要在进行下一步之前,先修正高偏差。
举个高方差的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 2% |
验证集错误 | 6% |
修正了高方差就完工了。
如果你的训练数据和测试数据不服从相同概率分布,那么要确保你的验证数据和测试数据集服从同分布。
具体操作上,可以将测试集一半数据用于验证,另一半留着测试;然后从训练集中分出一小部分,用作训练验证集。
计算这些指标能帮你了解在那些方面努力:
错误类型 | 公式 |
---|---|
偏差 | 训练集错误 - 人类错误 |
方差 | 训练验证集错误 - 训练集错误 |
训练/测试集失配 | 验证集错误 - 训练验证集错误 |
验证集过拟合 | 测试集错误 - 验证集错误 |
一个高偏差的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 10% |
训练验证集错误 | 10.1% |
验证集错误 | 10.2% |
这就需要在进行下一步之前,修正高偏差。
一个高方差的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 10.1% |
验证集错误 | 10.2% |
在进行下一步之前,先修正高方差。
一个训练/测试集高失配率的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 2.1% |
验证集错误 | 10% |
在进行下一步之前,先修正失配率。
一个训练/测试集高失配率的例子:
错误类型 | 错误率 |
---|---|
人类错误 | 1% |
训练集错误 | 2% |
训练验证集错误 | 2.1% |
验证集错误 | 2.2% |
测试集错误 | 10% |
修正了高方差就完工了。
吴恩达推荐下面这些修正高偏差模型的方式:
▪ 尝试用更大的模型
▪ 延长训练时间
▪ 尝试用新的模型架构(这个比较难)
依然是吴恩达推荐的修正方式:
▪ 获取更多数据(包括数据合成和数据扩充)
▪ 试试加上正则化
▪ 尝试提早停止训练(early stopping)
▪ 尝试用新的模型架构(这个比较难)
吴恩达推荐的方式:
▪ 获取更多和测试集相似的数据
▪ 尝试数据合成和数据扩充
▪ 尝试用新的模型架构(这个比较难)
吴恩达推荐
▪ 获取更多验证数据
笔记的作者推测,这应该也包括数据合成和数据扩充。