做 ML 有关的工作,需要哪些技能?

本文摘录了Quora上关于机器学习工作的必备技能的回答,包括基础数学、编程语言、概率统计、分布式计算等方面。建议学习者关注深度学习、神经网络,如深度置信网、卷积神经网络、长短期记忆网络等,并熟悉Python、C++、R等语言,以及Unix/Linux工具。此外,了解Hadoop生态系统和概率统计也是关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(点击上方公众号,可快速关注)


编译: Python开发者 - Agatha

http://blog.jobbole.com/113592/


【导读】:有位网友在 Quora 上提问:做与机器学习有关的工作,需要些什么技能呢?

我是一个自学者,现在家中自学线性代数。希望有天能在机器学习领域工作,但是我不太确定:

  • a) 这种工作/面试需要什么技术上的技能?

  • b) 有没有什么(做这种工作)必须的相关工作经历


比起空想,我至少开始行动了。任何的建议/指导对我来说都很有用。十分感谢!


本文摘编了 2 位 Quora 网友的回答。

Jonathan A. Cox(机器学习和应用物理研究人员)的回答:

这里有很多回复都提到了一些创业公司常用的工具。值得注意的是,在你 35 岁以上的职业生涯中,这些工具会变得完全不同。所以最好的办法是熟悉基本概念和数学。

其次,机器学习领域太过繁杂,根本不可能真正深入理解几十种不同的算法。我觉得你可以先深究几个最有前景的算法。说是这么说,你也要很了解一些基础的东西才行,比如说朴素贝叶斯、支持向量机、感知器、决策树。

最后,很多创业公司,或者非研究领域的人会告诉你要专注于那些快要老掉牙的算法(比如支持向量机 (SVM))和大数据的数据库工具(比如说Hadoop)。考虑到你刚刚起步,我觉得你可以专注于那些很快会发展起来的架构:神经网络,单指令流多数据流(SIMD)向量计算(比如说GPU)。神经网络最近 10 年内开始革命性地颠覆自然语言处理、机器视觉、语音识别和其他领域。鉴于它的强大,这个影响还会继续下去。

综上,我会选择诸如 GPU 加速这类算法来自学和实现,再加一些分布式数据库的知识。以下是值得考虑的算法:

1. 深度置信网或者层叠降噪自动编码机 / Deep Belief Nets or Stacked Denoising Autoencoders
2. 卷积神经网络(CNN)
3. 长短记忆(LSTM)时间递归神经网络
4. 结构递归神经网络(通常用于自然语言处理)
5. word2vec 神经网络以及相关通过上下文学习词语的相关算法

另外一个很有前景的领域是强化学习,尤其是 Deep Mind 的 Q-learning。当你用到延迟奖励功能(比如玩 Atari 游戏时的得分),并且不能在你的网络中直接计算参数梯度时,你会用到强度学习。当你熟悉了上述的算法之后,你大约会想探索一下这个领域。这个领域跟机器人以及,更现实一点,关于人和动物是怎么学习的模拟,很有关联。

补充:我现在有这样的想法:过去的一年中,结合不同的神经算法,得到一个“深度“系统的方法逐渐显露出重大进步;因为这个方法的整体大于它的组成部分。鉴于奠基石已经铺下,我预计最显著的进步很可能会落在这个方向。一定程度上,细致整顿整个系统之前训练好个体模块,以及更快的计算群让这种进步成为了可能。(然而我们仍会在单个的算法中看到进展。)

换句话说,现在结合了卷积神经网络和多层感知器(MLP)的 LSTM,可以做到用句子描述图像之类的事情(来源:Goolge/Stanford)。类似地,已经有了具备强化学习能力的卷积神经网络和 MLP 组成的 Atari 游戏竞技网络。

往这个清单加上新东西同样很容易:把通过 word2vec/GloVe/skip-gram 训练出来的词向量输送给这样的复合网络,或者甚至是用递归神经网络训练的情感分析层。

有了神经网络和反向传播,在任意几何体上结合/叠加层,以及把组合作为整体系统来训练都变得容易了,它们可以扩展出强大的能力。

由许多不同种类的神经网络组成,用各种技术连接在一起,单独训练,协同微调,这些混合系统将继续向我们展示充满戏剧性的新能力。

二、Joseph Misiti 的回答分享,4400+ 顶

个人认为,以下是部分必需技能:

