Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

你会给想学习机器学习的软件工程师提出什么建议? #1861

Merged
merged 5 commits into from
Jul 10, 2017
Merged

你会给想学习机器学习的软件工程师提出什么建议? #1861

merged 5 commits into from
Jul 10, 2017

Conversation

lsvih
Copy link
Member

@lsvih lsvih commented Jul 6, 2017

Issue: #1847

@xunge0613
Copy link
Contributor

校对认领 @sqrthree
@lsvih 大佬窝又来了~

@linhe0x0
Copy link
Member

linhe0x0 commented Jul 7, 2017

@xunge0613 好的呢 🍺

@Tina92
Copy link

Tina92 commented Jul 7, 2017

@sqrthree 认领校对

@linhe0x0
Copy link
Member

linhe0x0 commented Jul 7, 2017

@Tina92 妥妥哒 🍻

增加校对者
Copy link

@Tina92 Tina92 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sqrthree 校对完成。译者棒棒哒!👍


# 你会给想学习机器学习的软件工程师提出什么建议?

这取决于这名软件工程师的受教育背景,以及他希望掌握机器学习的哪一部分。为了具体讨论,现在假设这是一名初级工程师,他读了 4 年本科,从业 2 年,现在想从事计算广告学(CA)、自然语言处理(NLP)、图像分析、社交网络分析、搜索、推荐排名相关领域。现在,让我们从机器学习的必要课程开始讨论(声明:下面的清单很不完整,如果您的论文没有被包括在内,提前向您抱歉)。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 这取决于这名软件工程师的受教育背景

  • 这很大一部分都取决于这名软件工程师的背景

很多的机器学习算法、统计学原理、模型优化都依赖线性代数。这也解释了为何在深度学习领域 GPU 要优于 CPU。在线性代数方面,你至少得熟练掌握以下内容:

- 标量、向量、矩阵、张量。你可以将它们看成零维、一维、二维、三维与更高维的对象,可以对它们进行各种组合、变换,就像乐高玩具一样。它们为数据变换提供了最基础的处理方法。
- 特征向量、标准化、矩阵近似、分解。实质上这些方法都是为了方便线性代数的运算。如果你想对一个矩阵运算进行分析(例如检查神经网络中梯度消失问题,或者检查强化学习算法发散的问题),你得了解矩阵与向量应用了多少种缩放方法。而低阶矩阵近似与 Cholesky 分解可以帮你写出性能更好、稳定性更强的代码。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 如果你想对一个矩阵运算进行分析

  • 如果你想分析一个矩阵是如何运算的

