你实践中学到的最重要的机器学习经验是什么?

本题已加入知乎圆桌 »「机器学习 · 学以致用」,更多「机器学习」相关话题讨论欢迎关注。在quora上看到了这个问题,感觉很有意义,希望在知乎上也能听一听大家机器学习实践的经验之谈 。
关注者
4070
被浏览
104085

67 个回答

如果是说工业界的实践的话,我觉得最重要的经验是:

永远重视造工具

Best Engineer Builds Tools

在机器学习领域,好的工具包括但不限于:

  • 可以方便地添加新数据,新feature,且多人可以同步进行互不干扰
  • 可以快速地训练出一个新模型
  • 可以一键部署模型到生产环境,做A/B测试
  • 可以实时看到A/B测试结果,什么指标涨了什么跌了
  • 可以立刻做深入分析,发现什么情况下新模型表现得好,什么情况下不行
  • 可以快速地循环反复上述步骤

为什么这很重要?因为这决定了你是可以三天做一次迭代还是三周做一次,还是三个月

机器学习有其玄学的一面。面对这种不确定性,一个粗暴却有效的手段就是多试,快速迭代。但很多人根本快不起来。他们把大量时间浪费在了setup和等待上。setup数据,setup模型的训练,等待模型的训练,setup实验,等待实验的结果。

如果你迭代的周期是别人的五倍,那你需要比别人准五倍才能拉平。这还是假设大家都是单线程的情况下。如果别人的工具足够好,可以同时起五个实验,你要怎么办,比别人准二十五倍?

实际工作中,我见过弱团队用好工具,却没见过强团队用差工具。

Best Engineer Builds Tools.

理解模型的基本假设,看自己的数据是否符合这种假设。任何模型都是有某种假设的,如果数据不符合这种假设,就不太可能学出有意义的模型并用于预测。

比如LDA(主题模型),假设是在同样一批文档中经常共现的词,语义上往往是相关的。这种特性不仅在自然语言中成立,在一些领域,比如每个人经常访问的网址集合,可能也是成立的,所以LDA也可以拿过去用。但如果数据不符合这个特性,套用LDA就是没有意义的,比如每个球队里的队员,可能并没有因为属于一个球队而具有什么相似性。

再举个例子,CNN(卷积神经网络),它的基本假设是特征的不同维度之间有局部相关性,卷积操作可以抓住这只局部相关性,形成新的特征。比如自然语言里,有重复出现的bigram,或者图像里代表性的局部像素块。不满足这种局部相关性的数据,比如收到的邮件序列,这种局部相关性很弱,那用CNN就不能抓到有用的特征。

最后,高斯copula,在量化金融里曾被广泛使用,把债券之间非高斯的相关性用copula转化成高斯然后拟合。然而这个模型隐含的假设是这种相关性符合瘦尾分布(thin tailed distribution),即罕见事件发生的概率非常非常低。这个不合理假设导致对黑天鹅事件概率严重低估,曾被视为2008年金融危机的根源之一。