公众号原文:【R言R语】算法工程师入职一年半的总结与感悟
【R言R语】栏目专注于分享Rocky的一些思考。关于AI行业的思考,将是本栏目的核心,除此之外,其他有价值的事物也会在这个栏目中呈现,欢迎大家一起交流学习💪,分享宝贵的ideas~
大家好,我是Rocky。
将近一个多月的高温天气终于在大雨中离开,随之而来的是微凉的秋风与骤降的温度。
在感受秋高气爽的同时,也感叹“原来已经到九月初了”。Rocky觉得确实到了一个时间节点,安静下来,复盘过去,想想未来。
故撰写本文,讲讲Rocky正式工作一年半的总结与感悟,以及未来的一些计划与愿景。送给自己,也送给大家,希望我们能一直怀着赤子之心勇往直前,疯狂生长。
So,enjoy(与本文的BGM一起食用更佳哦):
业务侧的总结与感悟
竞赛侧的总结与感悟
研究侧的总结与感悟
产品侧的总结与感悟
后续规划
学生时期Rocky在国企,传统IT企业,硬件大厂,独角兽,互联网大厂里进行AI项目的开发与落地;正式工作以来,Rocky主要负责提升业务场景中AI算法模块的综合性能,并和上下游部门一起参与AI算法解决方案的开发与优化。
算法模块的综合性能包括泛化性能,稳定性,安全性以及特殊Bad case的解决。
算法解决方案的开发与优化,就比较宏观了,主要包含场景侧,数据侧,用户需求,模型侧,部署侧以及多部门的协调沟通合作。
乍一听是不是比较抽象,don‘t worry,下面Rocky将逐一剖析。
首先,Rocky想聊聊数据侧,场景侧以及用户需求这三个维度。这三个维度是算法解决方案的起始,也是最关键的部分,正所谓“谋定而后动”。业务场景定义机器学习问题,数据侧不断去逼近这个机器学习问题的真实数据分布,而用户需求为我们指明了切入点和优化方向。
这里涉及了很多细节问题,需要我们进行不断复盘与优化:
第一个是业务场景如何定义,一个大场景中,是否需要分成多个小场景任务?用什么逻辑去分?业务场景在不同干扰因素如噪声,光照,角度,天气等影响下,是否需要进行特定的约束定义?
第二个是在数据侧和业务场景做关联的时候,定义的业务场景能否与采集的数据分布适配?数据侧能否源源不断地提供数据支持,并不断逼近业务场景中真实数据分布?是否需要合成数据?数据采集的姿势合适吗?
第三个是在用户需求和业务场景做关联的时候,如何定义用户需求?和产品去讨论的时候,在大家的认知不一致时,其实共识是很难达成的,比如如何定义什么是“识别效果好”,可以是实际指标,也可以是用户满意度,并且每个人心中的评价标准都带有一定的主观性。还有用户需求是否和业务场景适配?是合理的吗?
第四个是数据侧和用户需求做关联的时候,用户想要达到的效果,数据里能体现出原先场景中的bad case吗?比如想要在森林中提高某个物体的识别率,但是可能数据里根本就没有这个物体。用户需求是一次性需求,demo需求还是长期需求?面对不同需求,数据侧的支持力度需要进行相应的调整。
总的来说,这几个维度最重要一个点就是降本增效,场景侧如何快速理解场景特点,并定义问题;数据侧如何降低数据支持成本;用户需求侧如何降低沟通成本,快速达成共识。
这些能力都需要不断在现金流业务中打磨,需要持续的深耕和思考。一次性业务,demo,无商业模式业务都是需要规避的。
接着,Rocky聊聊模型侧和部署侧这两个维度。
先单说模型侧,这时就可以引入我们上面讲的泛化性能,稳定性,安全性以及特殊Bad case的解决等维度了。算法工程师核心对算法模块负责,其次再对算法解决方案负责。
到了算法开发阶段,建议算法工程师手里对不同的细分领域都准备几个拿手的baseline模型,在不同的AI项目里都能快速上手验证,提高开发效率。
搭建好baseline就像婴儿学会了走路,那么下一步就是学会跑步了。
想要速成跑步,可以参考如下技法:
想要慢慢领会跑步的精髓,可以参考如下技法:
在搭建好baseline模型,同时对最后的性能心中有数时,我们可以花时间进行更多的调研,可以从最新的论文,最新的开源项目,以及经典的方法等方面切入,看看是不是有可以参考借鉴的地方,进行务实的优化。这个动作不但能优化当前的方案,同时也是让自己能学习更多,面对其他AI项目时,会有更多的方案与思考,是性价比很高的一种方式。
但一定要注意的是,AI项目的开发不像科研,AI项目需要快速的迭代优化,达到满足产品需求的目的,而不是陷入层层的实验当中。
再说部署侧,部署侧主要有工程代码和端侧硬件组成。
业务中的工程模块或者工程代码,往往非常值得挖掘。工程代码是经过客户与实际场景的长期考验,从而沉淀下来的代码和思想。如何透过现有工程模块,洞见这些思想和代码为何而来,做到知其然也知其所以然,是非常有价值的事。在此基础上,再对工程代码进行扩展和迁移,会更加从容。
而对于端侧硬件,首先要做到对几十种不同类型端侧硬件的熟悉,这个熟悉包括性能,使用场景,不同硬件的对比特性等方面。
有了前面的基础,Rocky总结了工程代码编写,模型部署,多维测试的注意点:
最后,就到了多部门的协同沟通合作完成整个算法解决方案的开发与交付了。Rocky归纳了下面的流程图来总结业务侧的整体逻辑结构:
正式工作以来,Rocky已经多次参加场算法竞赛了,都是在CVPR,AAAI以及Kaggle等平台上举办的CV方向的Competitions,也多次获得了第一名和top1%成绩,并在这些平台中与大家进行了交流和分享。
Rocky在这里总结了算法竞赛厮杀方法论,希望能让大家在算法竞赛中更加从容:
完成竞赛不是最终的目的,将竞赛成果与思考向业务侧和研究侧进行迁移,才会更加有价值。
同时竞赛方法论也具备迁移价值。业务侧也好,研究侧也好,都可以从竞赛侧中获得启发。
而且顶级算法竞赛的成果也有助于公司AI影响力的提升。
正式工作以来,Rocky也发表了一篇paper,撰写了多篇专利,算是对想要研究的方向入了一个门吧,还有很多需要学习成长的地方。在这里Rocky也浅谈一下在工业界科研的一些感悟。
首先,工业界科研与学生时代的科研完全不同,因为公司里所有工作会与绩效挂钩,研究也不例外。我们不能像在学校那样,花一年甚至两年的时间去进行研究,甚至一天中花在研究的时间也只能占工作时间的20%-30%左右,我们需要在业务侧,竞赛侧,产品侧去沉淀与成长。
加上全球局势巨变,整体经济环境的变化,互联网底层逻辑彻底改变以及人工智能再次遇到理论发展瓶颈,坦率来说只靠发paper来融资的模式这个底层逻辑已经一去不复返了。在这个大背景下,将部分的绩效与研究挂钩本身是一个输入产出比需要不断微调的事。
因此,从产品、业务、竞赛中找问题,进行拓展研究,并及时将阶段性成果反馈到产品、业务与竞赛中,彼此之间相辅相成,互相促进,不再只拘泥于发paper,而是顺势而为,用创业逻辑来平衡期望。这是Rocky与自己和解的一种方式。
paper阅读方法论:
近年来,各个顶会接收的论文越来越多,CVPR2022投稿量更是超过了1w,接收2000多篇。如果我们每年关注3-6个顶会的话,那么我们每年要看6000-12000篇顶会paper。这显然是不切实际的,在学校无事只看论文尚且难以达到,更别说工业界只能花20%-30%的工作时间。
而Rocky的方法是聚焦于提高好paper的召回率。这里的好是相对的,因为Rocky是从业务,产品以及竞赛角度出发,所以要努力从海量paper里召回能助力这些维度的paper。另一方面,从工业界发表的paper中筛选,可能有更好的召回率,因为工业界有实际问题和实际数据,可能会更好的解决工业界的一些痛点问题。
总之切记不能沉溺于paper的海洋中不能自拔。
在召回了一些paper后,那么该如何读呢。首先是在召回池里进行快速泛读,找到感兴趣的paper进行详读,并反复迭代这个过程,一周要读3篇左右。对于一篇paper可以从粗到细、有选择地多读几遍,从而逐步挖掘我们想要的价值。
第一遍:Title -> Abstract -> 所有图表。Title是一篇paper核心最凝练的体现。读Abstract可以知道这篇paper要解决什么问题,论文提出的解决方案以及效果。深度学习很多论文提出的方法与实验结果用图表就可以概括。
第二遍:Introduction -> Conclusions -> 所有图表。读Introduction可以了解这个文章的背景,存在的问题,现有的方法,这些方法有哪些不足或者缺点等。Related works最后部分有本文主要贡献,需要把握一下。读Conclusions可以知道这篇paper的结论和限制,以及对未来的畅想。
第三遍:读全文,跳过Related works和数学推导。读Methods可以知道方法细节,我们可以边读边思考为什么会设计这种方法,能不能挖掘更优化的点。可以读实验部分来完备自己的实验设置,以及判断paper为什么这么设置。
第四遍:再读全文。
读后思考:(1)一句话总结论文做的事(2)论文提出的方法核心的内容是什么?(3)我们能从中借鉴什么?(4)是否存在可继续拓展优化的点?
论文撰写策略:
不要给自己的研究成果设限。我们研究的每一小步都可以进行沉淀,优先向业务侧,竞赛侧,产品侧迁移应用。
除此之外,科学与严谨的思维方式,总结报告的撰写逻辑,融资PPT的撰写逻辑,讲故事能力等都能从这个科研中沉淀。
能沉淀到业务吗?能沉淀到产品吗?实验过程中有什么意料之外的点?实验效果如何,需要继续优化还是推倒重来?是否可以转化成专利或者论文?这些也都是每日三省吾身的问题,更要用投资逻辑来周期性看待研究方向与研究成果的价值。
最后,工业界科研给我最大的感受是坚持与选择这两者需要时刻权衡,时刻复盘。
为什么要单开这个章节呢,是因为Rocky发现,在面对创新业务的时候,算法工程师往往还身兼PM的职责。
创新业务不同于现金流业务,创新业务其实一开始是一种sense,需要自己负责指挥整个产品的发展方向和落地形态。这时就需要站在产品侧的视角去考虑问题,并且将自己的想法传达给团队,并达成一定的共识。
创新业务需要自己极大的主动性,在自己不断的学习成长的基础上,快速试错,并推动业务的落地。
创新业务和创业很相似,但只是部门内部的“创业”。需要站在解决方案的角度,对各个模块进行评估和统筹。
总的来说,AI行业的各种应用都还在不断发展,Rocky相信AI行业还有很多的成长空间,其较好的赋能能力,会让我们的生活越来越好,会让各行各业越来越智能化。
在AI这个“不朽的事业”中,不断学习,不断成长,让Rocky有更多的热情在这个道路上持续探索,这也算是寻求一种庇护吧。
关于后续的规划,我想从下面几个维度来谈谈自己的想法:
Rocky将算法高价值面试知识点即“三年面试五年模拟”之独孤九剑秘籍前六式进行汇总梳理成汇总篇,并制作成pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“三年面试五年模拟” 进行取用。由于“三年面试五年模拟”之独孤九剑秘籍pdf版本是Rocky在工作之余进行整理总结,难免有疏漏与错误之处,欢迎大家对可优化的部分进行指正,Rocky将在后续的优化迭代版本中及时更正。
Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于CV算法,算法,开发,IT技术以及工作经验等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)