国外有一个著名的大佬(我忘记名字了)曾经说过,算法工程师有70%的时间是投入在数据上的,花在模型和调参上的只有不到20%。

 算法工程师为什么成天做数据,都做哪些数据?(数据算法工程师是干嘛的) 算法 模型 数据 第1张

为什么很少做模型

在咱们幻想傍边,或许算法工程师做的作业是今日看paper,明日把paper完结了,后天就上线运用,然后公司的收入刷刷涨,咱们的薪酬、等级也跟着涨。但实践上,大多数岗位下的工程师日常并不是这样。国外有一个闻名的大佬(我忘掉姓名了)从前说过,算法工程师有70%的时刻是投入在数据上的,花在模型和调参上的只需不到20%。

这句话咱们或许或多或少都听过,可是想必都不是很了解,为什么会这样呢?为什么不能多花点时刻做模型呢?原因也很简略,并非不想,而是不能。

不能的原因也很有许多,我随意举几个最常见的。

结构约束

模型不能随意动的原因有许多,一般来说最常见的是结构的约束。这种状况在大公司和小公司里都有,比如之前我在某大公司的时分,公司的结构十分老练,以至于很少写代码去完结某一个模型,而更多的是可视化界面的连线以及设置操作。问题来了,在这个场景傍边,可视化界面傍边可选的模型是固定的,都是根底团队开发好的,他们开发好了这么多模型,咱们就只能运用这么多模型,除非咱们脱离这整个流程,但明显这是不或许的。

所以其时在很长的一段时刻里,咱们只能在有限的模型傍边做挑选。直到后来,公司开发出了新的结构东西,能够让咱们自己定制神经网络的代码完结深度模型,这才鸟枪换炮迎来了全面晋级。

小公司尽管不像大公司这样有一套老练且不易改动的结构,可是一般也会有自己的一套流程。比如公司前人留下来链路是依据开源xgboost开发的,你想要运用TensorFlow练习神经网络模型替代原有的xgboost,一般来说这是必定有必定的,也必定会迎来提高。但问题是,你或许需求把练习模型、线上调用模型的整个链路都重构。许多算法工程师的开发才干不太行,并且也不太乐意做工程重构的作业,再加上这块作业量也不小,所以很简略呈现的状况便是,咱们都明知道怎样做比较好,可是拜访投入比较多,咱们也都不乐意做,一向delay。

必定难确保

第二个原因是paper上的一些模型和做法,必定其实是很难确保的。假如你读过paper会发现paper的定论往往都有许多条件。比如某某特定的数据或者是场景,前期强壮的recall以及过滤体系,或者是完善的特征预备等等。paper里不会把这些都写出来,它只会写上做法以及成果。所以这就导致了,许多paper里写得不着边际的办法,实践运用起来必定或许并欠好。

这也不是paper吹嘘,而是你没有相同的条件。举个比如,阿里的数据埋点十分精准,精准到用户从翻开app到封闭app的每一个动作和行为都有记载,每一个产品或者是模块在用户处展现了多少时刻,乃至是用户翻页的速度都有全面完好的记载。就这种数据,一般规划的小公司底子做不了。你做不了这个数据,你就没有paper里那些精准的特征。那你怎样确保你运用阿里的模型也有相同的必定呢?

优先级问题

咱们都知道,作业依据紧迫以及重要能够分红四类,不重要不紧迫、紧迫不重要、紧迫且重要、重要不紧迫。许多人也都知道,最重要的作业是把那些重要且不紧迫的作业做好。说起来咱们都会说,可是实践上未必人人都会这么选。

当你面对KPI查核压力的时分,一线的工程师或许就只能盯着紧迫的作业做。拜访他们需求赶忙做出一点成果来完结自己的不方便,完结自己不方便的最好办法绝不是去晋级或者是更新模型,而是找一些特征做一做,或者是运用一些取巧的办法看看能否提高必定。花时刻去更新模型,支付的劳作很大,也纷歧定有必定。可是做特征价值很小,做了一个没必定,能够再做一个,迭代也快。

这其实并不完全是工程师目光短浅,也是整个职场气氛的影响的成果。咱们都垂青不方便和绩效,以至于咱们都堕入了部分最优解,可是却离全体最优解越来越远。

要想防止这种状况,需求有登高望远、统筹规划的架构师或者是leader,能够抗住晋级模型的富余压力。对或许呈现的状况以及将来要做的作业有满足、具体的规划,并且有满足的经历应对各种或许呈现的作业。可是咱们也都知道,具有这种才干的leader在职场里百里挑一。大公司里都不多见,小公司里就愈加难得了。

做哪些数据

说完了模型的问题,咱们来聊聊数据,已然不能频频地改变模型,工程师们就只能更多地来做数据了,那么工程师们究竟又在做哪些数据,需求花费这么多时刻呢?

练习数据

大公司里有完好的流程,咱们把流程规划好了之后,练习数据、测验数据、模型练习以及布置能够一条龙流水线作业。可是在中小型公司里,这往往是做不到的。

原始数据是不能直接用来练习模型的,这中心需求杂乱的处理流程。首要,需求做采样。就拿CTR预估的场景来举例,一般状况下实在场景下的点击率不会超越10%。可是模型练习一般正负样本的份额是1:3左右,那么这就需求咱们对负样本进行采样。

