建筑招工人在哪个网站比较好找,蝶恋直播免费下载,整站网站模板,网络推广渠道大家好#xff0c;前几天群里有小伙伴说希望看到更多的算法工程师的日常。其实对于算法工程师而言#xff0c;最大的日常就是做数据了#xff0c;所以给大家分享一下做数据的那些事。为什么很少做模型在大家想象当中#xff0c;可能算法工程师做的事情是今天看paper#x…大家好前几天群里有小伙伴说希望看到更多的算法工程师的日常。其实对于算法工程师而言最大的日常就是做数据了所以给大家分享一下做数据的那些事。为什么很少做模型在大家想象当中可能算法工程师做的事情是今天看paper明天把paper实现了后天就上线使用然后公司的收入刷刷涨我们的工资、级别也跟着涨。但实际上大多数岗位下的工程师日常并不是这样。国外有一个著名的大佬我忘记名字了曾经说过算法工程师有70%的时间是投入在数据上的花在模型和调参上的只有不到20%。这句话大家可能或多或少都听过但是想必都不是很理解为什么会这样呢为什么不能多花点时间做模型呢原因也很简单并非不想而是不能。不能的原因也很有很多我随便举几个最常见的。框架限制模型不能随便动的原因有很多一般来说最常见的是框架的限制。这种情况在大公司和小公司里都有比如之前我在某大公司的时候公司的框架非常成熟以至于很少写代码去实现某一个模型而更多的是可视化界面的连线以及设置操作。问题来了在这个场景当中可视化界面当中可选的模型是固定的都是基础团队开发好的他们开发好了这么多模型我们就只能使用这么多模型除非我们脱离这整个流程但显然这是不可能的。所以当时在很长的一段时间里我们只能在有限的模型当中做选择。直到后来公司开发出了新的框架工具可以让我们自己定制神经网络的代码实现深度模型这才鸟枪换炮迎来了全面升级。小公司虽然不像大公司这样有一套成熟且不易改动的框架但是一般也会有自己的一套流程。比如公司前人留下来链路是基于开源xgboost开发的你想要使用TensorFlow训练神经网络模型代替原有的xgboost一般来说这是肯定有效果的也一定会迎来提升。但问题是你可能需要把训练模型、线上调用模型的整个链路都重构。很多算法工程师的开发能力不太行而且也不太愿意做工程重构的事情再加上这块工作量也不小所以很容易出现的情况就是大家都明知道怎么做比较好但是由于投入比较多大家也都不愿意做一直delay。效果难保证第二个原因是paper上的一些模型和做法效果其实是很难保证的。如果你读过paper会发现paper的结论往往都有很多前提。比如某某特定的数据或者是场景前期强大的recall以及过滤系统或者是完善的特征准备等等。paper里不会把这些都写出来它只会写上做法以及结果。所以这就导致了很多paper里写得天花乱坠的方法实际应用起来效果可能并不好。这也不是paper吹牛而是你没有同样的条件。举个例子阿里的数据埋点非常精准精准到用户从打开app到关闭app的每一个动作和行为都有记录每一个商品或者是模块在用户处展示了多少时间甚至是用户翻页的速度都有全面完整的记录。就这种数据一般规模的小公司根本做不了。你做不了这个数据你就没有paper里那些精准的特征。那你如何保证你使用阿里的模型也有同样的效果呢优先级问题我们都知道事情根据紧急以及重要可以分成四类不重要不紧急、紧急不重要、紧急且重要、重要不紧急。很多人也都知道最重要的事情是把那些重要且不紧急的事情做好。说起来大家都会说但是实际上未必人人都会这么选。当你面临KPI考核压力的时候一线的工程师可能就只能盯着紧急的事情做。因为他们需要赶紧做出一点成绩来完成自己的业绩完成自己业绩的最好方法绝不是去升级或者是更新模型而是找一些特征做一做或者是使用一些取巧的方法看看能否提升效果。花时间去更新模型付出的劳动很大也不一定有效果。但是做特征代价很小做了一个没效果可以再做一个迭代也快。这其实并不完全是工程师鼠目寸光也是整个职场氛围的影响的结果。大家都看重业绩和绩效以至于大家都陷入了局部最优解但是却离整体最优解越来越远。要想避免这种情况需要有高瞻远瞩、统筹规划的架构师或者是leader能够抗住升级模型的风险压力。对可能出现的情况以及将来要做的事情有充足、详细的规划并且有足够的经验应对各种可能出现的事情。但是大家也都知道拥有这种能力的leader在职场里凤毛麟角。大公司里都不多见小公司里就更加难得了。做哪些数据说完了模型的问题我们来聊聊数据既然不能频繁地变更模型工程师们就只能更多地来做数据了那么工程师们到底又在做哪些数据需要花费这么多时间呢训练数据大公司里有完整的流程我们把流程设计好了之后训练数据、测试数据、模型训练以及部署可以一条龙流水线作业。但是在中小型公司里这往往是做不到的。原始数据是不能直接用来训练模型的这中间需要复杂的处理流程。首先需要做采样。就拿CTR预估的场景来举例一般情况下真实场景下的点击率不会超过10%。但是模型训练一般正负样本的比例是13左右那么这就需要我们对负样本进行采样。采样你还不能直接采因为可能这些样本当中还存在很多脏数据或者是非法的数据。我们需要先把这些有问题的数据过滤了之后再进行采样这样才能保证我们的数据是干净的。采样了之后我们需要进行特征和字段的查找补全。因为数据往往是分开存储的比如用户的基础信息是一张表用户的行为数据又是一张表商品的信息是一张表各种各样的数据存放在各种各样的地方。我们有了样本之后还需要去查找很多的数据才能把所有需要用到的字段搜集齐。当我们搜集了所有需要的数据之后我们才能开始真正样本的制作也就是使用这些我们查找以及搜集到的原始数据生成输入模型的样本特征。每一个特征可能都有自己独特的生成逻辑这也是一个庞大的工程。这一步做完还没结束还会需要把数据转化成模型需要的格式。比如tfdata或者是tensor、json之类的。这么一系列步骤大公司一般都有一整套完整的自动调度流程 工程师们不需要操心只需要拿来用就好了。但是在中小型公司可能就只有一些手动工具了需要数据都需要手工去跑一些任务或者是脚本。跑的过程当中还有可能会失败以及遇到各种问题虽然说起来平平无奇也没什么价值但这些事情都是需要工作量的。新的特征特征怎么做在kaggle之类比赛当中可能就是使用pandas写两个函数或者是几行处理的逻辑就搞定了。但实际上绝不是这么简单。我举一个最简单的例子好了比如我们将年龄进行归一化做成一个标准化年龄的特征。这个简单吧我们就用比较简单的最大最小值归一化方法好了公式是归一化之后这个特征值会被缩放到0-1的区间里。但是这里面用到了两个参数一个是最大值一个是最小值。这两个参数怎么来你可能会觉得这还不简单我们遍历下数据不就知道了。但问题是这个数据你并不是只用一次以后每次生成训练数据都需要生成这个特征难道每次跑的时候都手动遍历一下数据找下最大最小值吗而且数据是在变化的每一天用户年龄的最大和最小值可能都不一样假如说我们要跑好几天的训练数据怎么办设计一个新的特征是简单的但是里面的一些参数会让事情变得复杂我们往往需要设计复杂的机制来将新完成的特征加入流程。效果分析还有一块数据处理的大头在效果分析效果分析有两种第一种是做一些之前没有的指标以及相关的分析或者是应老板的要求做一些业务指标的分析达成我们的绩效。比如像是最基础的CTR、CVR、收入等数据也有像是老板临时起意想要看的某些数据。比如分析一下某些特征的分布比如看一下某个特定族群中样本的数量或者是数据的情况等等等等不一而足。第二种是我们模型做出来之后的效果分析如果说模型的效果还那还好。如果效果不好问题就来了我们怎么样确定是哪里出了问题是因为模型本身的性能不足呢还是我们的特征不够或者是特征当中存在问题呢还是我们的数据质量不高呢还是说什么地方存在bug呢算法不像是工程工程当中绝大多数事情是确定的结果不对一定是因为逻辑有bug那么只要仔细测试分析原因总能解决。那种难以复现找不到原因的问题非常罕见。但是算法不一样大多数情况下并没有绝对的错误和正确甚至没有绝对的原因。我们扮演的角色更多地像是侦探根据一些蛛丝马迹推测导致问题的原因然后用实验尝试着解决在这个过程当中就涉及到大量的数据处理和分析的工作。比如如果你怀疑是某些特征分布有问题导致了模型效果不好那么你需要分析特征的分布。如果你怀疑是数据存在bug那么你需要设计方案筛选数据仔细甄别数据当中的问题验证自己的想法。如果你觉得是训练数据量不够那么你需要增大训练量设计对比实验……总之想要排查问题都需要大量的数据分析绝不仅仅是看看代码想一想就能有结论的。感想很多想要从事算法的人真正做了算法之后往往会有幻灭感。会有一种强烈的面试造航母入职拧螺丝的感觉。原因也很简单我们面试的时候问的是各种各样的模型各种先进的理念和方法但是入职之后面临的工作却是各种各样的数据分析以及数据准备。比如我当年大部分时间都在写SQL做数据我一度怀疑公司的职位安排。但当我理解了这一切的运作机制之后我就理解了。实际的工作场景和线上算法比赛不同线上比赛我们可以使用各种各样的trick来提升成绩。还可以搞各种跨界混搭比如今年的腾讯算法大赛的冠军的做法就是把BERT应用在了用户行为分析的场景下。但是在实际的场景当中由于系统以及各方面的制约这些想法都是很难实现的而且效果也难保证最终还是要落实到基本的数据支撑上来。打个不确切的比方各种各样的算法模型就好像是工具箱里的各式工具我们仅仅了解工具是没用的。最重要的是要理解使用工具的场景从而可以根据需要选择最合适的工具。但很遗憾的是我们对数据以及场景的理解是很难量化的所以面试的时候只能退而求其次问你工具的使用了长此以往很多人本末倒置搞错了核心竞争力出现对面试的种种非议也就不奇怪了。今天的文章就到这里衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话请来一个三连支持吧~点赞、关注、转发原创 | 算法工程师为什么成天做数据都做哪些数据mp.weixin.qq.com