作者: 龙心尘
时间:2021年1月
出处:https://blog.csdn.net/longxinchen_ml/article/details/113074403

其实这是一个不太好解释的问题,因为并没有一个完备的定义。笔者在算法领域遇到了不少同行,发现各自的工作侧重点甚至思维方式都很不同。为了给入门的朋友一个清晰的梳理,这里就简单串一串12个常见的算法。
首先,全景图镇楼。

算法与非算法的区别

一般来说,可以把编程工作分为两种,一种是面向实现的,一种是面向优化的。前者如实现一个功能、搭建一个服务、实现一种展现交互方式等。更关注的是如何实现功能,如何对于各种复杂甚至小众的场景都不出错。互联网中典型的后端、前端、平台、网络工程师的主要工作是这一类。

如果一些功能已经实现了,你主要需要优化它,那这类工作一般比较偏向算法。其中一个关键是你的优化目标要是客观可量化的。比如一些代码优化的工作是提升代码的可维护性、可读性和可扩展性。这个优化目标具备比较强的主观性,难以形成量化的指标,属于设计模式主要关注的问题,一般不纳入算法范畴。

另一个区分算法与非算法工作的重要特征是一般涉及数学知识较多的编程工作更偏向算法。比如对于面向优化的编程工作,为了很好地衡量可量化的目标,其数学定义往往比较明确,相应引入的数学知识会比较多。

那么如果面向实现的编程工作也依赖大量数学知识时是否算作算法呢?其中一个例子是可计算性理论,它涉及到可判定性问题、数理逻辑等问题都需要大量复杂的数学知识。这种情况下,它其实更关心何种问题原则上是否可用算法解决,在实际工程领域中并没有大量的岗位与之相匹配,所以本文暂不将其作为算法工程师所考虑的范围。

另一个例子是加密算法。加密算法的目标是保证数据的安全通信,保证其加密性、完整性和身份唯一确认。看起来是面向实现,但换一个视角,加密算法设计的指导思想是提高其解密成本,也可以算是面向优化的。

不同种类算法之间的区别

如果你的优化目标是要降低程序的时间复杂度与空间复杂度,它们都是能够比较严格地量化定义的,就属于经典的“数据结构与算法”中关注的“算法”的问题。LeetCode中大部分Algorithm的题目都属于此类,也是互联网面试中的高频考点,如常见的分治、递归、动态规划等。在实际工作中,特别是一些架构师相关的角色,会着重关注这类问题,比如提升增删改查的速度、降低其内存消耗等等。相应的数学理论是计算复杂性理论,依赖的数学知识包括离散数学、组合数学、图论等。

如果你的优化目标是要降低在未见过的case上的预测误差,这是典型的机器学习中的算法问题。这里面涉及到一些核心的概念,包括:泛化误差、训练误差、过拟合、欠拟合、偏差等。相应的算法岗位非常多,图像算法、语音算法、自然语言处理算法、搜索推荐算法等。

机器学习算法还可以根据优化目的的不同进行进一步的细分。如果训练数据带有标签,优化目标是降低预测标签的误差则是最常见的有监督学习。如果训练数据不带标签,则是无监督学习。而如果此时又非要预测对应的标签,则有降维聚类两种算法。如果仅仅是为了拟合训练数据的分布,生成式算法。

它的数学理论是计算学习理论,依赖的数学知识包括概率与统计、最优化理论、线性代数与矩阵论等。

当然,最优化本身就是一种算法。稍微严格一点的表述是在一定的约束条件下控制自变量达到目标函数最优的问题。最优化问题也叫作运筹学,在工程界应用非常广泛。典型的如外卖骑手调度、网约车调度、航班调度、物流路径调度、广告/补贴金额投放等。

最优化算法的种类也比较多,以自变量是否连续可分为连续最优化和组合优化。很多计算复杂度优化算法可以看做一种广义的组合优化问题。机器学习算法一般是连续最优化问题。

不同算法思路的相互组合

