找回密码
 立即注册
楼主: Zephus

算法工程师大致是做什么的?

[复制链接]
发表于 2021-7-4 10:27 | 显示全部楼层
真的不是我看不起你...非科班,就光这一条短时间内你成不了算法工程师,最惨的甚至一辈子都不可能。为啥?
算法工程师是计算机行业里有一定难度的一类分支,算法工程师往往会根据产品的业务特点,提出一个或者一系列数学或者程序方案,以提升业务处理的速度和准确度。想入这个行业数学建模是最基础的。
然后说回你的学历...嗯
一套算法往往是一个产品的灵魂和核心,重要性可想而知,一般小型的外包项目没必要弄个算法工程师,码农们背过的基本算法就够了。
换个角度,如果你是一个大公司的把老板,你会把公司产品的核心工作交给,一个你不熟悉的非科班的毕业生来做么?风险太大了,有可能他是个天才,一瞬间就把我的系统改的更牛逼了。但是世界上有几个天才呢?去看看张雪峰老师的视频受受刺激吧。


至于知否要入IT,推荐你看我这篇的回答:22岁,三本汽车专业毕业,想转行学it?


如果真的很想做入这行,我建议从最基础的码农做起,算法这个作为一个目标很好。
另外提到一点,程序员最忌讳的就是一不懂就伸手的习惯。如果有很多专业词汇不懂,证明你离你的目标还欠缺这些词汇相关东西,去百度去学,一点一点去查,最后你会发现,你已经离你的目标很近了。


最后送一句《火星救援》里的经典台词
You solve one problem, and you solve the next one, and then the next. And If you solve enough problems, you get to come home.
当你解决完一个问题,再去解决下一个问题,以及下一个,当你解决足够多的问题的时候,你就能回家了。


PS:@日耳曼少女 真巧每次类似的问题都能碰见你
发表于 2021-7-4 10:34 | 显示全部楼层
其实这是一个不太好解释的问题,因为并没有一个完备的定义。笔者在算法领域遇到了不少同行,发现各自的工作侧重点甚至思维方式都很不同。为了给入门的朋友一个清晰的梳理,这里就简单串一串12个常见的算法。
首先,全景图镇楼。
算法与非算法的区别

一般来说,可以把编程工作分为两种,一种是面向实现的,一种是面向优化的。前者如实现一个功能、搭建一个服务、实现一种展现交互方式等。更关注的是如何实现功能,如何对于各种复杂甚至小众的场景都不出错。互联网中典型的后端、前端、平台、网络工程师的主要工作是这一类。
如果一些功能已经实现了,你主要需要优化它,那这类工作一般比较偏向算法。其中一个关键是你的优化目标要是客观可量化的。比如一些代码优化的工作是提升代码的可维护性、可读性和可扩展性。这个优化目标具备比较强的主观性,难以形成量化的指标,属于设计模式主要关注的问题,一般不纳入算法范畴。
另一个区分算法与非算法工作的重要特征是一般涉及数学知识较多的编程工作更偏向算法。比如对于面向优化的编程工作,为了很好地衡量可量化的目标,其数学定义往往比较明确,相应引入的数学知识会比较多。
那么如果面向实现的编程工作也依赖大量数学知识时是否算作算法呢?其中一个例子是可计算性理论,它涉及到可判定性问题、数理逻辑等问题都需要大量复杂的数学知识。这种情况下,它其实更关心何种问题原则上是否可用算法解决,在实际工程领域中并没有大量的岗位与之相匹配,所以本文暂不将其作为算法工程师所考虑的范围。
另一个例子是加密算法。加密算法的目标是保证数据的安全通信,保证其加密性、完整性和身份唯一确认。看起来是面向实现,但换一个视角,加密算法设计的指导思想是提高其解密成本,也可以算是面向优化的。
不同种类算法之间的区别