采样你还不能直接采,拜访或许这些样本傍边还存在许多脏数据或者是不合法的数据。咱们需求先把这些有问题的数据过滤了之后,再进行采样,这样才干确保咱们的数据是洁净的。采样了之后,咱们需求进行特征和字段的查找补全。拜访数据往往是分隔存储的,比如用户的根底信息是一张表,用户的行为数据又是一张表,产品的信息是一张表,各式各样的数据存放在各式各样的当地。咱们有了样本之后,还需求去查找许多的数据,才干把一切需求用到的字段收集齐。

当咱们收集了一切需求的数据之后,咱们才干开端真实样本的制造,也便是运用这些咱们查找以及收集到的原始数据生成输入模型的样本特征。每一个特征或许都有自己共同的生成逻辑,这也是一个巨大的工程。这一步做完还没完毕,还会需求把数据转化成模型需求的格局。比如tfdata或者是tensor、json之类的。

这么一系列进程,大公司一般都有一整套完好的主动调度流程, 工程师们不需求操心,只需求拿来用就好了。可是在中小型公司,或许就只需一些手动东西了,需求数据都需求手艺去跑一些使命或者是脚本。跑的进程傍边还有或许会失利以及遇到各种问题,尽管说起来平平无奇,也没什么价值,但这些作业都是需求作业量的。

新的特征

特征怎样做?在kaggle之类竞赛傍边,或许便是运用pandas写两个函数,或者是几行处理的逻辑就搞定了。但实践上绝不是这么简略。

我举一个最简略的比如好了,比如咱们将年纪进行归一化,做成一个标准化年纪的特征。这个简略吧,咱们就用比较简略的最大最小值归一化办法好了,公式是:

算法工程师为什么成天做数据,都做哪些数据?

归一化之后,这个特征值会被缩放到0-1的区间里。可是这里边用到了两个参数,一个是最大值,一个是最小值。这两个参数怎样来?你或许会觉得这还不简略,咱们遍历下数据不就知道了。但问题是这个数据你并不是只用一次,今后每次生成练习数据都需求生成这个特征,莫非每次跑的时分都手动遍历一下数据找下最大最小值吗?并且数据是在改变的,每一天用户年纪的最大和最小值或许都纷歧样,假如说咱们要跑好几天的练习数据怎样办?

规划一个新的特征是简略的,可是里边的一些参数会让作业变得杂乱,咱们往往需求规划杂乱的机制来将新完结的特征参加流程。

必定剖析

还有一块数据处理的大头在必定剖析,必定剖析有两种,第一种是做一些之前没有的目标以及相关的剖析,或者是应老板的要求做一些事务目标的剖析,达到咱们的绩效。

比如像是最根底的CTR、CVR、收入等数据,也有像是老板暂时起意想要看的某些数据。比如剖析一下某些特征的散布,比如看一下某个特定族群中样本的数量或者是数据的状况,等等等等,纷歧而足。

第二种是咱们模型做出来之后的必定剖析,假如说模型的必定还,那还好。假如必定欠好,问题就来了,咱们怎样样确认是哪里出了问题?是拜访模型自身的功能缺乏呢?仍是咱们的特征不行或者是特征傍边存在问题呢?仍是咱们的数据质量不高呢?仍是说什么当地存在bug呢?

算法不像是工程,工程傍边绝大多数作业是确认的,成果不对必定是拜访逻辑有bug,那么只需细心测验,剖析原因,总能处理。那种难以复现,找不到原因的问题十分稀有。可是算法纷歧样,大多数状况下并没有肯定的过错和正确,乃至没有肯定的原因。咱们扮演的人物更多地像是侦察,依据一些蛛丝马迹估测导致问题的原因,然后用试验尝试着处理,在这个进程傍边就涉及到许多的数据处理和剖析的作业。

比如,假如你置疑是某些特征散布有问题导致了模型必定欠好,那么你需求剖析特征的散布。假如你置疑是数据存在bug,那么你需求规划方案,挑选数据,细心鉴别数据傍边的问题,验证自己的主意。假如你觉得是练习数据量不行,那么你需求增大练习量,规划比照试验……总归,想要排查问题都需求许多的数据剖析,绝不只是是看看代码,想一想就能有定论的。

感触

许多想要从事算法的人真实做了算法之后,往往会有幻灭感。会有一种激烈的面试造航母,入职拧螺丝的感觉。原因也很简略,咱们面试的时分问的是各式各样的模型,各种先进的理念和办法,可是入职之后面对的作业却是各式各样的数据剖析以及数据预备。比如我当年大部分时刻都在写SQL做数据,我一度置疑公司的职位组织。

但当我了解了这一切的运作机制之后,我就了解了。实践的作业场景和线上算法竞赛不同,线上竞赛咱们能够运用各式各样的trick来提高成果。还能够搞各种跨界混搭,比如本年的腾讯算法大赛的冠军的做法便是把BERT运用在了用户行为剖析的场景下。可是在实践的场景傍边,拜访体系以及各方面的限制,这些主意都是很难完结的并且必定也难确保,终究仍是要落实到根本的数据支撑上来。

打个不确切的比如,各式各样的算法模型就好像是东西箱里的各式东西,咱们只是了解东西是没用的。最重要的是要了解运用东西的场景,然后能够依据需求挑选最合适的东西。但很惋惜的是,咱们对数据以及场景的了解是很难量化的,所以面试的时分只能退而求其次问你东西的运用了,久而久之许多人舍本求末,搞错了中心竞争力,呈现对面试的种种谴责也就不奇怪了。

转载请说明出处
知优网 » 算法工程师为什么成天做数据,都做哪些数据?(数据算法工程师是干嘛的)

发表评论

您需要后才能发表评论