前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法在岗一年的经验总结

算法在岗一年的经验总结

作者头像
Sam Gor
发布2020-01-15 16:37:58
3390
发布2020-01-15 16:37:58
举报
文章被收录于专栏:SAMshareSAMshare

【ML&DEV】

这是大家没有看过的船新栏目!ML表示机器学习,DEV表示开发,本专栏旨在为大家分享作为算法工程师的工作,机器学习生态下的有关模型方法和技术,从数据生产到模型部署维护监控全流程,预备知识、理论、技术、经验等都会涉及,近期内容以入门线路为主,敬请期待!

往期回顾:

  • ML&DEV[3] | 机器学习入门线路
  • ML&DEV[4] | 机器学习进阶线路
  • ML&DEV[5] | 系统理解特征工程
  • ML&DEV[6] | 算法工程师 Linux必知必会
  • ML&DEV[7] | 浅谈算法工程师的工程能力

说起来今天还是一个有意思的日子,去年在美团实习,离职的时间也是12月7日。

算起来,自己的算法在岗应该也有一年了,在美团担任算法工程师大概有7个月,OPPO加上实习,估计也一年多吧,时间过的好快,这周末给大家谈谈我的感想吧,相比各位大佬,我的经验尚属稚嫩,但是也希望能给一些准备入行的、刚入行的人一些经验和建议吧,相关文章其实我也聊得不少,这里有部分重点我可能还会聊到,但是不见得都会说到,所以可以看看我以前的文章:

我从研究生生活中得到的经验

NLP.TM | 我的NLP学习之路

懒人目录:

  • 算法工作的一天都要干什么。
  • 特别的经验。
  • 有关学习。
  • 写在最后。

算法工作一天都要干什么

很多人可能再想想着每天在研究模型,看论文,实现模型之类的,这方面虽然非常重要,但是实际上并非如此。每天这些时间会花的更多:

  • 和产品沟通,技术方案设计。
  • 数据层面花费的时间最多。
    • 需要什么样的数据。
    • 写SQL。
    • 检查数据质量,空的、错的、不合法的。
    • 特征工程。
    • 有监督学习,需要标注数据,怎么标,标注本身是否可靠。
  • 模型选择与开发。这块可以这么说,随着工作经验提升,这块时间会越来越少。
    • 模型选择的话,把问题抽象出来,其实都比较好选,第一版模型一般是业内基线或者最简单的模型,像我,二分类先搞LR(logistic regression),序列标注就是CRF。
    • 模型开发也基本不耗时,LR和CRF之类的其实都有现成的东西。
  • 结果分析和诊断。
    • 不生效的原因是什么。
    • 怎么解决。
    • 模型层面还是规则层面解决。
    • 解决方案的影响面是多少,会不会导致出现新的问题。
    • 评价指标设计。
    • 分析上述模型是否生效。
    • 上面都是自评,可能还要交给测试、产品之类的评价。
  • 工程化上线。
    • 模型上线,需要特征生产、AB实验、部署之类的操作。
    • 如果你熟悉在线跑的代码,例如Java、c++之类的,这块的时间会比较少。
  • 提测,提交给测试人员测试。
  • 评估上线。

这是一个算法工程师基本的工作内容,当然的,会随着你的业务不同会有一些不同,但是点上都是一样的。

特别的经验