更新:我在 Github 创建了一个 repo,里面有上百的资源链接能够帮你起步。

https://github.com/josephmisiti/awesome-machine-learning

1. Python/C++/R/Java

假如你想在机器学习领域里找一份工作,你大概迟早要学会这些语言。Python 的 Numpy 和 Scipy 库 [2] 非常有用,因为这些库不仅有跟 MATLAB 相似的功能,而且将其整合进Web Service,或者在 Hadoop(见下)里使用的时候也十分简单。在加快代码运行速度的时候会用到C++。R [3] 在统计和画图的时候非常好用。Hadoop [4] 是用 Java写的,所以当你实现 mappers 和 reducers 的时候可能需要用到 Java(虽然你也可以通过 Hadoop streaming  [5] 使用脚本语言)。

2. 概率和统计

学习算法里的很大一部分都基于概率和统计理论,比如说朴素贝叶斯 [6]、高斯混合模型 [7]、隐 Markov 模型 [8]。 想要理解这些模型,就需要扎实的概率和统计功底。测度论 [9] 怎么拼命学都不过分。把统计作为模型的评价指标,比方说混淆矩阵、ROC 曲线、p值等等。

3. 应用数学和算法

对于 SVM [10] 这些判别模型,就需要算法理论的扎实基础了。即便你不需要从头开始实现SVM,学习算法理论也可以帮助你理解算法。需要学习的东西有凸优化 [11],梯度下降 [12],二次规划 [13],拉格朗日 [14],偏微分方程等等。要习惯看求和符号 [16]。

4. 分布式计算

如今大部分的机器学习工作都要求使用大型数据集(见《数据科学》)[17]。处理这些数据并不能凭借一台机器,而是需要把工作分派给整一个集群。像 Apache Hadoop [4] 这样的项目和亚马逊的 EC2 [18] 这样的云服务就能以合理的成本方便地处理这些数据。虽然 Hadoop 把很多硬核的分布式计算问题隐去了,对 map-reduce [22] 和分布式文件系统 [19] 等方面有透彻的理解还是十分必要的。Apache Mahout [20] 和 Apache Whirr [21] 也很值得一看。

5.精通 Unix/Linux 工具

除非你运气好,不然你总是需要修改你数据集的格式来载入到 R、Hadoop、HBase 等。Python这些脚本语言(使用 python 里的 re)也能用来完成这个事情,但是最好的方法大约还是掌握专门为此设计的 unix 工具:cat [24]、grep [25]、find [26]、awk [27]、sed [28]、sort [29]、cut [30]、tr [31]等。因为最有可能在基于 Linux 的机器上处理这些数据(我记得 Hadoop 并不能在 Windows 上运作),你一定可以用到这些工具。要学会热爱并尽可能地使用这些工具。这些工具让事情简单多了,比如这个例子 [1]。

6.熟悉Hadoop的子项目

HBase、Zookeeper [32]、Hive [33]、Mahout 等。这些项目可以储存或读取数据,而且他们可扩展。

7. 了解高级信号处理的技术

特征提取是机器学习最重要的部分之一。如果你的特性提取得不好,那不论你使用什么算法,性能都不会好。根据具体情况,你可能可以应用一些很酷炫的高级信号处理算法,比方说 wavelets [42]、shearlets [43]、curvelets [44]、contourlets [45]、bandlets [46]。了解并尝试应用时间-频率分析方法 [47]。如果你还没有了解傅里叶分析和卷积的话,这些东西也值得学习。后面提到的这俩是信号处理的基础知识。

最后,尽量多练习、多阅读。有空的时候可以读读像 Google Map-Reduce [34]、Google File System [35]、Google Big Table [36]、The Unreasonable Effectiveness of Data [37] 上的论文。网上也有很多关于机器学习的好书的免费资源,这些也应该多读。[38][39][40] 我找到了一个很好的课程,并且在转发到Github了 [41]。与其直接使用开源的扩展包,不如自己写一份并且对比结果。如果你能从头写一个支持向量机,你就会明白像支持向量、gamma、cost、hyperplanes 等的概念。载入数据并开始训练并不难,难的是理解这所有的概念。

祝好运!

前文提到的参考链接:


提醒:

1. 微信中不支持外链,并且网址很多,手机端阅读体验不好;

