【ML&DEV】
这是大家没有看过的船新栏目!ML表示机器学习,DEV表示开发,本专栏旨在为大家分享作为算法工程师的工作,机器学习生态下的有关模型方法和技术,从数据生产到模型部署维护监控全流程,预备知识、理论、技术、经验等都会涉及,近期内容以入门线路为主,敬请期待!
往期回顾:
所谓算法,所谓人工智能,很多媒体,或者是一些教程,甚至是现在的主流论文,很容易地会把大家的思路带入到各种深度学习(没错,机器学习都已经out那种)等之类所谓比较高端的东西去了,于是大家会花很多时间在模型上,无论是学习本身,还是在日常工程中,在一些实践中,我逐步想明白,模型固然重要,但只学模型,翻翻论文,读读博客,只能让缓解我们对知识的焦虑,能让自己觉得“我的水平提升了”,但是是否真的提升了,这个事情要好好想想。
自己本身也不是高手,想很多前辈讨教学习中,下面是一些自己的思考,欢迎大家补充和指教。
模型的选择能力
在现实场景,在确定需要建模的场景,众所周知好的模型选择会让我们更快更好地解决问题,然而问题在于,怎么根据现实场景选择模型,这就是一个非常复杂的问题。
慢慢来拆解问题,首先是,我们怎么识别这个场景的特点。因为我们识别场景特点是为了模型服务的,所以我们往往需要对模型有充分的理解,再来识别在这个场景。例如性能(时间和空间)、特征是否交叉、时间序列依赖之类的,特定问题下,例如NLP,长短文本、任务类型、语言特点等,推荐系统则更为复杂,召回排序阶段、长短期兴趣、特征形式等。
识别场景后就到模型了,模型的选择一定是基于问题的特色的。特征交叉切勿维度较高就要考虑一些类似FFM之类压缩的方法序列依赖则要用RNN、LSTM之类的内容,或者是采用一些positional embedding的方法也行,超短文本的序列信息不足可以考虑小模型之类的,产生一些类似词典的作用。
这是一种内功,很吃经验,但是更多的还是大家要多看论文和学模型,学模型要学到家,一方面是要知道模型的原理,另一方面是要吃透模型的优缺点,工具都是有他的适用范围、优缺点的。
模型之外的方法
之前是写过一篇有关模型局限性的文章:ML&DEV[11] | 浅谈模型的局限性,根据现在的经验来看,很多人上来就是这模型那模型的,很大程度上这个人只会模型,没有别的方法可以解决问题了,这就体现一个人知识的匮乏,这个事情就和医生只会开刀切除是一样的,一个小感冒其实没必要开刀,一个系统下的一个小任务或者需求其实一个规则就能解决,何必需要模型呢。
规则是模型之外很必要的解决方案,但是问题在于规则这个东西难以写进教程,因为他对业务的依赖很强,是需要根据问题去总结归纳的,这是其一,其二就是经验,说白了就是对现状的敏感,什么样的规则,设计影响面有多大比较合适,最终能产生什么效果,有什么风险,能预估到,那就能设计好的规则。
知道要做什么
在一个系统下,除了接产品需求,剩下的其实就是算法自己要使出浑身解数来优化特定的指标,点击率、GMV之类的,包括我在内其实很多时候都会比较懵,不知道该做什么才能提升效果。
首先,要对整个领域的常规操作有一定的理解,可能比较深的,例如推荐系统,业界的常规操作会让你去关注用户的兴趣,不同时间跨度可以考虑;冷启动物料和用户有没有服务好,之类的,这些应该指导自己思考优化方向。
然后,要有一些分析能力,预判收益、策略覆盖率,某件事情决定做之前,是最好都有比较准确的预期,这也是很多算法会说自己是“sql工程师”的一大原因,数据分析是需要和sql大量的打交道的。
规划
人无远虑必有近忧,做一整个项目,除了做短期的任务,还需要对长期有一定的规划。
迭代更新有一定的节奏,无论是从产品层面、用户感知层面等。
项目前期有大量的基础工作等待开发,但是功能又要迭代,此时两者并行能保证对外效果,对内技术债的减少。
减少重复性工作,用了模型A以后,后需要模型迭代成B,不需要所有代码推翻重来。
优先级调整,前期用户量不大,性能压力不大,但是发展到一定程度后,性能压力就会成为主要问题了,需要进行升级改造。前期用户行为较少,可以使用一些跨度较大的长期兴趣,后续用户行为多了,短期甚至超短期兴趣就可以开始进行探索。
规划的视角,在我现在看来是这些吧,可能还有更多,我也要持续的学习。
数据分析能力
虽然不是专门的数据分析,但是在项目进行的各个过程,都需要算法自己来做很多的分析工作,举几个例子:
探索型,衡量某个策略的预期收益和成本,看看有没有做的必要。
离线分析。模型和策略的效果如何,是否可以上线。
在线分析。策略上线后,AB实验下效果如何,是否扩量或者全量等。
而且,这个分析往往只有自己清楚要做什么、怎么做,这些数据背后反馈的问题是什么,口径上有没有什么问题,这些都是非常需要具备的。
工程能力
老生常谈,之前也专门写过这个问题,不再赘述:ML&DEV[6] | 浅谈算法工程师的工程能力。
其他相关技术的跟进
算法本身只是系统的一环,在做这些的过程,我们其实要关注很多与我们相关的基础工作,这些工作是肯定需要我们来推进的,这些我们应该尝试了解、关注,甚至是,我们要知道做什么,怎么做,才有利于整个系统的推进和迭代。
大数据处理,hadoop、hdfs、hive方面的技术工具。
用户行为埋点,尤其是埋点的原理、时机和口径,埋点埋不好直接导致算法不可用。
实验平台,AB实验。
监控和告警。
离线和在线的特征生产,需要快捷方便。
模型相关的引擎,模型服务、热更新等等。
小结
最近接触一些项目,需要去协调不少东西,开始自己有很多焦虑吧,感觉这些协调对个人成长没有什么好处,甚至在拖后腿,但是后来和很多人沟通交流,发现自己其实是在新的方向有了更多的进步吧。当然的,自己的持续学习也没有让自己在原有的模型理解方面落后太多,紧跟论文前沿,坚持学习是自己持续年轻的保温剂,这个习惯还是要持续保证,大家共勉~