其实这个题目其实早就想探讨一下了,因为工作有时候会在这件事情上花费很多时间。这两天坐着思考了一下,这个问题其实应该分几个维度来讨论。
当然,这里只讨论工业界。
区分目的
首先需要明白,你是要做什么,是要快速落地,还是提升模型效果,还是讲故事,还是做算法可行性研究,都有不同的套路,以及工作中各种形形色色的约束。
讲故事--PPT型
工作中,总要给客户或者领导讲各种的故事,做个看起来fantastic的ppt,以前还没工作多久的时候,对这种事情嗤之以鼻,现在啊,赚钱嘛,不丢人。
因为现在不像以前,故事不是带有AI,听众就使劲鼓掌,让人信服。时代变了,还是得拿点东西出来给别人看的。如何讲一个好的技术性故事,根据我的经验,一定要在吹牛逼和实用性和普及性中间平衡。
举个例子,NLP相关的任务,你给别人讲故事,不要一开始就把rf,word2vec就掏出来,你得讲Transformer,elmo和BERT,但是你又不能讲GPT-2和ERNIE2这种最新模型。
不是因为GPT-2和ERNIE2不好用,甚至ERNIE2对于中文的效果是非常好的,而是说这两个模型对于专门做NLP的人熟悉且好用,而Bert这个名字流传度更广,业界出的成果更多,开发起来更便捷(github上的各类demo源码更多,便于落地),但是相对于word2vec这种老古董更先进。
综合这样,东西可以落地,效果也查不到哪里去,又是业界较新生产力,这个故事还是可以给你别人的。当然,只能是给别人看看,真正落地又是另一件事。
预研--研究型
工作里面,算法可能遇到瓶颈了,可能是性能太差,不满足生产,可能是准确性上不去,效果不好,就需要搞研究工作了。
研究工作模型是一个纵向的,不能一味的把模型往深了做,而是不同深度各出一个结果。
举个例子,现在我的工作是一个时间序列预测的工作,数据充足,特征管够,不缺人力,算力拉满(多么理想的工作环境),一开始是接到任务,首先深度学习整起来,简单的CNN和LSTM来一套,往深了搞,也训练出来了比较好的效果。嗯,我很满意。但是这个工作是与硬件相关的,硬件上给分配了30M的内存,深度学习的模型都加载不了。好的,前期工作白费。
换模型降维,普通的网络搞一下,xgboost和adaboost,其实都可以做,但是这个时候还不够,我们最后选择了的模型是用信号频率分解+线性拟合。
为什么这么选,网络和xgboost的效果还可以,但是效率低,当实时数据量非常大的时候,还是有点慢的,adaboost(回归树)效率可以,但是效果又不好,最后我们选择了一个比较简单的模型。
所以,搞模型预研,一定要做成一个纵向,不能一直往深了做,也要回头看看,也许有更好的选择。合适才是最好的模型。
实干--落地型
模型要落地,重点应该关注在生产中的约束条件。
- 监督和非监督,考虑人手够不够,训练需要投入的成本,优先选择监督。
- 深度学习和机器学习,考虑算力和效率,算力充足,性能要求不高,优先选深度学习。
- 深度学习新模型和旧模型,不要选最新模型,选最流行的模型,因为最新模型是学术界做的demo,面对SOTA做模型。就算效果好也要等网上资料足够多了(github上的开源demo足够多)再考虑换模型。
- 选择机器学习模型,考虑任务。如果分类,优先考虑随机森林,xgboost和SVM,SVM性能最好,随机森林最平衡,xgboost效果最好。如果回归,线性拟合,SVM,xgboost都可以用。
一点感悟
训练了这么多模型,其实最后发现,有些模型,在数据较好的情况下,效果差不太多,准确率就是那几个点的事情,不超过5个点,特别是深度学习。所以不要觉得换了一个模型就可以大幅度提升。把数据选好才是最大的提升空间。
而实际情况是,一个模型或者几个模型并不能解决业务的问题,需要一套组合拳。最常见做法是,先做预处理,排除最明显的,再跑模型(组合模型),最后做后处理,这才是效果最好的。
今天就到这,有什么问题欢迎交流。mail: chinwu@126.com
网友评论