其他一些的高阶算法可以理解为以上多种算法的组合。比如强化学习算法可以理解成机器学习中的有监督学习算法与最优化决策算法的组合。也就是智能体根据其对当前环境下长期最大收益进行决策(最优化),而这个收益的函数是需要通过大量样本统计(有监督学习)才能得到,并且智能体的当下决策往往影响周围的环境状态进而进一步影响下一步自身的决策。其典型应用场景是基于用户实时行为的个性化推荐与搜索,外卖骑手路径优化与订单分配的在线优化等。其实,“强人工智能”如果可行的话,强化学习是其绕不开的学习思路。

以上介绍的优化算法都是基于单智能体的,而博弈论就将其拓展到多个智能体的最优化,视野一下就打开了。多个智能体的优化策略是会相互影响的。也就是说多智能体各自基于各自的优化函数进行优化,并且各自的优化行动可以影响其他智能体优化策略的过程。博弈论算法典型的应用场景是拍卖竞价策略。在ACG文化中的《大逃杀》、《赌博默示录》、《弥留之国的爱丽丝》甚至《JOJO》等大量作品中都充满了大量的博弈论场景。有一个小程序的游戏叫作《信任的进化》,简单玩一下就能够体会到博弈论的有趣之处。

多智能体强化学习则是多个智能体的强化学习得到最优策略,并且各自的最优策略会影响对方智能体的下一步优化策略的过程。或者理解成其认为博弈论收益函数是不确定的,需要对通过大量样本统计(长期收益的有监督学习)。典型的案例是AlphaGo、AlphaZero之类。

生成对抗网络(GAN)有点特殊,可以理解成两种机器学习算法的组合,一种算法的优化目标是降低生成样本与真实样本的区分难度,另一种算法的优化目标是提升他们的区分难度。而这两个目标是相互对立的,这又借鉴了博弈论的思路。这类算法在图像风格迁移、图像修复等场景有非常多的应用。

另外,模型压缩算法可以理解成机器学算法与优化计算复杂度算法组合,在一定的误差容忍范围下显著降低模型的空间复杂度和推断时间复杂度。其典型应用场景是模型的实时运算加速、边缘部署压缩等。

小结一下

这里主要从面向优化的角度上串讲了以下12种思维方式不同的算法:加密算法、计算复杂度优化算法、最优化算法、有监督学习、无监督学习(降维、聚类、生成)、强化学习、博弈论、多智能体强化学习、生成对抗网络、模型压缩算法等。

因为是科普向,很多细节没展开,特别是机器学习算法和优化计算复杂度算法的各个流派没有探讨。

我们将在接下来的文章中进行更加详细的介绍。