2. 推荐收藏本文,在网页版(http://blog.jobbole.com/113592/)跳转查看。


[1] http://radar.oreilly.com/2011/04…

[2] http://numpy.scipy.org/

[3] http://www.r-project.org/

[4] http://hadoop.apache.org/

[5] http://hadoop.apache.org/common/…

[6] http://en.wikipedia.org/wiki/Nai…

[7] http://en.wikipedia.org/wiki/Mix…

[8] http://en.wikipedia.org/wiki/Hid…

[9] http://en.wikipedia.org/wiki/Mea…

[10] http://en.wikipedia.org/wiki/Sup…

[11] http://en.wikipedia.org/wiki/Con…

[12] http://en.wikipedia.org/wiki/Gra…

[13] http://en.wikipedia.org/wiki/Qua…

[14] http://en.wikipedia.org/wiki/Lag…

[15] http://en.wikipedia.org/wiki/Par…

[16] http://en.wikipedia.org/wiki/Sum…

[17] http://radar.oreilly.com/2010/06…

[18] http://aws.amazon.com/ec2/

[19] http://en.wikipedia.org/wiki/Goo…

[20] http://mahout.apache.org/

[21] http://incubator.apache.org/whirr/

[22] http://en.wikipedia.org/wiki/Map…

[23] http://hbase.apache.org/

[24] http://en.wikipedia.org/wiki/Cat…

[25] http://en.wikipedia.org/wiki/Grep

[26] http://en.wikipedia.org/wiki/Find

[27] http://en.wikipedia.org/wiki/AWK

[28] http://en.wikipedia.org/wiki/Sed

[29] http://en.wikipedia.org/wiki/Sor…

[30] http://en.wikipedia.org/wiki/Cut…

[31] http://en.wikipedia.org/wiki/Tr_…

[32] http://zookeeper.apache.org/

[33] http://hive.apache.org/

[34] http://static.googleusercontent….

[35]http://static.googleusercontent….

[36]http://static.googleusercontent….

[37]http://static.googleusercontent….

[38] http://www.ics.uci.edu/~welling/…

[39] http://www.stanford.edu/~hastie/…

[40] http://infolab.stanford.edu/~ull…

[41] https://github.com/josephmisiti/…

[42] http://en.wikipedia.org/wiki/Wav…

[43] http://www.shearlet.uni-osnabrue…

[44] http://math.mit.edu/icg/papers/F…

[45] http://www.ifp.illinois.edu/~min…

[46] http://www.cmap.polytechnique.fr…

[47 ]http://en.wikipedia.org/wiki/Tim…

[48] http://en.wikipedia.org/wiki/Fou…

[49 ]http://en.wikipedia.org/wiki/Con…


提醒:

1. 微信中不支持外链,并且网址很多,手机端阅读体验不好;

2. 推荐收藏本文,在网页版(http://blog.jobbole.com/113592/)跳转查看。


看完本文有收获?请转发分享给更多人

关注「Python开发者」,提升Python技能

<think>嗯,用户想了解传统运维工程师如何转型为SRE工程师,以及需要哪些技能和能力转变。这个问题很专业啊,看来用户可能是运维领域的从业者,正在考虑职业转型。 从用户的问题来看,ta已经对SRE有一定认知,但需要具体的转型路径指导。用户可能面临技能焦虑,想知道传统运维技能和SRE要求的差距在哪里。需要给ta清晰的技能树和可操作的提升建议。 让我梳理下SRE的核心能力要求。参考谷歌SRE模型,核心转变是从被动运维到主动工程化。传统运维侧重“保持系统运行”,而SRE要求“通过工程手段保证可靠性”。这个思维转变是关键。 具体能力差距主要在五个维度: 编程能力是最大门槛。传统运维可能用Shell写脚本,但SRE需要Python/Go开发自动化工具。引用[2]提到研发工程师的Linux知识,其实运维转型也需要补这些。 可靠性工程方面,传统运维熟悉监控告警,但SRE要设计SLI/SLO,实践错误预算等体系化方法。 基础设施即代码(IaC)是必备技能,传统手工运维必须转向Terraform等工具。 协作模式上,引用[1]提到的SRE COE角色很有意思,转型者既要懂开发思维,又要保持运维视角。 最后是文化转变,从“救火英雄”变成“故障预防者”。 用户可能最关心学习路径。建议分三阶段: 先补编程基础,Python+数据结构; 再攻云原生技术栈,K8s+监控体系; 最后深入SRE专项,如混沌工程。 引用[3]的计算机基础也很重要,底层原理能帮助理解分布式系统问题。 对了,用户没问但可能想知道转型时间。根据经验,全职学习需6-12个月,边工作边转型要1-2年。可以推荐些资源,比如谷歌SRE手册、Kubernetes实战课程。 最后要提醒文化适应问题。很多转型失败是因为团队仍用运维KPI考核SRE,这需要组织协同改变。不过用户没问组织层面,暂时不提也罢。</think>以下是从传统运维工程师转型为SRE工程师所需的核心能力提升和思维转变,结合行业实践的系统性总结: --- ### **一、核心能力提升路径** #### 1. **编程与自动化能力(关键突破点)** - **必备技能**: - 掌握至少一门脚本语言(Python/Go)实现自动化(如日志分析、配置批量更新) $$ \text{自动化覆盖率} = \frac{\text{已自动化操作数}}{\text{总操作数}} \times 100\% \quad (\text{目标} > 90\%) $$ - 熟练使用IaC工具(Terraform/Ansible)管理基础设施 - 开发运维工具链(如自动扩缩容系统、故障自愈脚本) - **学习建议**: 从编写巡检自动化脚本开始,逐步实现部署流水线(参考引用[2]的Linux进阶知识) #### 2. **可靠性工程体系** - **核心实践**: - 定义并监控SLI/SLO(如API成功率$ \geq 99.95\% $) - 实施错误预算机制: $$ \text{错误预算} = (1 - \text{SLO}) \times \text{时间窗口} $$ - 构建可观测性体系(Metrics/Logs/Traces联动) - **转型重点**: 从"故障响应"转向"预防性设计"(如容量规划、混沌工程) #### 3. **云原生技术栈** | **传统技能** | **SRE进阶要求** | |--------------|------------------------| | 物理服务器维护 | Kubernetes编排与故障排查 | | 基础监控配置 | Prometheus+Alertmanager精准告警 | | 手动部署 | GitOps持续交付(ArgoCD/Flux) | #### 4. **系统工程思维** - 理解分布式系统CAP理论 - 分析故障链式反应(如雪崩效应$ \frac{d\text{故障节点}}{dt} \propto \text{负载压力} $) - 设计容错架构(断路器、重试策略) --- ### **二、工作模式转变** #### 1. **协作方式进化** ```mermaid graph LR A[传统运维] --> |被动响应工单| B(开发团队) C[SRE] --> |协同设计| D[架构评审] C --> |共享责任| E[故障复盘] C --> |交付SLO报告| F[产品决策] ``` #### 2. **核心文化转变** - **运维目标**: $ \text{传统:系统可用时间} \rightarrow \text{SRE:用户可感知可靠性} $ - **故障处理**: 从"责任追究"到"Blameless文化"(参考引用[1]的SRE方法论) - **资源投入**: 将$ > 50\% $时间用于自动化建设而非手动操作 --- ### **三、分阶段转型建议** 1. **初始阶段(3-6个月)** - 开发自动化运维工具链(如日志分析平台) - 参与On-Call轮值并推动告警优化 - 学习Kubernetes核心概念(Pod/Service/Ingress) 2. **进阶阶段(6-12个月)** - 主导1个SLO定义项目(如API延迟$ P99 < 200ms $) - 实施基础设施代码化(Terraform管理云资源) - 建设监控黄金指标(RED:请求率/错误率/持续时间) 3. **成熟阶段(1年以上)** - 设计容灾演练方案(如AZ级故障模拟) - 开发自治系统(基于ML的异常检测) - 推动开发团队采用可靠性模式(重试/降级) > **关键资源**: > - 谷歌《SRE工作手册》第四、九章(错误预算实践) > - 引用[2]的Linux进阶知识(系统调优、网络诊断) > - CNCF云原生学习路径(https://training.linuxfoundation.org/) > - 引用[3]的计算机体系结构基础(理解硬件瓶颈对软件的影响) --- ### 相关问题 1. SRE工程师如何合理设置错误预算的消耗阈值? 2. 在混合云环境中实施SRE会遇到哪些独特挑战? 3. 如何向管理层证明SRE转型的投资回报率(ROI)? 4. 中小团队在没有专职SRE时如何逐步引入可靠性工程实践?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值