当前位置: 首页 > 科技观察

AI工程师成长笔记——工作方法!

时间:2023-03-21 15:20:43 科技观察

本文着重介绍工作方法。工程师群体中有很多非常聪明的人。他们在工作中会面临很多重复、繁琐的事情。如何用工程思维来处理它们,这几年通过工作和学习总结出来了。归纳起来,主要有以下几个方面。01重复链接的自动化这大概是程序员最基本的直觉和认知了。自动化可以从“CV工程师”的角度来理解:第一次复制粘贴CtrlC+CtrlV时,要考虑是否可以抽象成一个组件或工具;第二次复制粘贴的时候,组件的结构和设计应该已经比较清晰了。当你第三次复制粘贴时,你已经可以使用自己的组件或工具了。自动化不应仅仅体现在代码层面,它可以看作是一种解决问题的方法,自动化可以用于重复的环节。比如我们在写博客的时候使用图床,一般的流程是:截取并存储图片,上传到图床,获取图片的链接。如果这个过程不自动化,真的会让人放弃——很恶心,但事实上,Mac下的AlfredWorkflow可以很容易地实现自动化。再比如我们经常开会,我们可以做一个会议纪要的模板,每次开会的时候都抄下来。关键是要找到抽象重复动作的方法,有这种意识很重要。由于自动化更多的是一种意识,自然非技术人员也会需要它,而且可能更需要。例如,行政人员可以手工发放工资单,业务人员可以每天下载一次报表,然后对报表进行一些统计或其他处理。这些任务实际上可以自动完成。自动化程度不高,还是得会Python,有时候写代码会比较复杂,比如前面提到的Workflowimagebed的例子。对于非技术人员来说,Excel往往更实用一些,比如统计、去重、切片、过滤等,在Excel中点几下鼠标就可以了。工具不重要,只要能把事情“自动”完成,工具越简单越好。02Batching批处理和自动化可能有些相似,但批处理更侧重于一次完成一类工作。核心是“批”,自动化的核心是“自动”。批处理一般是针对一个特定的工作内容,比如统一查找替换,统一给所有句子添加某个字符,批量下载数据等等。AI工程师应该对此非常熟悉。模型训练中的batch其实就是batching的一个例子。批次往往具有统一的特点,不仅效率高,而且可以避免逐一操作可能出现的错误。例如,给定一个包含多列的文本文档,我们想要提取包含数字的行。这时候,我们可以使用SublimeText,通过正则表达式找出所有的数字,然后选中该行,进行复制。批处理总是讲究事情能不能“一次性”完成,这往往体现在物流层面,比如下楼取快递,可以和外卖一起取;或者讨论的话题可以一起开会等,简而言之就是尽量一起完成相似的行为,以提高效率。还有时间批处理。也就是用一整块的时间去做一件事。我个人一般会选择上午作为安静时间,专注于需要集中注意力的工作,不看新闻,基本不动。03Simplification这里的简单包含两层意思:第一层是一般意义上的“简单”,第二层是大道至简的“简单”。第一层类似于simple,一般用作初始方案或临时方案;第二层的简单是通过复杂和冗余的表象直达本质,而整个系统层面的清晰和美观往往是不断进化和完善的产物。这里从AI工程师的业务角度来说两个方面。产品设计在设计阶段,产品应该在满足需求的前提下选择简单的持续优化。明确一下我认为“简单”的设计是什么:一方面,有不同的模块,每个模块都有一个单一的、独特的、不可或缺的功能;另一方面,每个模型的核心功能都符合其基本假设。需要注意的是,模块不应该有一些只适用于某些情况的特殊设计。以AI工程师为例,谷歌的东西往往符合“简单”的标准,比如Doc2vec、BERT,但修改后的论文大多把它复杂化了。作为行业内的工程师,其实专注于GF(Google、Facebook)的前沿研究成果就差不多了。其他的(尤其是大学里的)只是作为思路的参考,不能吃太多。产品架构架构设计本身就是一件非常复杂的事情。看似是现有功能的组合,难点在于这个选择。简单架构更多的是从整体复杂度的角度考虑,模块与模块、组件之间的交互简单。要做到这一点,就要从实际出发,选择当下最适合的架构,稍微做一些扩展的考虑,下一步就是随着系统不断演进。需要特别注意三点:一是过度设计。一个好的架构通常是演化出来的,而不是从一开始就设计得那么好。第二,追求新技术。这本身是一件好事,但是作为一个架构设计师,你必须要考虑多方面的因素。不管技术水平如何,新技术是否稳定,团队能否hold住,老板对未来的规划,都是重要的因素。三是想一步到位。事实上,架构的调整往往是逐步进行的。可以先调整某个模块,然后再调整下一个。有时需要彻底推翻重新设计。架构设计不是一蹴而就的。04边际收益最大化在经济学中,边际收益是指增加一单位投入所能获得的收益。边际收益正在递减。比如你很饿的时候,第一个包子最好吃,越吃越不好吃。在工作中,我们应该优先考虑边际效益最大化的工作。流行的说法是2-8法则:用20%的资源去做能达到80%效果的事情。优先解决人工部分从长远来看,几乎所有的企业都会面对AI,就像十多年前的电子商务一样,这并不是“某些”企业的专属。在这一点上,我同意吴恩达的观点——把AI比作电。即使从客观的角度来看,AI技术确实可以在很多方面提升企业效率,比如客服机器人、搜索、推荐等,只是深度的不同而已。即使是已经部分AI化的企业,也未必有优化空间。我们只需要知道技术的存在就是为了提高整体效率,剩下的就是一点点优化。无论出于何种原因重视新技术,都不能成为不使用它的借口。尤其是在人工智能领域,深度学习的有效性毋庸置疑。在很多场景下,可以替代传统的方法,或者进一步提升已有的效果。作为行业的一员,当新的方法、新技术出现的时候,即使没有效果,我们也应该去学习,更何况效果那么好。不同的方法、不同的模型可能对综合运用不同方法的核心部分产生不同的效果,因为它们各自侧重的点不同。在现实中,我们常常没有办法环游世界,即使是最新最好的。我这里想表达的是,正是因为不同的方法有不同的侧重点,所以我们需要利用这一点,选择方法的组合,类似于利用每种方法的最大收益。