标题:构建机器学习项目
课程3的内容看起来相对较少,只有2周的内容设置,且没有作业。但它的内容非常的有价值,可以帮助你做决策、更好的理解你的项目。
当你成功的把你的项目跑起来以后,接下来要解决的就是至关重要的优化问题,为了达到你的目标,你需要付出很多努力。
在这个优化的过程中,有很多的策略可以选择,那么如何去使用工程化的手段进行分析从而选择相对靠谱的策略去解决问题,而不是在错误的方向上浪费大把时间是非常有意义的。
这里就是介绍了一些方法和策略,帮助你做决策。下面是具体的内容。
1.一个单一结果的目标可以大大加快你的优化速度。
2.项目一般需要同时具备性能指标和限制性指标,在满足了限制性指标的前提下尽可能优化性能指标。
3.划分训练/开发/测试集。这里的测试和开发集不需要满足通常的7/2/1(或接近)的比例,只要保证测试和开发集的数量集足以用来评估(1000-数万)即可。因为数据量的需要,不严格要求训练集和开发测试集有相同的分布,但开发集和测试集应保证相同的分布。
4.深度学习属于监督学习,可以用人类的最佳表现(拟定为贝叶斯错误)来帮助我们评估可优化的空间。error(训练误差) = bayes error(无法优化) + avoidable bias(训练误差)
5.在训练集分布不同的情况下,在其中抽取一部分作为训练开发集,对其测试的结果和开发/测试集的结果对比,其偏差认定为分布偏差(distribution error)。此偏差是因为分布引起的,可以通过数据层面来改进之,需要深入分析两者之间的分布差异,尝试通过人工合成的方式改进你的训练数据。训练开发集的结果和训练集结果的差值可以认为是ariance error,也就是过拟合,可以尝试我们之前学习过的一些方法去尝试解决(dropout/l2/bn/改进网络结构等)。有时,你也需要增大测试集的大小以获得更好的评估。
6.有时候你需要进行手工分析,但通常你不需要修改训练集中的错误标签(因为太大了),如果测试集中错误标签比例较高,需要手工修正之并重新评估。可以对错误分类的测试情况建立一个表格,统计出影响较高的类别以及是否可以操作(优化),从而进行下一步决策。
7.端到端的深度学习系统 vs 深度学习作为系统的一个环节。 所谓端到端也就是简单粗暴的把整个问题定义成一个深度学习问题,直接使用深度学习的方法去解决。当你的数据集很多、模型感觉也比较靠谱的时候这样做有可能是比较好的解决方案,但很多情况下深度学习扮演的角色是系统中的一个环节,还需要引入其他的处理机制帮助整个系统更好的工作。比如图像预处理、将一个复杂问题分解成两个问题等等。
8.迁移学习和多任务学习。多任务学习不同于softmax的多分类,而是说多个不同的输出,依赖于相同的输入。多任务学习的应用不多,在计算机视觉中有一些应用(例如可以在一个图片中同时检出不同类别的物体)。迁移学习可以让我们利用构建好的模型和参数,迁移到其他任务。在实际操作时候冻结其中的一部分或者干脆全部重新训练。这样做有效的前提是你构建的网络中应该可以包含新任务的特征,那么你就可以大胆的尝试。如果完全不相关,那么很可能完全不work。