大家好,我是千与千寻,一名专注于后端研发与算法工程领域的程序员,最近我的作息快赶上yp哥的作息了,不过习惯就好。
昨天晚上深夜回家发了个pyq,我大致表达的意思:谁说算法岗不加班的?活没干完的前提下,你不得疯狂加班的,跟似的干?
然后有粉丝说:什么,算法岗也要加班吗?不是说算法岗相对开发岗来说,可以轻松一些吗?加班没开发岗那么恐怖吗?
先直接说结论:你们可能是对算法岗有什么误解了...
千寻目前是大厂一名研发工程师,虽然是研发,但是工作内容,后端研发,算法工程应用都有所涉及,我就自身的经历给大家介绍一下算法岗的工作内容,算法岗的种类,以及什么样的人适合做算法岗,对于想转行算法岗的朋友一些建议。
算法岗是什么?
算法岗是大中型企业在已经有完整的盈利闭环系统的基础上,需要对其盈利模式进行深度的优化,使得系统可以更加具有针对性的服务用户目的的工程人员。
算法岗什么工作内容?
之前的文章中我曾经列举过算法岗与开发岗位的具体工作内容差别,算法岗为包含算法工程师,算法研究员。
算法研究员:算法研究员的hc相对较少,一般仅仅在特大厂的AI lab以及AI四小龙以及独角兽的公司会有一定的需求,当然这仅仅是针对互联网公司的情况进行描述的,如果是进入国企或者研究所,对前沿的技术研究需求还是很多的。
算法研究员主要的是进行传统模型准确率以及性能的深度打破,在目前的SOTA之下,SSD在COCO数据集上的检测MAP准确率目前是75.8%,那么研究员就会想尽各种tricks来提高模型的准确性,改进网络结构,或者特征提取方式,达到打破目前的最高准确率,从而发表顶会论文。
算法工程师:算法工程师相对研究员来说,更加接近实际的业务,将算法实际的用到工程中,从而发挥算法的效果,一般来说在实际的业务生产中,我们所使用的算法模型也都是稳定的模型,进行迁移学习,从而可以达到速度与准确率的完美结合。算法工程师相对研究员岗位来说,并不需要实际的模型突破,很对时候达到80%-90%基本就可以使用了,与研发进行配合联调,将算法模型的调用接口化,用于工程需求中。
算法岗位的方向
算法岗位的方向还是很多的,最大的范围之下,可以划分为计算视觉,自然语言处理,搜索广告推荐算法,语音算法,方向太多,很难做到所有的都面面俱到。我对我所研究两个方向,进行一下我的心得的分享,推荐派单算法,以及计算视觉算法(CV)
计算机视觉:
其实在之前作为的计算机视觉的算法工程师,我在计算机视觉方面还是有自己的一些见解,具体可以说明为计算机视觉的算法工程师,我自己的一个感觉,为了防止杠精,我说明仅仅代表我自己的观点,我个人其实不太看好CV方向,原因如下:
1.看似方向广,就业岗位多,事实上市场比较饱和,toC的大模型相对来说有些已经投入使用,然而对于toB的业务,AI四小龙独角兽公司,相对来说,已经做得十分完善,市场没那么庞大。
2.技术相对来说比较完善,同时技术的重要性并不是很举足轻重,对于互联网的核心盈利方式——平台+广告的模式之下,图像的地位其实并不是很重要,“说白了,不是能增加资本家资产的东西”
3.图像识别,目标检测,商汤和旷视做的很强,一般应用于工业界,生成对抗,图像分割等相对来说用于互联网的短视频中,抖音快手中的魔法表情使用就是用GAN完成的
计算机视觉是算法岗中人很多的方向,因为很多本科生的专业是自动化,机械电子,通信工程的同学都会多多少少接触到数字图像,所以在研究生期间也会继续研究图像,也就作为CV算法岗。
推荐系统算法:
说到算法岗的大头,也就是最为出名的"搜广推",先说一个结论:如果现在想转行做算法岗,或者是高年级的本科生以及硕士生还没用找到算法岗的方向,那我建议你转推荐算法。
刚刚我们说了互联网公司的两大盈利方式:
1.建立中间平台,收取中介费,例如滴滴出行,以及美团点评等。通过建立电商的平台,进行商家与用户之间的匹配,促进消费。
2.掌握一定的流量,进行精准的广告投放。
以推荐算法的结构来给大家进行一下详细讲解:
在以上我绘制了一个很简单的电商推荐系统的架构图,其中包括每一种流程层的算法逻辑流向。
召回层:召回预计算目标,从海量数据中多路召回预排序目标,简单来说,选择进入推荐模型的种子号选手,例如购买牙膏需求,牙膏的品牌以及商店有上千万家,肯定不能所有的进行遍历,因此会通过人群画像获取数据的预计算目标,模型计算量有百万降低到百级。
过滤层:召回层进行召回的预计算目标一定会比最终推荐的目标数量要高,原因需要进行"过滤",比如存在重复推荐,或者无效推荐(商家关门,或者断货)
精排层:经过过滤层的过滤,进入推荐算法模型,进行推荐得分计算,以传统的机器学习算法为例,在实际的业务系统中会存在多种复杂业务情形,简单的机器学习模型根本无法满足复杂的业务需求,常用的机器学习的模型是集成模型例如xgboot模型,通过采取多种关键特征进行决策回归
以上就是精排层的推荐系统的算法整体框架图,将数据集放入模型进行模型训练,算法工程的主要职责就是上下的两个方框:改进模型结构与优化特征工程。
改进网络模型结构: 以xgboost为例,其内部包括多个决策树,决策树的数量,以及学习率的大小都可以改进特征的学习率,从而在同等数量的特征之下可以达到更高的效果
优化特征工程:相比于改进网络结构,特征工程则是通过增加特征的种类,特征的数量,比如从原来年龄+性别来推荐商品,到最后使用年龄+性别+爱好数码进行商品的推荐,显然在增加了爱好的特征后可以进行更加精准的推荐,以此类推,优化模型的性能。
混排层:相比于精排层,混排层的不是单单注重准确率,而是有意去放出"负样本",也就是用精准推荐去带动其他的推荐,比如推荐买大米的商品,顺带推荐豆油,从而获得更多的收益。
强规则:根据运行吗,比如有一些需要进行强制的置顶,是进行人机交互的主要窗口。
算法岗的性能提高验证测试
1.对于算法的模型测试来说,线下使用可以使用测试数据集进行测试,测试改进模型的准确率。
2.但是实际的工业生产环境中更多所使用是线上AB测试,其具体的架构图:
线上AB测试,其原理是将算法模型的不同改进版本,进行的对照,毕竟这实践才是检验真理的唯一标准,只有线下模型准确率再好,一到线上就崩也是凉凉啊,因此需要模拟100%的线上业务情形,所以进行”控制变量法"进行算法模型的性能对比。
采用流量分流阀,将全部的流量进行等分为4份,基础桶为最基本模型,等于模型的basekline,其他的几个版本的对照桶中放入改进的模型,在同样的流量之下,对比模型的优劣。具体的对比指标有些复杂,总之采用控制变量法进行模型的对照。
算法岗适合什么样的人?选择什么样的算法岗比较好?
算法岗位相对于来说,竞争力比较强,因为算法岗的薪资是互联网食物链的顶端,对标金融领域的券商投资银行岗位,所以算法岗的竞争压力会大一些,不过薪资与竞争压力是成正比的,也是值得的。
算法岗适合喜欢做研究实验的高年级本科生或者硕士研究生,算法岗需要不短的追最新的论文,努力将学术界或者工业界的最新成功转化为实际的业务系统中去。
算法岗的性能提高验证测试
对于技术有执着热爱的比较适合算法岗,其实程序员这个领域都差不多,都是需要终生学习的打工人。
针对以上我提到的两种算法岗位,可以说目前计算机视觉算法岗的需求迭代更类似开发岗位,而推荐系统的”搜索广告推荐“可能更加有研究的价值。
最后无论算法岗也好,研发岗也很好,好好做哪行都行的,程序员领域各司其职,不存在鄙视链,一起冲!
我是千与千寻,我们下期见!
END
往期精彩回顾
适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
AI基础下载机器学习交流qq群955171419,加入微信群请扫码:
今天在解决一个问题的时候,发现自己的数学水平严重下降,现在是光有思路没有答案,自己简单算了几个答案,还是不太满意。最后尝试写了一个简单的pl/sql就解决了。问题是这样的,一个系统的处理结果会提供两个参数,用这个参数来衡...
#include<stdio.h>#include<pthread.h>#include<unistd.h>pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;void printer(char *str){// pthread_mutex_lock(&mutex); while(*str!='\0') { putchar(*str); fflush(stdout); str++; s.
在Echarts3的折线图的使用过程中,想使初始化出来的图表更人性化,就比如说有这么个需求,在Echarts折线图中,鼠标悬浮在左侧某一个点时,悬浮框悬停在点的右侧;鼠标悬停在右侧某一个点时,悬浮框悬停在点的左侧。下面是具体实现思路: 首先明确一点,我们需要借助tooltip.position属性。理想的思路是我们在回调函数中获取鼠标每次悬停的坐标,然后再判断这个坐标是否处于此容器(...
layui数据表格批量删除删除按钮 &amp;amp;amp;amp;lt;button class=&amp;amp;amp;quot;layui-btn&amp;amp;amp;quot; data-type=&amp;amp;amp;quot;getCheckData&amp;amp;amp;quot; style=&amp;amp;amp;quot;background:#7185a2&amp;amp;amp;quot;&amp
使用VMware安装CentOS7CentOS7镜像(复制到浏览器直接下载): https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso1、 新建虚拟机2 、选择典型3、稍后安装操作系统4、安装版本版本这里需要注意 因为我安装的是CentOS是64位的所以我选择了Cent...
转载自: http://blog.csdn.net/d744784681/article/details/60574700首先列出参考文档:admob官方参考链接我是cocos2d-x v3.9的工程,在按照官方文档接入之后,出现一堆编译错误例如:[plain] view plain copyUndefined symbo
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )//去除控制台窗口#include <iostream>#include <gl/GLUT.h>#include <map>#include <vector>#include <list>#...
JEESZ是一个大型分布式的面向服务的JavaEE体系快速研发平台,基于模块化、服务化、原子化、热插拔的设计思想,使用成熟领先的无商业限制的主流开源技术构建。 采用服务化的组件开发模式,可实现复杂的业务功能。提供驱动式开发模式,整合内置的代码生成器,将JavaEE开发效率提高5倍以上,减少50%的代码开发量,解决80%的重复工作,让开发者更关注业务逻辑。 使用Maven进行项目的构建管理,采用Jenkins进行持续集成,主要定位于大型分布式企业系统或大型分布式互联网产品的架构。
DevExpress VCL Controls是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序。DevExpress VCL v20.2.2下载具体更新内容如下:此列表包括v20.2.2中引入的所有重大更改。ExpressLayout ControlUIT944070-布局尺寸约束操作已更改ExpressQuan...
最近的实习任务中要求使用pytq进行qgis的二次开发,在这个过程中那我们用到了tableview这个插件,对于这个插件,我们要求通过选择事件在tableview里面显示数据,更改表格数据并获取更改后的数据,下面我将逐步介绍如何实现此操作:使用QT designer设计一个table view控件,如下图所示:上面两个按钮,一个用来生成数据、一个用来获取数据;在设计完成ui界面以后,接下来我们要将ui界面转换成py文件;我们ui.py文件内容如下:// ui.py# -*- coding.
step1、准备安装环境Ubuntu16.04step2、按照4418的wiki首先下载编译器:git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1注意:从GitHub上clone的速度可能非常慢(10-20kb/s),而4418的wiki中只给了这种下...
函数作用:用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域区域的字节拷贝到目标区域中,但复制后src内容会被更改,但是当目标区域与源区域没有重叠则和memcpy函数功能相同。memmove可以被分为三种情况:1.dest&lt;src,源内存的首地址大于目标内存的首地址,进行正向拷贝,此时无需担心dest+coun...