如果你的优化目标是要降低程序的时间复杂度与空间复杂度,它们都是能够比较严格地量化定义的,就属于经典的“数据结构与算法”中关注的“算法”的问题。LeetCode中大部分Algorithm的题目都属于此类,也是互联网面试中的高频考点,如常见的分治、递归、动态规划等。在实际工作中,特别是一些架构师相关的角色,会着重关注这类问题,比如提升增删改查的速度、降低其内存消耗等等。相应的数学理论是计算复杂性理论,依赖的数学知识包括离散数学、组合数学、图论等。
如果你的优化目标是要降低在未见过的case上的预测误差,这是典型的机器学习中的算法问题。这里面涉及到一些核心的概念,包括:泛化误差、训练误差、过拟合、欠拟合、偏差等。相应的算法岗位非常多,图像算法、语音算法、自然语言处理算法、搜索推荐算法等。
机器学习算法还可以根据优化目的的不同进行进一步的细分。如果训练数据带有标签,优化目标是降低预测标签的误差则是最常见的有监督学习。如果训练数据不带标签,则是无监督学习。而如果此时又非要预测对应的标签,则有降维聚类两种算法。如果仅仅是为了拟合训练数据的分布,生成式算法。
它的数学理论是计算学习理论,依赖的数学知识包括概率与统计、最优化理论、线性代数与矩阵论等。
当然,最优化本身就是一种算法。稍微严格一点的表述是在一定的约束条件下控制自变量达到目标函数最优的问题。最优化问题也叫作运筹学,在工程界应用非常广泛。典型的如外卖骑手调度、网约车调度、航班调度、物流路径调度、广告/补贴金额投放等。
最优化算法的种类也比较多,以自变量是否连续可分为连续最优化和组合优化。很多计算复杂度优化算法可以看做一种广义的组合优化问题。机器学习算法一般是连续最优化问题。
不同算法思路的相互组合

其他一些的高阶算法可以理解为以上多种算法的组合。比如强化学习算法可以理解成机器学习中的有监督学习算法与最优化决策算法的组合。也就是智能体根据其对当前环境下长期最大收益进行决策(最优化),而这个收益的函数是需要通过大量样本统计(有监督学习)才能得到,并且智能体的当下决策往往影响周围的环境状态进而进一步影响下一步自身的决策。其典型应用场景是基于用户实时行为的个性化推荐与搜索,外卖骑手路径优化与订单分配的在线优化等。其实,“强人工智能”如果可行的话,强化学习是其绕不开的学习思路。
以上介绍的优化算法都是基于单智能体的,而博弈论就将其拓展到多个智能体的最优化,视野一下就打开了。多个智能体的优化策略是会相互影响的。也就是说多智能体各自基于各自的优化函数进行优化,并且各自的优化行动可以影响其他智能体优化策略的过程。博弈论算法典型的应用场景是拍卖竞价策略。在ACG文化中的《大逃杀》、《赌博默示录》、《弥留之国的爱丽丝》甚至《JOJO》等大量作品中都充满了大量的博弈论场景。有一个小程序的游戏叫作《信任的进化》,简单玩一下就能够体会到博弈论的有趣之处。
多智能体强化学习则是多个智能体的强化学习得到最优策略,并且各自的最优策略会影响对方智能体的下一步优化策略的过程。或者理解成其认为博弈论收益函数是不确定的,需要对通过大量样本统计(长期收益的有监督学习)。典型的案例是AlphaGo、AlphaZero之类。
生成对抗网络(GAN)有点特殊,可以理解成两种机器学习算法的组合,一种算法的优化目标是降低生成样本与真实样本的区分难度,另一种算法的优化目标是提升他们的区分难度。而这两个目标是相互对立的,这又借鉴了博弈论的思路。这类算法在图像风格迁移、图像修复等场景有非常多的应用。
另外,模型压缩算法可以理解成机器学算法与优化计算复杂度算法组合,在一定的误差容忍范围下显著降低模型的空间复杂度和推断时间复杂度。其典型应用场景是模型的实时运算加速、边缘部署压缩等。
小结一下

