2017年2月15日星期三

软件工程与机器学习概念

并非软件工程的所有核心概念都可以转化为机器学习领域。这是我注意到的一些差异。

分而治之 软件工程中的一项关键技术是将一个问题分解为更简单的子问题,解决这些子问题,然后将它们组合为原始问题的解决方案。可以说,这是递归应用的整个工作,直到可以使用任何编程语言在一行中表示解决方案为止。规范的教学示例是 河内塔.

不幸的是,在机器学习中我们永远无法完全解决问题。充其量,我们大约可以解决一个问题。这是该技术需要修改的地方:在软件工程中,子问题解决方案是 精确,但在机器学习错误中,复合和综合结果可能完全是垃圾。另外,如果组件是“improved”孤立,但聚合系统性能会降低“improvement”部署(例如,由于 模式 现在,下游组件无法预料到错误的发生,即使它们的出现频率较低)。

这是否意味着我们注定要进行整体思考(这听起来似乎无法解决大问题)?不,但这意味着您必须对子问题分解保持防御。可行时最好的策略是端到端地训练系统,即一起而不是孤立地优化所有组件(和组合策略)。通常这是不可行的,因此(受贝叶斯思想启发)另一种替代方法是让每个组件随输出报告某种类型的置信度或方差,以便于下游处理和集成。

实际上,当系统达到特定范围时,需要分解以将工作分配给许多人。正如Leon Bottou在他的著作中优雅地描述的那样,这现在在机器学习中不起作用是一个问题。 ICML 2015邀请演讲.

谈到莱昂讨论$ \ ldots $的另一个概念

正确性 在软件工程中,就给定关于输入的特定假设而言,当算法终止时,某些属性将为真,在某种意义上,可以证明算法是正确的。在(监督的)机器学习中,我们真正拥有的唯一保证是,如果训练集是来自特定分布的iid样本,则来自同一分布的另一个iid样本的性能将接近训练集,而并非远非最佳。

因此,任何以机器学习为生的人都有实验的心态。通常,我被问到选项A还是选项B更好,大多数时候我的答案是“我不知道,让我们同时尝试一下,看看会发生什么。”机器学习领域的人们可能知道的最重要的事情是如何以可预测泛化的方式评估广东11选五开奖号码查。即使那样“feel”事情:识别并防止训练和验证集之间的泄漏(例如,通过分层采样和时间采样)是您花了几次力气才能学到的东西;反事实循环的同上。 Kaggle非常适合学习前者,但是后者似乎需要在闭环系统上犯错才能真正欣赏。

实验性“correctness”它比其他软件的保证要弱得多,并且有很多方法可以使事情恶化。例如,根据我的经验,它总是临时的:广东11选五开奖号码查过时,似乎总是在发生。如此,您需要计划不断(因此自动)重新训练广东11选五开奖号码查。

重用 This one is interesting. 重用 is the key to leverage in 传统软件 engineering: it's not just more productive to reuse other code, but every line of code you write yourself is an opportunity to inject defects. Thus, reuse not only allows you to move faster but also make less mistakes: in return, you must pay the price of learning how to operate a piece of software written by others (when done well, this price has been lowered through good organization, documentation, and community support).

机器学习的某些方面表现出完全相同的权衡。例如,如果您正在编写自己的深度学习工具包,请认识到您很有趣。乐趣并没有错,可以说教学活动比整天玩视频游戏要好。但是,如果您想完成某件事,则绝对应该尝试重用尽可能多的技术,这意味着您应该使用标准工具箱。一旦学习了如何使用标准工具箱,您将可以更快地行动并减少错误。

机器学习工具包是“traditional software”但是,并且被设计为可以重用。广东11选五开奖号码查重用呢?那也可能很好,但是上面关于分解的警告仍然适用。因此,也许您使用的广东11选五开奖号码查会根据用户个人资料生成特征,作为广东11选五开奖号码查的输入。很好,但是您应该对所依赖的广东11选五开奖号码查进行版本控制,并且不要在未经评估或重新培训的情况下盲目升级。重用另一个广东11选五开奖号码查的内部结构特别危险,因为大多数机器学习广东11选五开奖号码查无法识别,即具有各种内部对称性,而这些对称性不是由训练过程确定的。例如,将一个嵌入与一棵树配对,当嵌入的下一个版本是上一个的旋转时,您可以看到性能立即下降。

基本上,广东11选五开奖号码查重用会创建 强大 组件之间的耦合,如果更改一个组件,可能会出现问题。

测验 我发现软件测试在机器学习中的作用是所有问题中最棘手的问题。毫无疑问,测试是必要的,但是使用基于属性的测试之类的挑战在于,机器学习组件捕获的概念很难用属性来表征(否则,您将使用非ml软件技术来编写它。 )。在一定程度上,ml组件应该显示某些属性,您可以测试一下这些属性,但是除非将这些属性合并到学习过程本身中(例如,通过参数绑定或数据扩充),否则您可能会违反该属性不一定表示缺陷。

有一个“extra-test”具有最低可接受质量的数据集是一个好主意:这可能是简单的示例,“any reasonable model”应该正确。还有自洽性:在Yahoo,他们曾经使用带有一组输入-输出对的广东11选五开奖号码查来运送广东11选五开奖号码查,这些输入-输出对是在广东11选五开奖号码查放在一起时计算的,并且如果加载的广东11选五开奖号码查没有重现该对,则广东11选五开奖号码查加载会被取消。 (那是永远不会发生的,对吗?惊喜!也许您正在使用具有不同版本或类似内容的库来使输入具有特色。)

监视已部署广东11选五开奖号码查的度量标准(代理和真实)也有助于发现问题。如果代理指标(即您实际在其上训练广东11选五开奖号码查并估计通用性能的事物)向南移动,则广东11选五开奖号码查的输入正在以某种方式发生变化(例如,非平稳环境,特征提取管道的变化);但是如果代理指标稳定,而真正指标向南移动,则问题可能出在如何利用广东11选五开奖号码查的输出。

Unfortunately what I find is many software systems with machine learning components are tested in a way that would make 传统软件 engineers cringe: we look 在 the output to see if it is reasonable. Crazy! As machine learning becomes a more pervasive part of software engineering, this state of affairs must change.

2条评论:

  1. 有时端到端系统不是一个好主意,因为我们发现它倾向于过度拟合数据集。如果我们使用不同的数据训练每个子系统,则它往往会在未知环境下获得更好的性能。

    回复删除
    回覆
    1. 在这种情况下,我仍然会进行端到端训练,但是要进行显式正则化以控制过度拟合。

      删除