这个标题是不是很吸引人?想了我老久了,不过大家放心,绝对不是标题党。这个东西想了很久,也算是有了一些突破性进展,和大家分享下。
先聊过去
熟悉我多少知道我的历程,本硕数学统计,技术自学,大四整了波《统计学习方法》,然后又有一些深度学习的自学(淘宝),python看的廖雪峰,黄文坚的tensorflow,结合一些论文加《统计自然语言处理》,基本就是靠这些资料一点点看过来了。和现在相比,当时可以说资料非常少了,不过正因如此,自己得以坚持独立思考,探索自己的成长之路。
阶段一:夯实基础
数学系出身让我在数学基础上几乎没有障碍,说实话,数学基础扎实真的能让我在理解算法的原理更为深刻,更容易内化,为我后来更灵活的方案设计能力带来很大帮助,而不简单的是背诵而已(不过有一说一,当时实变函数之类的真的是背的)。
开发能力的话,虽不是科班出身,但是一些自己主动争取的项目经验还是让我成长了不少,我在大学先后参加了几个项目,至少基本的开发能力有,一些编程的感觉也比较好吧,大一的时候我就考上VB二级的证书,c 、java不说精通,至少是看过吧,良好的开发基础让我额,校招那会的算法题即使没怎么刷,至少在考试的过程能给出一个能跑通的方案(不至于0分吧),其实算法题就是考验编程能力和程序设计能力,说白了就是把想法细化为代码的能力。
剩下就是一些机器学习基础了,反正上面说的书我都是有认真啃的,认真啃完的收获是真的大,现在和很多人交流,其实确实很的一些东西真的是就能在这些材料里看到,很多以为自己看了论文发了论文就很厉害,其实好很多深层次的、基础的,现实用到的反而不知道,不说找工作,说找到工作后开展工作,感受会很深的。
扎实的基础是走远走深的必要条件。 出来混,迟到要还的。
阶段二:真实的落地进阶
其实学完整本统计学习方法的时候,我一直在问自己的一个问题:我知道这玩意很厉害,但是我学这玩意能干啥?后来我知道了NLP能落地,能分析文章,于是有了后年的NLP之路,虽说机器学习方法现在不是NLP的主流,word2vector都让人看不起,但在当时使用人工特征 机器学习同样能很好的解决这种文本分类问题,这里让我收获很大,也找到了自己技术成长的突破口,空有一身能力,不知道这个能力是什么,怎么用,此时应该主动去找活,找老师做科研,找实习,找比赛,找开源项目,了解这个世界需要什么东西,自己又怎么会用这个东西来改变哪怕只是自己身边的一点点,此时,你又会有新的思考。
学完了东西,要想突破的关键途径就是——用!
做科研,知道现在的科研难题是什么,去实习,知道现在工业界都在用什么而我不会,去比赛能知道怎么让自己的方案尽可能达到极致,去找开源项目能知道大佬们真正都在干什么。
当走出去,知道外面的世界,也不容易让自己陷入“天朝上国无所不有”的盲目自恋中。
另外一点是,落地进阶开始,会有大量的算法本身之外的人和事需要开始处理了,产品、工程的对接,服务打包、数据管理、运维监控,项目管理,自2018年开始实习以来自己就开始有意识地开始学习各种工程技术,开始锻炼自己的沟通能力,在2020年,自认为有了不小的进步。
算法工程师首先是工程师,工程师首先是人。
阶段三:跳出模型
我和很多学习算法的人一样,会认为模型就是一切,各种模型如数家珍,和后来工作后逐步发现:
- 一个LR很可能就能追平飞机大炮。
- 加规则是最快解决bad case的方式。
- 数据不好,神仙模型也没用。
- 神仙模型的性能根本就不过关。
因此,自己开始去探索,什么样的方案才更适合,尤其是模型之外的方法,后来慢慢在模型和非模型方案之间找到了一些权衡的思路,从bad case上去挖掘自己应该在模型的基础上能做优化的方向。
模型,尤其是大模型,不是解决问题的唯一方案。
阶段四:模型和非模型的权衡
这应该是2020年我所能达到的一个最后一个阶段了。
模型不是尽善尽美,规则也不是,两者的有机结合才是更好的解决问题,模型能覆盖大部分的情况,规则再根据一些特定的问题进行快速解决,此后,规则可以尽可能抽象逐步融到模型里面去,例如一个根据某些性质做的if else可以通过特征的方式加入模型,一些根据用户行为历史的方案,可以通过特定的特征积木加入到模型中,例如用户点击序列可以转化为word2vector特征,但另外规则词典的维护仍要保持,对于在线的风险状况,我们仍然能通过这个角度来快速控制,整个系统能稳定高效地运转起来。
模型和非模型,是存在桥梁,互相转化互相补充的。
2021年:走出自己的路
简单总结下“走出自己的路“的深层含义:
- 新旧、强弱方法兼容并包,深入理解内化于心。
- 因地制宜,根据方案综合选择方法。
- 要能因地制宜的前提是,对“地”有充分的理解,即问题的理解能力。
说个例子(首先说明没有黑的意思),很多人可能会吹说阿里提出的推荐系统模型很厉害,说实话是真的厉害,能考虑用户各种行为特点,表征后用于ctr预估等问题下有很好的效果,于是很多人开始用,然而很多人可能会说效果不好,经过一些讨论发现,其实效果不好不一定是阿里的结果小动作,更多的其实在于很多场景对应的用户,不具备这些行为,或者用户数量不足,导致这些行为特征没有体现,或者说当前产品的主要问题不在这种特征下,那用这个模型、用这个特征提取方案没用不就很正常了吗。看完这个例子反思一下,我们在解决一个问题之前,有没有对问题有充分的理解,有没有对想用的方法有充分的理解。
“黑猫白猫,能抓到老鼠就会好猫”,这是厉害进程探索者的智慧,没有说老方法就不好,也没说新方法就要拒绝,作为一名优秀的执行者、开发者,我们自己的修炼应该是让自己的手段保持先进,这个先进不等于“新”,而是我们的方案能持续保持“最好”,这个优秀一方面要求我们对自己手上的方法有足够的理解,知道什么是最好,保证拿出来的都是最针对问题的解决方案,而非炫技的、顾此失彼的,另一方面我们要持续保持领先,新方法我们要学习,所谓“内化于心,外化于形”就是这个意思,切不可纸上谈兵。
截至2020年,我做的不错的是,为了让自己能更稳定、更快地解决问题,我对自己的修炼更多聚焦在“解决问题”上,一个问题有了方法可以持续更新,但是问题却不见得能常常有新的,于是方法可以无限的深入研究,但是我们日常的问题解决并不要求我们做到这个极限,因此我们只需要保证一个“基线”即可,以此我学习了大量的“基线”方案,保证自己能在从0到1的时候,快速让效果达标快速推上线。
但是2020,我没有持续更新自己的方法,打打苍蝇算是得心应手,但是屠龙的神技掌握的不是很优秀,很多很强的屠龙之技我没有尝试过,这导致自己在从1到N的水平不足,自己的上限不够,因此我后面还是需要去学习和尝试。
但是,这种尝试不意味着我会抛弃原有的东西,而是把屠龙之技融入到我的方案体系中,屠龙方案有屠龙方案的本质,不代表屠龙的方案就一定不能拿来打苍蝇,打苍蝇的方案也有屠龙之技需要参考的优势,两者融合内化于心才是关键。
在这里再聊一个点,就是何为前沿,包括很多研究生在内,其实很多人没有所谓“前沿”的思维会和勇气(可能说的自己有点狂...),所谓的前沿肯定是走在前面的,走在前面意味着没有人,自己走的每一步都是探索,谁都得自己走,这就是前沿,跟的人多了,这个方向你就成了领先,因此,要想持续成长,找到自己合适的方向走就是了,不要看什么东西大家做得多,用的多,随大流永远无法做到领先。
修炼方案
列一下2021的修炼方案吧:
- 论文的阅读是算法工程师的必修课,论文是要持续读的。
- 多了解业界的关注点。虽然要走自己的路,但是了解大家的关注点,互相学习启发才能进步。
- 保持交流和输出,互相碰撞、互相切磋是提升的重要手段。
- 打开思路,要把坑挖的深,可以尝试先把坑挖大再来挖深。
- 内化,可以拿来,但是一定要懂,这是对自己负责,对未来要遇到的问题负责。
上面看着像是废话,但是感觉理解又会有些不同。持续修炼吧,自己还年轻,还有机会成长,还有机会证明自己,那就把握机会,逐步成长为一名成熟、能独当一面解决众多问题而又有深度、有沉淀的算法工程师。