2013年6月6日,星期四

生产力即将等待

I recently gave a talk about practical tips for applied data science, and I think my best observation is really quite simple: practitioners are subject to long-running data manipulation processes, which means there is a lot of waiting going on. If you can wait less, this translates directly to your productivity. 那里's a cool sci-fi book called 碳改变 角色将自己上载到模拟器中以便更快地思考:在减少等待的程度上,您正在做类似的事情。

为了使事情简单,我在头脑中将事情分为不同的时间范围:
  1. 立即:不到60秒。
  2. 上厕所休息时间:少于5分钟。
  3. 午休时间:少于1小时。
  4. 隔夜:少于12小时。
那里 are more than 20 times as many immediate iterations as there are lunch breaks. You only work 20 days a month, so waiting less means you do in a day what somebody else does in a month.  此外,由于您(人类)在面对更长的延迟时会更倾向于尝试执行多任务,并且当人们从即时区域移至洗手间区域时,生产率会出现超线性下降。 在多任务处理方面很恐怖.

这是我避免等待的一些技巧。

使用更少的数据

这是一个简单的策略,但是人们仍然无法利用。在进行试验或调试时,您对数据或软件的了解不足,无法证明对所有数据或软件进行计算都是合理的。正如埃迪·伊扎德(Eddie Izzard)所说, ``缩小一点!''

亚线性调试

这里的想法是随着计算的进行输出足够的中间信息,以在完成之前确定您是否注入了重大缺陷或重大改进。在线学习尤其适用于此,因为它取得了相对稳定的进步并提供了瞬时损失信息,但是可以采用其他技术来做到这一点。学习曲线有时会交叉,但是亚线性调试非常适合立即识别出您已经胖了一些东西。

巧妙的术语由John Langford提供。

线性特征工程

我发现线性模型的工程功能然后在相同表示形式(例如神经网络,梯度提升决策树)上切换到更复杂的模型是一个富有成果的模式,因为线性模型的速度有助于快速实验。某些适用于线性模型的事物将倾向于适用于其他模型。当然,要设计出适用于线性模型的特征比较困难。另外,您必须牢记要使用的最终模型,例如,如果最终要使用树,则单变量的单调变换只会对线性模型有所帮助。

将代码移至数据

这是Hadoop的存在点,但是即使在更简单的设置中,确保您在数据所在的位置附近进行工作也可以节省宝贵的传输时间。如果您的数据位于云存储提供商中,请在同一数据中心内启动虚拟机。

2条评论:

  1. 完全同意。首先 ("Use Less Data")也位于我的列表顶部,因此推荐不充分。

    Isn't "Sublinear Debugging"只是明智地使用打印语句的一个花哨术语?

    在处理新数据集时,我先介绍一些简单或明显的功能('低垂的果实'),以使一切正常运行,然后返回以优化要素工程。

    非常有用的文章。最好 ...

    回复删除
    回覆
    1. Re: Sublinear debugging. 那里 is something substantive that I neglected to mention above, namely, avoid techniques during experimentation that do not admit this kind of treatment.

      那里'经常需要在渐近收敛性差但步长便宜的优化方法(例如SGD)和渐近收敛性快但步长昂贵的优化方法(例如准牛顿)之间进行选择。前者倾向于提供良好的中间信息,而后者看起来似乎一开始进展甚微,即使最终结果更好。因此,您将在实验过程中使用前者,而在成品中则使用后者。

      删除