机器学习项目经历的若干感想
最近一个朋友组织了一个关于数据科学和机器学习的学习交流小团体。第一轮,大家轮流介绍自己的入门经验以及一些感想。
既然在交流会中分享了一些感想,不如写下来。感想这种事情很有意思,今年这个感想,明年就不一定成立了,写下来,以后回头看看应该挺有意思的。
基础知识是非常重要的。比如说各种超参,激活函数,损失函数等概念的定义,ROC和AUC可以做什么,数据分层采样有什么好处,为什么需要交叉校验等等。当然,许多基本知识我自己也是没有掌握,并且一直因为没有掌握而suffering。前不久,面试一个Junior的Data Scientist, 问他觉得工作上有什么challenge,他说很多模型的超参不知道什么意思,不知道怎么调。基础知识没有掌握带来的实际问题。现在有很多模型框架,封装了很多细节,对于训练模型的Data Scientist来说,可能只要会喂数据就可以了。自动化激活了惰性,只要模型可用,并不是所有的工程师都会去掌握背后的故事,毕竟这并不都是一个生动有趣的过程,所以缺乏基础知识的Data Scientist也是四处可见。数据科学近十几年来非常的活跃,各种SOTA(state_of_art)的模型让人眼花缭乱,并且有这样一种气氛,以知道还是不知道SOTA来判断水平高低,这真的是大错特错。
一个模型能否商用,细节非常重要。大部分的Data Scientist只关心一个模型的质量,预测的准还是不准,可能花了大半年一年来来提高两三点的F1,但是一些细节问题因为早期被忽略,最后反而成了商用的阻碍因素。比如说进入模型前的数据预处理速度。这里为什么我不提模型的预测速度。当一个模型被提出来时候,它的计算量是多少,基本上可以算出来,而且特定模型都已经在c这一层优化过了,所以使得计算量最大的模型预测部分变得可控。比如说BERT Base的计算量,蒸馏过的BERT的计算量。而从原始数据到可以喂入模型的数据,可能需要很多的预处理,一个实现上的不简化或小bug都可能使得计算量比模型预测本身还大,这种问题也是屡见不鲜。对于实时性要求比较高的应用,或者说模型需要跑在硬件性能有局限性的嵌入式设备上,这可以说是致命问题。另外一个很有意思的细节问题就是从biz value角度来说,无法接受的错误预测,可能会是个上线的阻碍。比如说人脸识别中,公交车上的董明珠海报,导致了董明珠在闯红灯榜中,位居榜首。即早的搞清楚biz values可以说是项目成败的关键因素之一。
集成越早做越好。机器学习项目与传统软件项目一个明显差别是,很多的模型是从实验室训练出来的,然后再部署到产品中去。前一条提到,细节决定成败,很多的细节在实验室可能会被忽略或者不够重视,只有即早的把经脉打通,才会暴露可能的致命细节问题。
亲近数据。数据的重要性包含很多方面。数据是否有代表性,数据量是不是足够,数据是否准确,数据是否还准确,这些数据问题,大家估计都很清楚。但这一条谈论的是必须close to data。Data Scientist大多畏惧去看数据,常见的是,从统计学的角度做一些不痛不痒的plot,但抽样一些数据来斟酌,并不是那么常见。但其实,细看样本,会发现,数据和想象中的不一样,比如说会发现标注工程师们标注的guideline和你理解的不一样,这些对于模型的质量有很大的影响。如果去看数据,这些问题很容易被发现,但为什么Data Scientist这么畏惧看数据呢。根据我的观察,和一些Data Scientist的对话,以及自己的猜测,我觉得很大的原因是对领域知识不了解的畏惧。比如说我现在所处的是法律领域,数据都是涉及到法律条款,一想到这个,大家估计都不太想看了,看不懂啊,怎么看。对于医疗,保险,生物,物理,天文,如果不了解domain knowledge,畏惧看数据是很自然的事情。但如果真的看进去,会发现,很多的错误根本还不需要domain knowledge就会被发现。对于错误分析也一样。很重要的错误分析,由于对domain knowlege的畏惧,导致踌躇不前。
是否有同感?
阅读作者更多原创文章,关注微信公众号: