近几年来,“大数据”和“机器学习”的浪潮越涨越高,伴随而来的则是同样如潮水般的机器学习论文。各大会议上灌水的文章越来越多,相关从业者挑选有用论文的难度自然也更大,很多包括我在内的机器学习开发人员因为平时时间有限,面对着每年成千上万的文章没法一篇一篇仔细地去看,有时候看完了一篇论文才发现一点卵用都没有,时间白白浪费了。然而看了这么多没什么卵用的文章之后,我发现90%以上的文章都存在一些共同的问题。
不管黑猫白猫,能抓到耗子就是好猫。不管什么模型,是不是deep还是做了多么复杂的神经网络结构,效果不好也是白搭。然而大多数情况当我兴致勃勃地好不容易看到了模型评估对比(Evaluation)的部分的时候,都总是不禁有一种“老子裤子都脱了你却给我看这个”的感觉,为什么呢?具体有以下几种原因
你的对照模型(Baseline)调好了吗?
啥是实验组啥是对照组相信大家中学物理实验都学过,机器学习本来也算是科学的一部分,科学就要讲究严谨。奈何最近这门学问越来越像玄学靠近了,大家做实验最后都只看缘分图个开心,结果你是做开心了,我看的时候一脸懵逼。我经常看着论文里的实验数据表格产生一个哲学思考,作者到底有没有认真调Baseline?很多学术界的文章为了发Paper结果自己胡搞了一套结构出来,然后拉几个现在比较火的模型出来当Baseline,结果发现,擦,好像没什么提高啊,然后玩命调自己新模型的参数,调了一个月终于调好了,比对照模型高了那么0.001 AUC,然后美滋滋的发文章去了。但是Baseline基本没调过或者没认真调过,两个模型放在一起根本不具有可比性。这就好比你想比较跑步和骑车哪个快
对照组:一个75岁的老大爷骑着一辆破自行车骑了10分钟
实验组:奥运短跑冠军跑了1分钟
结论:跑步比骑车快
做过机器学习调参的人都知道,选对了特征和模型有时候只是成功的一半,合理的参数和模型结构的细节的设置往往会起到很关键的作用,尤其是进入深度学习以后,可调的东西也越来越多,很多文章只字不提对照模型的参数信息,有的就算提了,你也不知道作者是不是认真先把对照模型调到最好了。
你有做过线上实验吗?(Online Metrics)
接着上面的话题继续说。实验结果里面还有一个特别有迷惑性的地方就是实验本身的可参考性。啥意思呢,简单来说就是线下实验和线上实验的区别,做过推荐系统或者广告推荐的同学应该很清楚,线下结果和线上结果的差异(Discrepancy)会随着系统的复杂度上升而变得越来越明显。换句话说就是你线下操作一通猛如虎,结果线上真正应用了一试结果没啥效果,或者是线下有的反而更差的模型线上反倒更好。举个例子来说,如果说模型是格斗的话,线下测试就是套路表演,线上测试就是肉搏,练格斗不就用来打的吗?肉搏能赢才是真本事,只是耍得一套好套路并没有什么卵用。太极屌还是MMA猛找高手过一下招才知道,光嘴炮是没用的。
这种差异究其原因是数据分布的差异问题。线下终究只能做模拟,无论是训练数据还是测试数据的分布和真正线上数据分布是不一样的,我们见过太多这种例子了,所以最终都要以线上结果为准,线下只是做个参考。然而很多文章,首先学术界的没条件做线上,其次有些就算是工业界的文章也不发布线上数据,这就很令人生疑了,不得不怀疑模型本身应用到产品之后的效果。
这里不得不提到工业界文章的特点了,那就是纯结果导向,这也恰好可以解决之前提到的对照组模型的问题。工业界的对照组基本上会有本公司当前Production的模型,这个一般是之前很多工程师调好的比较好的模型,所以对比起来比较不会有之前提到的问题,因为如果只是调参数能有更好的结果,那早就有人去调了。
一个很残酷的现实就是,90%的机器学习文章就是毫无意义的,文章作者本人都不一定知道为什么这个改动会有更好的效果,大多数只是不同想法的排列组合,得到一些看似有提高实则在误差范围以内的实验结果。希望广大从业人员还能擦亮双眼,去伪存真。