算法工程师大致是做什么的相关推荐

  1. sq工程师是做什么的_算法工程师为什么成天做数据,都做哪些数据?

    大家好,前几天群里有小伙伴说希望看到更多的算法工程师的日常.其实对于算法工程师而言,最大的日常就是做数据了,所以给大家分享一下做数据的那些事. 为什么很少做模型 在大家想象当中,可能算法工程师做的事情 ...

  2. 开课吧:一文读懂算法工程师大致分类与技术要求

    算法是最近新兴技术,虽然新但发展一点也不慢,从各企业使用角度讲,岗位的人才稀缺还是很大的.算法工程师就是利用算法处理事情的人,那么究竟算法工程师可以分为哪些类呢? 算法工程师分类如下: 音/视频算法工 ...

  3. 算法工程师是做什么的?超高薪资的背后,存在着什么样的原因?

    随着大数据和人工智能领域的不断深入发展,自然语言处理.机器学习等方向成为求职的大热门,算法工程师也自然而然成为目前最炙手可热的岗位.虽然算法工程师一直被频频提及,但是许多人对这个岗位的了解还知之甚少. ...

  4. 算法工程师是做什么的?发展前景怎么样?

    随着大数据和人工智能领域的不断深入发展,自然语言处理.机器学习等方向成为求职的大热门,算法工程师也自然而然成为目前最炙手可热的岗位.虽然算法工程师一直被频频提及,但是许多人对这个岗位的了解还知之甚少. ...

  5. 算法工程师与java_java算法工程师的职责是什么?前景如何?

    我们也了解了很多的有关Java工程师的相关知识,那我们是否了解java算法工程师呢?那么java算法工程师涉及到哪些职责呢?它的前景如何呢?接下来让我们一起了解下吧. 各个行业都有算法部分,统计有统计 ...

  6. 算法工程师、软件工程师、大数据工程师的区别

    前段时间,有几个HR朋友问我: 算法工程师的日常工作到底是在干嘛? 平常看起来似乎还挺闲的,工资还那么高. 有时候算法工程师好像又和大数据工程师是一样的工作? 这到底是怎么回事呢? 大约整理出以下几个 ...

  7. 算法工程师、软件工程师、大数据工程师,傻傻分不清楚

    前段时间,有几个HR朋友问我: 算法工程师的日常工作到底是在干嘛? 平常看起来似乎还挺闲的,工资还那么高. 有时候算法工程师好像又和大数据工程师是一样的工作? 这到底是怎么回事呢? 大约整理出以下几个 ...

  8. 【转】算法工程师应该学哪些

    一.算法工程师简介 (通常是月薪15k以上,年薪18万以上,只是一个概数,具体薪资可以到招聘网站如拉钩,猎聘网上看看) 算法工程师目前是一个高端也是相对紧缺的职位: 算法工程师包括 音/视频算法工程师 ...

  9. 推荐算法工程师的成长之道

    作者 | gongyouliu 来源 | 大数据与人工智能(ID: ai-big-data) 本文,作者会基于自己的实践经验讲述推荐算法工程师的成长之道,这里的"道"有发展路径和道 ...

  10. 收藏 | 在算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?...

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨沈世钧.DLing.坡哥说 来源丨知乎问答 编辑丨极市平台 985人工智能博士笔记推荐 周志华<机 ...

最新文章

  1. 重磅丨国资委下发通知,加快推进国有企业数字化转型
  2. 新一代数据中心标准化统一交换架构
  3. java静态钥匙上同步代=代码块锁
  4. 中小企业如何巧用大数据?
  5. fetch 不是xhr_春招|前端2019应届春招:不是被大厂选,而是选大厂(字节跳动,美团,网易)...
  6. STM32 FSMC/FMC原理保姆级讲解(一)
  7. 表单的管理作业及答案
  8. IBatisNet初步体验
  9. 基于SSH的房屋租赁管理系统
  10. 一种高效率的笔记法——康奈尔笔记法
  11. 京瓷打印机m5521cdn_京瓷m5521cdn驱动
  12. Spring Security整合KeyCloak保护Rest API
  13. 1.42 财务测量指标——静态评价法(投资回报率+投资回收期)
  14. 计算机学报应用研究,组推荐系统及其应用研究-计算机学报.PDF
  15. 学习笔记五(蜂鸣器实验按键输入实验)
  16. javase(8)_集合框架_List、Set、Map
  17. 【DP专题】——洛谷P5144蜈蚣
  18. 深度剖析 string —— memset memcmp
  19. 文件不小心删除了怎么恢复?实用的两个小妙招
  20. Api升级28适配填坑(一)

热门文章

  1. 激光干涉仪测量五轴机床旋转轴精度的方法
  2. 巨头环伺下,青云QingCloud的云计算之路危机重重
  3. mui.ajax执行的次数,MUI 中使用 ajax下拉刷新时,数据怎么才能做到累加呢,谢谢...
  4. 关于‘go list‘ failed with: error obtaining VCS status error obtaining VCS status: exit status 128问题的解决
  5. 新能源汽车OTA升级中的UDS通信分析
  6. 003_SSS_ Tackling the Generative Learning Trilemma with Denoising Diffusion GANs
  7. xbrowser连接Linux没有桌面,Windows下使用Xbrowser连接Centos 6.x自带的远程桌面
  8. H5小游戏《看你有多色》扩展(辅助、眼力)
  9. python进行批量图片文字识别
  10. 时频分析工具箱典型函数的使用