详细介绍算法效果调优的流程

描述

效果调优应该是算法工程师最基础的工作了我们需要对当前的现状有一定了解后,提出有效的效果优化方案,为指标服务,最终达到指标提升的目标。但是,效果调优并不是一个容易的事,为了让大家能更快找到有效的解决方案,完成优化任务,这里给大家介绍一下我的流程和思路。

算法效果调优的流程

在开始之前,先和大家说清为什么要有这个流程。所谓流程,在明确的情况下,能让大家更简单直接地执行,执行过程中,更不容易遗漏关键点,流畅地流程能让我们更快更有目的性地做事,所以有这个流程还是很重要的。效果调优主要是下面几个流程,我详细介绍下。

明确目标和现状

一个模型也好,一个算法模块也好,他都有自己的功能,他执行的怎么样,有哪些问题,距离预期差多远,这都是我们要在最开始明确的,一般情况很简单,就是看指标,例如准确率和召回率,复杂的,还有一些业务角度的指标,我们必须明确,在开始执行,为了方便大家观测,这里列举出需要在这步里回答的问题,供大家参考,能回答这些问题,那可以开始进行下一步。

这个模块的主要功能是什么,预期的指标是多少,计算和抽样逻辑是否具有合理性(一定要注意,有些时候出现的问题就在抽样和指标上,这个错了,后面的优化无从谈起)。

当前模块的指标是多少,距离目标还差多少。

具体使用的技术方案是什么,这里有没有做什么权衡和妥协,这些妥协有没有解开的可能。

上面的问题,如果能够很清楚地回答,说明你对这个问题、模块等都非常明确,在这个前提下去做效果调优,才是有效的。

分析和定位问题

很多新人很容易跳过这个步骤,但这往往是最重要,而且是最考验算法工程师功力的部分。

分析和定位的过程,核心目标是关注这几个问题:

确定当前方案的问题点在哪里,哪些位置或者哪些case没有解决好。

看集中性和case分布,哪些是重点问题,需要优先考虑哪些问题。

评估问题的难度和解决率,从而了解预期的收益。

这里的分析,我喜欢把它分为两个视角,一个是宏观,另一个是微观。前者更关注整体数据上的问题,通过多个角度的统计,来发现目前数据和模型的问题,例如在多分类场景,统计各个类目的准确率、召回率甚至各个类目的数据占比,找出类目短板,对类目短板进行针对性提升是可以很大程度上提升总体指标的;后者,则是进行case分析,找出bad case的一些共性,并对共性问题进行针对性解决,当然这里也会考验到不同角度的bad case抽取,这个可以结合前面宏观的分析结论来抽样处理。

解决方案的制定

有了前面信息的支撑,我们是可以开始进行效果调优了,然而,用什么方法来解决,也是一个问题,如何去找最合适的方法来解决我们上面分析出的问题。

首先,我们要知道,有哪些可行的解决方案。如果是只会换模型,调参数,那招数属实有点少,如果是这种情况,我们就应该去调研,多去看看业界和科研界的主要方案(平时,也需要),另一方面,我们也看看简单地,从样本、模型、规则上是否有快速的解决方案,增加手里能打的牌,才有可能有好牌,只有储备的够多,才更容易从中找出好东西来解决问题。

第二步,就是方案的选择,要从众多方案中,找出最优的方案,这里大家需要考虑这几个问题:

方案对问题的解决程度是否可以明确,看能解决当前多少的问题。

方案的上下限在哪,除了解决问题本身外,还有没有别的问题可以解决,或者带来哪些伤害,换言之,方案的优缺点是什么,这点要明确。

方案需要投入多少的时间、人力、机器、数据等资源。

这些问题大家平时多少都会考虑到,但是并不一定全,尤其是后者,玩NLP的多少都会手痒试试BERT,包括我在内,但是理性思考后其实很可能不会当做一个优先级较高的方案了,尤其是问题都很明确的情况下。

调优的难点问题

说到调优,其实难度比较大的,是这么几个位置。

首先,是问题的定位难,我们往往很容易通过直观的指标知道我们的方案是有问题,有一定空间的,但是,具体突破口在哪里,这个会很困难。这里给大家几个建议吧:

多看case,好的坏的,都多看看,理解业务里面常见的用例,只有理解,才能更多地发现问题。

当然,我们也可以多看看很多文章,论文的、技术分享的等等,很多文章都会去聊他们面临的问题以解决方案,这些问题其实给我们提供思路,例如“我们会不会也遇到和他们一样的问题”。

然后,是解决方案的储备问题。方案分两种,一种是针对性方案,根据明显的问题我们可以想到一些快速的解决方案,这个往往取决于我们对业务的理解能力和方法的熟悉程度。第二种,是一些长期的,依赖储备的方案,很多业界的方法会给我们很多思路,这些思路的内化能让我们很快从中找到解决方案。无论是前者还是后者,其实都很依赖我们的平时积累,这个积累不仅在于量,还在于质,也就是深度,对方案理解的越清楚,越能看清本质,我们用起来其实会更加得心应手。

第三点,是技术方案的权衡。权衡是根据我们需要面临的技术环境的,例如数据、机器、时间、人力等,有的方案可能可以很好的解决问题,但是会花费很多成本,例如NLPer最喜欢的预训练模型,他是很依赖机器的,后续即使效果真的会有提升,也要考虑到性能和机器的问题最终可能上不了线就功亏一篑了。这个其实挺吃经验,权衡这个能力是需要经过项目的历练,逐步形成的,坑才多了才能把坑绕过,这点需要大家在进行项目的过程中多思考多总结。

调优能力

上面聊了很多有关调优流程的东西,但是,调优本身的能力要求还是比较高的,这里我整理了一些有关调优能力的能力项和成长的阶段,看看对大家有没有什么帮助,当然,我自己的能力也没到很高的水平,持续学习和成长吧。

首先是执行力,在问题都给清楚了,解决方案也明确了,这个时候能编码实现,这个应该是最基本的能力了。

第二层就是独立完成的能力。

首先,能通过多种分析手段,诊断出现有方案的问题。

第二,就是解决方案的提出。这里背后,比较重要的事解决方案和技术的储备。这点是需要长期积累的,一方面是对数据、场景的熟悉,另一方面是对业界和科研界的技术的了解,如果储备不够,很多问题绝对是解决不了的。

第三层,其实除了独立完成以外,能有整个项目的视野。

现状的理解和未来的规划,能带着规划去设计解决方案。

能够跳出问题,结合业务等因素来解决问题和甚至到框架和系统的设计。



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分