第11章 实践方法论
要成功地使用深度学习技术,仅仅知道存在哪些算法和解释他们为何有效的原理是不够的。 一个优秀的机器学习实践者还需要知道如何针对具体应用挑选一个合适的算法以及如何监控,并根据实验反馈改进机器学习系统。 在机器学习系统的日常开发中,实践者需要决定是否收集更多的数据、增加或减少模型容量、添加或删除正则化项、改进模型的优化、改进模型的近似推断或调试模型的软件实现。
[success] DL/ML玩家的必备技能 知道存在哪些算法 解释他们为何有效的原理 针对具体应用挑选一个合适的算法 如何监控 根据实验反馈改进
尝试这些操作都需要大量时间,因此确定正确做法,而不盲目猜测尤为重要的。
本书的大部分内容都是关于不同的机器学习模型、训练算法和目标函数。 这可能给人一种印象——成为机器学习专家的最重要因素是了解各种各样的机器学习技术,并熟悉各种不同的数学。 在实践中,正确使用一个普通算法通常比草率地使用一个不清楚的算法效果更好。 正确应用一个算法需要掌握一些相当简单的方法论。 本章的许多建议都来自~{ng-lecture-advice}。
我们建议参考以下几个实践设计流程:
[success] 第一次读这一章的时候只是觉得这一章比较简单,没有那些复杂的公式和奇怪的术语。这一章的大部份文字都知道它的意思。 直到把前面的内容都啃完,并在kaggle上有一点点小小的尝试之后,才发现这一章的内容,每一条建议都极为中肯。 要真正理解这一章的内容,需要大量的实践。
确定目标——使用什么样的误差度量,并为此误差度量指定目标值。
这些目标和误差度量取决于该应用旨在解决的问题。
尽快建立一个端到端的工作流程,包括估计合适的性能度量。
搭建系统,并确定性能瓶颈。
检查哪个部分的性能差于预期,以及是否是因为过拟合、欠拟合,或者数据或软件缺陷造成的。
根据具体观察反复地进行增量式的改动,如收集新数据、调整超参数或改进算法。
我们将使用街景地址号码转录系统~{cite?}作为一个运行示例。 该应用的目标是将建筑物添加到谷歌地图。 街景车拍摄建筑物,并记录与每张建筑照片相关的GPS坐标。 卷积网络识别每张照片上的地址号码,由谷歌地图数据库在正确的位置添加该地址。 这个商业应用是一个很好的示例,它的开发流程遵循我们倡导的设计方法。
我们现在描述这个过程中的每一个步骤。
[success] train/vali/test set ML攻略都会推荐训练集:验证集:测试集 = 70:0:30或60:20:20。 当数据量少(10万级别)时以上比例是合理的。 当DL训练是数量量特别大(百万级别及以上)时,验证集和测试集的比例可减少。 例如dateset = 1000000,比例可以调整为98:1:1 mismatch train/test distribution 例如训练集中网上抓来的制作精良的样本。而测试集是用户上传的比较随意的样本。 建议:验证集和测试集来自同一分布。 测试集可以不要 测试集用于对已选模型的无偏估计,可以没有。 问:label有错误是否需要修改? 答:训练集中的随机错误,不需要修改,例如打标签的人偶尔的疏忽。 训练集中的系统错误,需要修改,例如某个打标签的人把所有白色的狗都标记为猫。 验证集/测试集的错误:取决于是否影响在开发集上评估算法的能力。
Last updated