在我之前写的“给年轻程序员们的10点启示”以及“如何成为一名优秀的全栈工程师”中都提到了好奇心对于一个优秀程序员的重要性。但我同时发现,由于我们每天都会接收大量的资讯,除了好奇心,你还需要有能力去筛选出那些真正能够给你带来启发和帮助的内容。而这正是技匠开始写【好奇心】这个专题的原因,我希望通过不长的文字让你在了解一件新事物(可能是一个新的技术领域)的同时,能够带给你更多启发性的思考。
这个专题的第一期是关于机器学习的,之所以选择这个主题,是因为:
- 我是一个围棋爱好者,深知其复杂和深奥,所以当我看到AlphaGo战胜世界冠军李世石之后,感到非常震惊。然而,当我试着去探究AlphaGo是如何战胜人类顶级棋手时,看到的却大多是那些谈及人工智能(机器学习)但仅仅停留于表面的科技评论文章。
- 我试着去寻找更多关于机器学习资料,看到的却又是那一本本充满深奥高等代数和高等几何学算法的书籍或论文,这令我感到畏惧,并且退缩了。
- 直到,我发现Coffee with a Googler中Laurence Moroney对Google的Devloper Advocate (网上译为:开发大使) Joshua Gordon的一段访谈,我才一下豁然开朗,通过这短短几分钟时间,让我明白了什么是机器学习,它与传统软件开发有什么区别以及有效学习它的方法。
- 我很受启发,因为它对我们打破原有软件开发思维模式非常有帮助。
- 由于这是一段Youtube视频,并且是全英文的,很多朋友可能没有看,因此,我决定将它译为文字版本后分享给大家。
下面就带来Laurence对Joshua的精彩访谈内容:
Laurence: 今天我很荣幸与来自Google的工程师Joshua Gordon来一起聊一聊什么是机器学习,它是如何工作的,为什么它如此重要,以及如何更有效地学习它。
Laurence:Hi Joshua,很多人其实并不了解什么是机器学习,以及它是如何工作的?
Joshua:是的,机器学习指的是让机器从大量的例子中进行学习,而不是通过传统的编写规则的形式来告诉他怎么做。简单来说,在传统程序开发中,你需要编写很多规则去告诉计算机如何解决特定的问题。而对于机器学习,你写的却是一套特定的算法让计算机为我们去发现这些规则,然后再基于这些规则去解决问题。
** Laurence:**比如说一些视觉上的模式匹配或其他一些识别技术?
Joshua:确实是这样。机器学习的美妙之处在于,我们所编写的算法是用来研究数据所蕴含的潜在模式的,因此它可以用来解决成千上万的问题,而不是某一个特定问题。
假设我们需要用程序来识别一串数字,传统的做法是,我们需要通过硬编码来写很多识别规则。然而在机器学习中,我们通过算法让计算机通过大量的采样数据,自己去发现那些规则,这也是为什么我们只需要写一个算法,就能同时解决诸如语音识别,图像识别,甚至医药领域中的疾病识别等等很多问题的原因。
其实所有可以基于采样数据来识别和解决的问题,都可以通过机器学习来处理。
Laurence:现在我基本明白了什么是机器学习了,那么如何学习它呢?是否我们需要懂得一些特定的编程语言,你会用Java或者Python来教学对吗?对于那些想要学习成为数据科学家的人,又有哪些具体的要求吗?
Joshua:应该说你不需要掌握太多的编程知识,只需要一些最基本的Python或Java编程能力就可以了,这里的"基本"是指你可以运行脚本以及处理一些常见的环境问题。
另外,还会用到一些最基础的高中代数和几何知识,当然不会很复杂,因为如果你现在问我Sin和Cos到底是指什么,那我也只能去Google搜索了。只需要理解一些常识就好。
Laurence:好的,明白了。那你又打算如何来教我们呢?
Joshua:我准备从0开始通过示例一步一步教你怎么做。我看到一些其他的机器学习课程,讲的都是些深奥的代数算法,其实你没有必要去学习那些,我也不清楚所用的很多第三方机器学习库内部到底是如何实现的。我们采用一种更加通用的学习方法,结合实际的例子一步步去实现它,只有在很少的一些地方我们才会谈到一点点代数,而且我们也不会详细去说明用到的某个函数的原理,我只会告诉你使用这个代数函数的目的是什么。
Laurence:我们不会去关注具体的机器学习算法,而是知道如何利用它们达到我们的目的。
Joshua:是这样的,当然很多人还会对自己所写的机器学习程序的精度感兴趣。假设你需要写一个机器学习程序来区分苹果和橙子,你可能希望知道你的程序到底有多精确?其实,我可以用一行代码来实现这个算法:Math.random()。
Laurence:哈哈,那是个很棒的程序啊,精确度能达到50%
Joshua:是的,另一个可以用来描述精确性的方法是,利用空气来描述这种精确性,比如:假设空气越少,那么获得的精度会更高,由此我们可以得到一个描述机器学习算法精度的化学方程式,我们需要尽可能地让这个方程式中的空气尽可能少,这样我们就能得到更高的精确度了。我会在我的课程中详细地说明如何去做到这一点。
Laurence:明白了。刚才你提到会用Java和Python,那么是否也会用到一些处理机器学习的第三方库和包呢?
Joshua:是的,我会用到一些第三方库,首先是TLDR,它能帮助开发人员很有效地去实现那些机器学习算法,我也会用到一些来自不同大学的开源库,使用这些开源库,几乎就能解决80-90%的问题了。
Laurence:哦,那就是说几乎大部分问题都可以通过开源库去实现了?
Joshua:是的,可以解决大部分普通问题,但如果你需要解决的是特别大的问题,那么你可能会需要借助云,比如说使用Google API,但这只会在我课程的最后才会提到,并且完全取决于你,它是可选的。
Laurence:那么你课程里的那些代码呢?你会放在哪里?
Joshua:全都会放到GitHub上。
Laurence:好的,谢谢你那么有激情的谈话,我从这短短几分钟的交谈中学到了很多关于机器学习的知识。
Joshua:哈哈,我喝Google提供的免费咖啡。
Laurence:再次感谢Joshua,期待你的机器学习课程。
Joshua:谢谢。
技匠:看过这段访谈让我明白了机器学习与传统编程的最大区别:从写规则告诉计算机如何去解决问题,转变为让计算机自己去发现规则并解决所有类似问题。这给我带来了很多启发,可以预见机器学习将会成为下一个炙手可热的软件开发领域,得到快速的发展。如果,你也希望成为一个数据科学家(Data Scientist)或是对机器学习感兴趣,不妨也跟着Joshua一起来学(我看了Joshua机器学习课程的第一课,并使用了5分钟就完成了我的第一个用来识别苹果和橙子的机器学习程序)。
如果,你对机器学习以及Joshua的这套课程有兴趣,可以留下喜欢或在点评中告诉我你希望我带来哪一种分享方式(在简书中分享文字翻译教程或下载他的视频教程并配上字幕),我会根据大家的反馈确定是否继续翻译或制作这套课程的。
相关访谈及视频教程
技匠社
技匠,以上内容欢迎大家分享到朋友圈/微博等。如需转载,请通过简信联系授权。谢谢大家!
网友评论
不懂技术的我看了也有不少收获~
辛苦分享啦~
向你学习=3=