这里主要从面向优化的角度上串讲了以下12种思维方式不同的算法:加密算法、计算复杂度优化算法、最优化算法、有监督学习、无监督学习(降维、聚类、生成)、强化学习、博弈论、多智能体强化学习、生成对抗网络、模型压缩算法等。
因为是科普向,很多细节没展开,特别是机器学习算法和优化计算复杂度算法的各个流派没有探讨。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 10:37 | 显示全部楼层
为啥搞算法?听上去高大上,绝大部门公司里面赚的没有搞产品和方案的工程师多。这个问题想清楚再往下走,不然两头都捞不着。

举个例子,一般公司裁员如果按部门来的话,最先走研究部门,再走产品部门,最后再砍市场和销售...
发表于 2021-7-4 10:44 | 显示全部楼层
我来勉强答一题
算法工程师的核心是建模
不论什么机器学习也好,深度学习也好,都是用模型解决存在于世界中的工程问题。
以前,互联网公司利用CRUD就能完成业务的需求,后来出现了一些业务比如搜索、推荐、广告等,仅仅用CRUD无法满足了,就出现了算法工程师这个岗位。
在传统的科技企业,算法就是产品的灵魂,比如医疗的成像算法,通信中的通信算法,甚至汽车中变速箱的标定算法……总结来说算法工程师这个岗位难度最大的过程就是建立模型的过程。而每一个工科行业都有它自己独特的方式去建立这些模型。

忽然想转开发了:'( :'( :'(
发表于 2021-7-4 10:54 | 显示全部楼层
谈一谈当前关注比较多的AI/机器学习算法工程师。首先是算法本身,作为一名合格的算法工程师需要对模型本身的数学原理有比较深入的理解,能根据结果现象去推测模型中的问题,对算法本身进行改进,比如网络结构,算子,loss函数优化等。
其次,熟悉业务场景,能够根据实际业务需求灵活地选择算法模型。并不是学术界越前沿的东西越好,而是在满足用户需求前提下给出高性价比的解决方案。
最后,工程能力非常重要!(有时甚至比单纯的构建算法模型更重要)对于公司来说,再流弊的算法,不能落地到产品中去,也没什么用!
发表于 2021-7-4 10:57 | 显示全部楼层
现在的感觉是,比开发加班少多了,赞
发表于 2021-7-4 11:03 | 显示全部楼层
不要给名字骗了,大部分算法工程师要的东西都应该在人工智能底下,而不是算法课
前者是AI分支,后者是理论分支。
你应该看机器学习那个方向,基础科目是概率学
发表于 2021-7-4 11:04 | 显示全部楼层
参加ACM打败tourist
发表于 2021-7-4 11:11 | 显示全部楼层
算法工程师 广义上是指搞算法的 除了机器学习之外 还包括控制算法啊  图形算法啊  slam啊
狭义上 现在谈算法工程师一般指的是 搞学习和大数据的  俗称调参侠。
发表于 2021-7-4 11:11 | 显示全部楼层
你说“有意往算法工程师方向学习。但是一直找不到具体的关于这个职业的解释“
也就是说你是在向往一个你自己都不知道要做什么的岗位学习?
很多时候,方向比速度更重要。
Wiki上有对于算法工程学的解释,可以参考: Algorithm engineering
学习算法的话,《算法导论》是必学的,国内有翻译好的。WIKI: Introduction to Algorithms
在《导论》的基础上,你还要选择你的研究方向。除非你做科研,那么这个方向的把握更多取决于在实际引用的价值体现。比如说,针对数据存储,新的/优化后的算法可以节省时间/空间;针对数据安全反面,新的/优化后的算法可以节约时间或者有更好的保密性。因为相对高的应用价值,这些研究方向都会得到大型IT企业的青睐。
你才大二,不懂的很多也不奇怪。努力吧。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-21 04:28 , Processed in 0.108299 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表