工作也一年了,有一些比较有意思的经验。

  • 规则应该首先使用,保证高准确,模型后续补充来提升泛化能力。
  • 模型不求高端,只求实用和稳定。
  • 与科研不同,很多时候科研只关注召回准确之类的指标,但是在现实应用下还需要考虑耗时、内存之类的因素。
  • 把自己做的东西尽可能工具化,哪怕是保存下来,日后可能还会用。我也举几个例子。
    • 日志工具。
    • mysql登录工具。
    • 数据清洗工具,删标点,拼音转化,繁体转简体等。
  • 特征工程的操作要多学学。有的时候对这些操作的理解依赖于你的数据敏感性。来举几个例子吧,这些都是在我工作的现实应用中有遇到的。
    • 为什么数据有的时候要取对数。
    • 调和平均、算术平均等平均计算有什么本质区别。
    • 归一化有什么用,行归一和列归一。
  • 不懂的问题,过一遍百度、谷歌、github、知乎再说。
  • 坚持看论文,也别忘了最好还能看看源码,有大量的东西在论文里面不会提到,只会在源码里面体现。
  • 复盘,会让你的经验更不容易流失。俗话说好了伤疤忘了疼,为了避免踩过的坑不再踩,必须经常进行复盘。
  • 快速学习,工作导向,干完活后续整理的时候再来完善系统的学习。
  • 严谨点说吧,干活的时候本想着高大上。
  • 时刻记住,你做每一件事情的目标。
  • 说几个细节经验吧。
    • 另外解决线程不安全的方法,还有一个比较丑的操作是创造和线程数一样多的模型,这样能解决,但是内存就会成倍增加。
    • CRF++的线程不安全,主要因为很多中间变量都会存在CRF自己的model类里面,所以要保证线程安全,必须把计算过程的中间变量保留在特征类里面,不能放在模型类里。
    • LR、CRF之类的计算耗时都不长,RNN系的耗时会比较长,甚至比transformer还要长。
    • 善用数据结构,能让你的计算效率成倍增加,近期的经验就是trie树和最大逆向匹配。
    • 留意内存泄漏、内存复制之类的问题。
    • libsvm格式存稀疏数据。
    • mapreduce操作大数据量非常方便,可以经常用。

从工作回头看面试

  • 简历上有东西,那就会针对你的经历去问,事无巨细的问,所以写上了就要做好被问的准备,不会答还可能会被冠以不诚实的罪名。
  • 造飞机是一定会造飞机的,面试内容不见得100%和工作内容有关,但也不见得就100%无关,一定是很贴切的,毕竟和工作相关的才是面试官需要的。
  • 和打游戏点技能一样,不能每个技能点一下,而应该有专长,虽然可能会缩小你找工作的口径,但是找到不被拒的概率高。尤其是新手,要有你擅长的点,例如你对文本分类很懂,对序列标注很懂之类的。
  • 前沿的东西,不要说完全没听说过,大概的还是要知道点的。
  • 经常会问一个具体问题,你要怎么解决,这需要你对整个算法问题有一个完整的思路套路,而且要想的细致,例如小到用什么特征,特征体系是什么样的。
  • 算法现在似乎并不比其他技术岗高,重点是你的技术要够强。

有关学习

大家可以看到我的持续学习,后面大家问到我很多有关学什么、怎么安排时间之类的,我在这里也和大家谈谈。

  • 安排时间。每天都有安排特定时间学习,1个小时吧,然后中午午休我一般只睡半小时,剩下的时间会拿来学习。
  • 学什么。一方面根据业务本身,这个优先级比较高,未来业务或者近期业务需要做什么事情,那我们就要提前学;第二优先级就是你要加深学习的知识点。第三优先级才是前沿论文,尤其是一些已经被广泛传播的,例如近期的BERT之类的。
  • 资料从哪里来。第一优先级的东西,一般都是比较浅显的技能类,这个百度、谷歌、github、知乎之类的即可找到;第二优先级,论文、github。第三优先级,多看微信公众号、知乎、AI研学社、paperweekly之类的文章吧,他们会告诉你该看什么,另外多关注学术界。

写在最后

写在最后的是感谢吧,感谢之前所有老东家现东家的同事、导师各种,没有你们的帮助,我不会这么快成长起来,当然的,包括成长路上的各位老师,还有一起奋斗的舍友、同学吧。

日后我还会继续努力。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAMshare 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法工作一天都要干什么
  • 特别的经验
  • 从工作回头看面试
  • 有关学习
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档