如果你想进一步优化算法的话,这是必修课。它对于理解核方法与深度学习很有帮助,不过对于图模型及采样来说它并不重要。
- 推荐书籍
[《Serge Lang, Linear Algebra》](http://www.amazon.com/Linear-Algebra-Undergraduate-Texts-Mathematics/dp/0387964126)
很基础的线代书籍,很适合本科生。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本科生 => 还为毕业的学生


Steven Boyd 与 Lieven Vandenberghe [合著的书](http://stanford.edu/~boyd/cvxbook/)可以说是这个领域的规范书籍了,这本书非常棒,而且是免费的,值得一读;此外,你可以在 [Boyd 的课程](http://web.stanford.edu/~boyd/)中找到很多很棒的幻灯片;[Dimitri Bertsekas](http://www.mit.edu/~dimitrib/home.html) 写了一系列关于优化、控制方面的书籍。读通这些书足以让任何一个人在这个领域立足。

- 随机梯度下降(SDG)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SDG => SGD


不过,这样的做法对并行化计算提出了挑战。我们于 2009 年发表的[《Slow Learners are Fast》](http://arxiv.org/abs/0911.0491)论文可能就是这个方向的先导者之一。2013 年牛峰等人发表的[《Hogwild》](https://www.eecs.berkeley.edu/~brecht/papers/hogwildTR.pdf)论文给出了一种相当优雅的无锁版本变体。简而言之,这类各种各样的算法都是通过在单机计算局部梯度,并异步更新共有的参数集实现并行快速迭代运算。

随机梯度下降的另一个难题就是如何控制过拟合(例如可以通过正则化加以控制)。另外还有一种解决凸优化的惩罚方式叫近端梯度算法(PDG)。PDG 算法中最流行的当属 Amir Beck 和 Marc Teboulle 提出的 [FISTA 算法](http://people.rennes.inria.fr/Cedric.Herzet/Cedric.Herzet/Sparse_Seminar/Entrees/2012/11/12_A_Fast_Iterative_Shrinkage-Thresholding_Algorithmfor_Linear_Inverse_Problems_(A._Beck,_M._Teboulle)_files/Breck_2009.pdf) 了。相关代码可以参考 Francis Bach 的 [SPAM toolbox](http://spams-devel.gforge.inria.fr/)。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 近端梯度算法(PDG)

  • 原文是 proximal gradient algorithms 不是 proximal gradient descent

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里我打错字了,应该是 PGD(proximal gradient descent)


- 一致性与通信

这一切的基础都是 Leslie Lamport 的 [PAXOS](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) 协议。它解决了不同机器(甚至部分机器不可用)的一致性问题。如果你曾经使用过版本控制工具,你应该可以直观地明白它是如何运行的——比如你有很多机器(或者很多开发者)都在进行数据更新(或更新代码),在它们(他们)不随时进行交流的情况下,你会如何将它们(他们)结合起来(不靠反复地求 diff)?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

diff 应该翻译为中文

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

diff 为检查文件不同的命令,这里不译应该没什么问题


- 容错机制、规模化与云

   最简单的自己运行自己的算法的方法当然就是使用 [Amazon AWS](http://aws.amazon.com)、[Google GWC](http://console.google.com)、[Microsoft Azure](http://azure.microsoft.com)或者 [其它各种各样的服务商](http://serverbear.com/)的服务啦!一次性启动 1,000 台服务器,意识到自己坐拥如此之大的合法“僵尸网络”是多么的让人兴奋!之前我在 Google 工作,曾在欧洲某处接手 5,000 余台高端主机作为主题模型计算终端,它们是我们通过能源法案获益的核电厂相当可观的一部分资源。我的经理把我带到一旁,偷偷告诉我这个实验是多么的昂贵……
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 最简单的自己运行自己的算法的方法当然就是使用

  • 最简单的自己运行自己的算法的方法当然就是使用你可以找到的

@lsvih
Copy link
Member Author

lsvih commented Jul 8, 2017

@xunge0613 求大佬抽空校对一下>_<

Copy link
Contributor

@xunge0613 xunge0613 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sqrthree 校对完毕。
@lsvih 翻译得很棒,语句通畅,表达很地道,对于专业术语也翻译得很准确。有些排版的小细节需要稍微调整一下~
非常厉害~~

ps:大佬可以改下我的校对人名字咩?吃土小2叉~

[《Bela Bolobas, Linear Analysis》](http://www.amazon.com/Linear-Analysis-Introductory-Cambridge-Mathematical/dp/0521655773)
这本书目标人群是那些想做数学分析、泛函分析的人。当然它的内容更加晦涩难懂,但更有意义。如果你攻读 PhD,值得一读。
[《Lloyd Trefethen and David Bau, Numerical Linear Algebra》](http://www.amazon.com/Numerical-Linear-Algebra-Lloyd-Trefethen/dp/0898713617)
这本书是同类书籍中较为推荐的一本。[《Numerical Recipes》](http://www.amazon.com/Numerical-Recipes-Scientific-Computing-Second/dp/0521431085/)也是一本不错的书,但是里面的算法略为过时了。另外,推荐 Golub 和 van Loan 书[《Matrix Computations》](http://www.amazon.com/Computations-Hopkins-Studies-Mathematical-Sciences/dp/1421407949/)。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

另外,推荐 Golub 和 van Loan 书《Matrix Computations》

=>

另外,推荐 Golub 和 van Loan 合著的书《Matrix Computations》

建议加上“合著的”,读起来通顺一些,也与后文翻译方式相同


不过,这样的做法对并行化计算提出了挑战。我们于 2009 年发表的[《Slow Learners are Fast》](http://arxiv.org/abs/0911.0491)论文可能就是这个方向的先导者之一。2013 年牛峰等人发表的[《Hogwild》](https://www.eecs.berkeley.edu/~brecht/papers/hogwildTR.pdf)论文给出了一种相当优雅的无锁版本变体。简而言之,这类各种各样的算法都是通过在单机计算局部梯度,并异步更新共有的参数集实现并行快速迭代运算。

随机梯度下降的另一个难题就是如何控制过拟合(例如可以通过正则化加以控制)。另外还有一种解决凸优化的惩罚方式叫近端梯度算法(PGD)。最流行的当属 Amir Beck 和 Marc Teboulle 提出的 [FISTA 算法](http://people.rennes.inria.fr/Cedric.Herzet/Cedric.Herzet/Sparse_Seminar/Entrees/2012/11/12_A_Fast_Iterative_Shrinkage-Thresholding_Algorithmfor_Linear_Inverse_Problems_(A._Beck,_M._Teboulle)_files/Breck_2009.pdf) 了。相关代码可以参考 Francis Bach 的 [SPAM toolbox](http://spams-devel.gforge.inria.fr/)。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

最流行的当属 Amir Beck 和 Marc Teboulle 提出的 FISTA 算法 了。

=>

最流行的当属 Amir Beck 和 Marc Teboulle 提出的 FISTA 算法了。

去除多余空格


- 非凸优化方法

许多的机器学习问题是非凸的。尤其是与深度学习相关的问题几乎都是非凸的,聚类、主题模型(topic model)、潜变量方法(latent variable method)等各种有趣的机器学习方法也是如此。一些最新的加速技术将对此有所帮助。例如我的学生 [Sashank Reddy](http://www.cs.cmu.edu/~sjakkamr/) 最近展示了如何在这种情况下得到良好的[收敛](http://arxiv.org/abs/1603.06160) [速率](http://arxiv.org/abs/1603.06159)。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

例如我的学生 Sashank Reddy 最近展示了如何在这种情况下得到良好的收敛 速率
=>
例如我的学生 Sashank Reddy 最近展示了如何在这种情况下得到良好的收敛速率

去掉多余空格


- 分布式哈希表

它是 [memcached](https://memcached.org/)、[dynamo](http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf)、[pastry](http://research.microsoft.com/en-us/um/people/antr/PAST/pastry.pdf) 以及 [ceph](http://docs.ceph.com/docs/hammer/rados/) 等的技术基础。它们所解决的都是同一件事情——如何将对象分发到多台机器上,从而避免向中央存储区提出请求。为了达到这个目的,你必须将数据位置进行随机但确定的编码(即哈希)。另外,你需要考虑到当有机器出现故障时的处理方式。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

它们所解决的都是同一件事情——如何将对象分发到多台机器上,
=>
它们所解决的都是同一件事情 —— 如何将对象分发到多台机器上,

破折号前后需要增加空格


- 容错机制、规模化与云

最简单的自己运行自己的算法的方法当然就是使用你可以找到的 [Amazon AWS](http://aws.amazon.com)、[Google GWC](http://console.google.com)、[Microsoft Azure](http://azure.microsoft.com)或者 [其它各种各样的服务商](http://serverbear.com/)的服务啦!一次性启动 1,000 台服务器,意识到自己坐拥如此之大的合法“僵尸网络”是多么的让人兴奋!之前我在 Google 工作,曾在欧洲某处接手 5,000 余台高端主机作为主题模型计算终端,它们是我们通过能源法案获益的核电厂相当可观的一部分资源。我的经理把我带到一旁,偷偷告诉我这个实验是多么的昂贵……
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Microsoft Azure或者 其它各种各样的服务商的服务啦!
=>
Microsoft Azure 或者 其它各种各样的服务商的服务啦!

这里需要一个空格君


我故意把这块内容放在文章的末尾,因为几乎所有人都认为它是(它的确是)机器学习的关键因而忽视了其它内容。统计学可以帮你问出好的问题,也能帮你理解你的建模与实际数据有多接近。

大多数图形方法、核方法、深度学习等都能从“问一个好的问题”得到改进,或者说能够定义一个合理的可优化的目标函数。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

大多数图形方法、核方法、深度学习等都能从“问一个好的问题”得到改进,或者说能够定义一个合理的可优化的目标函数。
=>
大多数图模型、核方法、深度学习等都能从“问一个好的问题”得到改进,或者说能够定义一个合理的可优化的目标函数。

Graphic Models 建议翻译为图模型,术语。

大多数图形方法、核方法、深度学习等都能从“问一个好的问题”得到改进,或者说能够定义一个合理的可优化的目标函数。

- 统计学相关资料
[Larry Wasserman](http://www.stat.cmu.edu/~larry/) 的书[《All of Statistics》](http://www.stat.cmu.edu/~larry/all-of-statistics/)很好地介绍了统计学。或者你也可以看看 David McKay 的 [《Machine Learning》](http://www.inference.phy.cam.ac.uk/itprnn/book.pdf)一书,它是免费的,内容大且全。此外还有很多好书值得一看,例如 [Kevin Murphy](https://mitpress.mit.edu/books/machine-learning-0) 的、[Chris Bishop](http://research.microsoft.com/en-us/um/people/cmbishop/prml/) 的、以及 [Trevor Hastie、Rob Tibshirani 与 Jerome Friedman](http://statweb.stanford.edu/~tibs/ElemStatLearn/) 合著的书。还有,Bernhard Scholkopf 和我也 [写了一本](https://mitpress.mit.edu/books/learning-kernels)。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

或者你也可以看看 David McKay 的 《Machine Learning》一书,它是免费的,内容大且全。
=>
或者你也可以看看 David McKay 的 《Machine Learning》一书,它是免费的,内容丰富而全面。

感觉用大来修饰“内容”有点不通顺……

大多数图形方法、核方法、深度学习等都能从“问一个好的问题”得到改进,或者说能够定义一个合理的可优化的目标函数。

- 统计学相关资料
[Larry Wasserman](http://www.stat.cmu.edu/~larry/) 的书[《All of Statistics》](http://www.stat.cmu.edu/~larry/all-of-statistics/)很好地介绍了统计学。或者你也可以看看 David McKay 的 [《Machine Learning》](http://www.inference.phy.cam.ac.uk/itprnn/book.pdf)一书,它是免费的,内容大且全。此外还有很多好书值得一看,例如 [Kevin Murphy](https://mitpress.mit.edu/books/machine-learning-0) 的、[Chris Bishop](http://research.microsoft.com/en-us/um/people/cmbishop/prml/) 的、以及 [Trevor Hastie、Rob Tibshirani 与 Jerome Friedman](http://statweb.stanford.edu/~tibs/ElemStatLearn/) 合著的书。还有,Bernhard Scholkopf 和我也 [写了一本](https://mitpress.mit.edu/books/learning-kernels)。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

还有,Bernhard Scholkopf 和我也 写了一本
=>
还有,Bernhard Scholkopf 和我也写了一本


统计学算法本质上也是个计算机科学方面的问题。但是统计学的算法与计算机科学的最大区别在于,统计学是将计算机作为一个工具来设计算法,而不是作为一个黑箱进行调参。我很喜欢[这本 Michael Mitzenmacher 与 Eli Upfal 合著的书](http://www.amazon.com/Probability-Computing-Randomized-Algorithms-Probabilistic/dp/0521835402),它涵盖了很多方面的问题,并且很容易读懂。另外如果你想更深入地了解这个“工具”,请阅读[这本 Rajeev Motwani 和 Prabhakar Raghavan 合著的书籍](http://www.amazon.com/Randomized-Algorithms-Rajeev-Motwani/dp/0521474655)。这本书写的很棒,但是没有统计学背景很难理解它。

这篇文章已经写的够久了,不知道有没有人能读到这里,我要去休息啦。现在网上有很多很棒的视频内容可以帮助你学习,许多教师现在都开通了他们的 Youtube 频道,上传他们的上课内容。这些课程有事可以帮你解决一些复杂的问题。这儿是[我的 Youtube 频道](https://www.youtube.com/user/smolix/playlists)欢迎订阅。顺便推荐 [Nando de Freitas 的 Youtube 频道](https://www.youtube.com/user/ProfNandoDF),他比我讲的好多了。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这些课程有事可以帮你解决一些复杂的问题。
=>
这些课程有时可以帮你解决一些复杂的问题。

有事=> 有时


统计学算法本质上也是个计算机科学方面的问题。但是统计学的算法与计算机科学的最大区别在于,统计学是将计算机作为一个工具来设计算法,而不是作为一个黑箱进行调参。我很喜欢[这本 Michael Mitzenmacher 与 Eli Upfal 合著的书](http://www.amazon.com/Probability-Computing-Randomized-Algorithms-Probabilistic/dp/0521835402),它涵盖了很多方面的问题,并且很容易读懂。另外如果你想更深入地了解这个“工具”,请阅读[这本 Rajeev Motwani 和 Prabhakar Raghavan 合著的书籍](http://www.amazon.com/Randomized-Algorithms-Rajeev-Motwani/dp/0521474655)。这本书写的很棒,但是没有统计学背景很难理解它。

这篇文章已经写的够久了,不知道有没有人能读到这里,我要去休息啦。现在网上有很多很棒的视频内容可以帮助你学习,许多教师现在都开通了他们的 Youtube 频道,上传他们的上课内容。这些课程有事可以帮你解决一些复杂的问题。这儿是[我的 Youtube 频道](https://www.youtube.com/user/smolix/playlists)欢迎订阅。顺便推荐 [Nando de Freitas 的 Youtube 频道](https://www.youtube.com/user/ProfNandoDF),他比我讲的好多了。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他比我讲的好多了。
=>
他比我讲得好多了。


- 容错机制、规模化与云

最简单的自己运行自己的算法的方法当然就是使用你可以找到的 [Amazon AWS](http://aws.amazon.com)、[Google GWC](http://console.google.com)、[Microsoft Azure](http://azure.microsoft.com) 或者 [其它各种各样的服务商](http://serverbear.com/)的服务啦!一次性启动 1,000 台服务器,意识到自己坐拥如此之大的合法“僵尸网络”是多么的让人兴奋!之前我在 Google 工作,曾在欧洲某处接手 5,000 余台高端主机作为主题模型计算终端,它们是我们通过能源法案获益的核电厂相当可观的一部分资源。我的经理把我带到一旁,偷偷告诉我这个实验是多么的昂贵……
Copy link
Contributor

@xunge0613 xunge0613 Jul 9, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

学习这些内容最简单的方法就是在云服务器上运行各种算法,至于云服务可以找 Amazon AWSGoogle GWCMicrosoft Azure 或者其它各种各样的服务商

这样怎样?其实我也不清楚怎么翻比较好,所以刚才也没给出自己的建议 =。=

@lsvih
Copy link
Member Author

lsvih commented Jul 9, 2017

@sqrthree 根据校对意见修改完毕

@xunge0613
Copy link
Contributor

LGTM

Copy link
Member

@linhe0x0 linhe0x0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@linhe0x0 linhe0x0 merged commit 68e3625 into xitu:master Jul 10, 2017
@linhe0x0
Copy link
Member

@lsvih 已经 merge 啦~ 快快麻溜发布到掘金专栏然后给我发下链接,方便及时添加积分哟。

RichardLeeH pushed a commit to RichardLeeH/gold-miner that referenced this pull request Jul 10, 2017
…slate

# By sqrtthree (4) and others
# Via 根号三
* 'master' of https://github.com/xitu/gold-miner:
  你不需要基于 CSS Grid 的栅格布局系统 (xitu#1863)
  更好的表单设计: 每一页,一件事(实例研究) (xitu#1862)
  你会给想学习机器学习的软件工程师提出什么建议? (xitu#1861)
  以排印为本:从内容出发 (xitu#1841)
  WAR 还是 JAR,你应该用哪种格式打包? (xitu#1839)
  🚀 添加文章『你不需要基于 CSS Grid 的栅格布局系统』到文章列表
  🚀 添加文章『开发者眼中 iOS 11 都更新了什么?』到文章列表
  🚀 添加文章『Node.js 子进程:你应该知道的一切』到文章列表
  🚀 添加文章『Android 中的定时任务调度』到文章列表
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants