导语:算法工程师是互联网领域比较热门的职位,随着大数据技术的火爆,推荐系统和机器学习等大数据相关领域获得了大量的关注,也让算法工程师的人气指数大大提升。那么做算法研究需要掌握哪些技能?算法工程师究竟拥有着怎样的工作和生活状态?做算法和做应用开发有什么区别?本次访谈将为您一一揭晓。
本期采访对象张叶银@吐豆儿-,84年生人,毕业于中科院自动化所模式识别专业,现在搜狗从事数据挖掘方面的算法研究。谈起喜欢的数学及算法,眼睛里闪耀着欢喜的光芒。但工作之后的快节奏和绩效方式,也让研究型的他感觉到了一丝落差。且看他如何在小伤感过后重新出发,继续寻找工作的成就感和平衡点。
爱
整个流程做下来之后,发现真正有意思的地方,是用自己的想法对数据进行建模,就这样慢慢产生了一些兴趣。
- 技术人攻略:先谈谈你的工作和学习背景,你是怎么进入到算法这个领域的?
我研究生在中科院自动化所,实验室的方向是机器学习和模式识别。进去之后开始做视频中人的行为分析,分析视频的内容,识别这个人在做什么样的行为,从根本上讲,就是分析图像视频数据,要怎么才能输入到一个数学模型里面去,怎么去定义人的动作,怎么让模型输出我们想要的结果,也就是人的行为意图。人的行为其实可看成一个时间序列,上一时刻和下一时刻的姿势是一个串起来的过程,联系到数学就是一个随机过程,连续姿势的转移可看做随机过程里的随机变量,随着时间的变化进行建模。做这样的数据分析会涉及到一些算法层面的东西,比如说给数据建模需要分析特征,看效果好坏。整个流程做下来之后,发现真正有意思的地方,是用自己的想法对数据进行建模,就这样慢慢产生了一些兴趣。
刚开始我会按照师兄师姐的想法做一些底层的技术实现,主要是编码。会用到Matlab,它集成了很多矩阵运算、信号处理、数据分析的类库,用起来很方便,能很快看到结果。把模型建起来之后要应用到工程实践中,实际中应用,工业场景中需要完整系统,需要用C及C#编程。做完整个过程,详细了解了怎么从第一步到最后的实现,就开始尝试做一些小的改进,再后来是慢慢尝试做一些模型的改进。
研二开始写文章,涉及特征选择、模型的改进、数据的验证,比较模型的精度和效率。自己也需要推导一些公式,当然不是那种惊天劈地的推导,也是从一些小的地方开始,慢慢做改进,不是一下子把模型的整个结构都改进了。
- 技术人攻略:是否也涉及到参数的调整?
参数调整是一方面,参数其实可以让机器去调整。人工调整主要还是特征的处理和模型的选择。不同的模型针对不同的数据效果是不一样的。模型的选择一方面靠前人的工作总结,另一方面靠个人经验,衡量的标准是综合效果和运算效率。模型不是选择效果越好的就越能实际应用,要在现实和理想之间平衡,选择折中的方案。因为很复杂的一个模型,可能在实际过程中并不是最好用的,虽然发论文的时候论文非常漂亮,但是真正用的时候和实际数据差距比较大,效果并不一定好。
研二发表了一篇国际会议的论文,研三开始做期刊论文。期刊要求文章比较有系统性,从数据到模型都比较完善完备,改进要比会议的要求更突出。一篇会议文章大概是A4纸7-8页,期刊估计能到20-30页。研三写期刊一直写到毕业,没写完,工作之后花了半年时间写完了,后来也发表了。
- 技术人攻略:数学知识很重要吧?
模型要用到很多数学知识,例如建模的时候,数据要从高维的空间导到低维的空间,会用到矩阵分析的知识。矩阵分析是线性代数的高级版,需要很强的空间思维能力,矩阵分析会把向量做各种各样的变换。像计算广告里面提取上亿的维度的特征,一般都会做特征变换再扔给模型去学习。有一门很难的课,叫泛函分析,全是抽象的东西。空间的概念就已经很抽象了,泛函分析中用一个符号代表空间,这个符号还要跟其它各种表示函数或空间的符号算来算去,还有函数的函数,的确很难理解。
愁
刚开始工作心理反差挺大的,从学校到公司,以前的那种豪情壮志被磨灭了,会感觉当初的理想慢慢远去。相比学校里做研究,公司做事的节奏很快,短期内就需要有所产出,仍像做研究那样去工作是行不通的。
- 技术人攻略:说一下工作的情况吧?
刚开始工作心理反差挺大的,从学校到公司,以前的那种豪情壮志被磨灭了,会感觉当初的理想慢慢远去。相比学校里做研究,公司做事的节奏很快,短期内就需要有所产出,仍像做研究那样去工作是行不通的。目标定的更实际更具体一些,比如每周会有一个checkpoint,避讳空泛的做事情。像做研究那样长期的专研结果不可预期的算法已经变得不太现实。这和之前的理想状态有些反差,学校里学到的东西很少能派上用场。不过,有压力就有动力,经过一段时间调整,工作会让你变得专注和高效。经过一段时间的适应,开始在工作中找到成就感,当你亲手做一个产品让用户使用以及广泛好评时,是自己工作价值最直接的体现。
其实公司的工作环境和团队的氛围对于个人的成长非常重要。比如学校实验室的氛围会影响学习的效果,工作之后的团队也有各种文化风格,这会影响每个人的工作态度及方式。在一个好的团队,自己做事也变得比较积极、主动,进步会很快;如果在一个做事敷衍了事,只会拍马屁的团队,也会慢慢有这样的习惯。所以刚毕业找工作的人,不能光看表面上的东西。别人眼中好的公司,也并不一定适合你。看到某公司非常好,但是你去了之后感觉并不是那么的好,你真正加入的团队,才是影响你工作方式非常重要的因素。
- 技术人攻略:现在还有热情吗?
碰到一些好的点子还是会激发自己的热情。关注最新的一些技术驱动的产品和文章,会不断激发自己的灵感。多了解一些实际应用的例子,比如google为什么能预测电影的票房,这个就比较有实际意义,做起来有热情。
- 技术人攻略:你未来两到三年有什么想法,有没有想过自己创业?
未来两三年还是想在技术方面提升自己。关于创业暂时还没有特别好的想法,看了一些创业的例子,感觉就是一个简单的点子,然后把它做到极致。不一定要和我现在做的有很直接的关系,也不一定要用到很深厚的理论,可能创业更多考虑的是用户,以及卖点在哪儿。
- 技术人攻略:应聘算法工程师和开发工程师有什么区别?
技术面试都会涉及基础的数据结构和算法,一般来说,面试比如会问一些树,链表等数据结构,排序、动态规划等也是常考的算法。
区别还是对数学的要求不一样,有些公司要考察对数学模型的理解,面试官会问你常用的机器学习模型,问模型的原理是什么,有时候会让你把公式写出来。工作中不同的地方在于做事的方式不一样,算法更侧重于数据和效果,系统开发工程师更注重稳定性。不过说到最后,不管是做算法,还是做系统开发,工作的意义都是一样的,只是侧重点不一样。
- 技术人攻略:你平时有哪些兴趣爱好?
没有什么特别的爱好,什么都能玩,也都玩得不好;平时比较宅,有时候看看电影,上上网;运动的时候去喜欢去爬山,游泳。
技术人攻略访谈是关于技术人生活和成长的系列访问,欢迎和我们有共同价值观的你关注“技术人攻略”,邮箱 devlevelup@gmail.com,新浪微博 @devlevelup,希望能成为技术人成长的精神家园。 欢迎通过微信公众账号关注技术人攻略
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。