在知乎上看到有人问,在做机器学习方面,质疑数学的意义,觉得会用各种经典模型不就行了。我们做机器学习,要做到知其然,还要知其所以然。我们不能仅仅是会调一调库,跑个程序炼个丹什么的,还要知道底层的数学原理和算法。
我是比较喜欢吴恩达的机器学习课程的,他的课程通俗易懂,课程的理论体系完整,主要讲解了一些基本概念和基本算法,可以使得你对机器学习这一领域产生一个基本的认知。所谓机器学习,不过就是借助数据来获得一个难以通过自然科学规律建模得到的函数,有点像中小学时候做的告诉你若干坐标点来解n元n次方程的感觉。我们通过对数据的计算来得到一个输入输出的映射关系,从而得到一个机器学习模型。为了得到这个函数,我们就需要使用大量数学来支撑我们在此过程中使用到的方法,这个过程必须是有理有据的,而不是凭空臆想的。
不仅仅是机器学习,学习任何学科的知识都是这样,这也是我们大学老师一直在强调的,我们不但要会用,更要知道为什么是这样,这样我们才能做到游刃有余,万变不离其宗。
不是说我们就只关心数学和底层原理,在我们已经了解了底层原理之后,我们再去用库,从而不用去重复造轮子,这样我们做东西当然会很轻松,而且一旦出了问题,我们就知道如何查找问题所在,以及如何解决它。我的观点跟知乎上有的答主是一样的。
至于机器学习的课程是数学多一点还是实践性多一点,这个我觉得是无所谓,看个人喜好。要说课程,我认为不可能一个课程全是数学或者全是实践,必然是理论和实践结合的。吴恩达的课程普遍是视频资料部分理论性很强,然后课后作业的实践又很具有代表性,也很精炼,能够让我们很好地掌握理论知识和实践经验,所以我认为学习他的课程,视频和课后编程练习二者缺一不可,都是精华所在。只看视频,就只知道理论,实践方面确实,做他的作业,才敢说自己完全掌握了。
在学了他的课程之后,在具体的实际应用中,我换一个项目,换一个平台,换一个库,也能够较快地入手,出了问题,解决方案也逃不出ng视频中讲到的那些内容。我想这就是学习其理论的意义吧。
举个例子吧,我在学校学一些计算机类课程方面感受也是一样的。比如说“数据结构”,听老师讲课,我知道了什么是栈、什么是队列和并查集,以及几种排序算法是怎样的一个过程和实现方法。
就排序算法来说,在学之前,我直接调用现成的快速排序算法的库,然后发现两个相等权值的项目有时候A在B之前,有时候B在A之前,然后不知道原因,只能干着急。听了老师讲课之后我才明白原来快排是一种不稳定的排序算法,而且懂了它为什么是不稳定的排序算法。这样一来,我以后就知道,如果需要在相等状况下保持原来的顺序,那么就不应该选择快速排序。
至于栈、队列、并查集,我通过课堂了解了他们的底层原理以及实现之后,上机考试中,我直接调用C++的STL标准库,里面封装有向量、队列、栈以及集合和排序算法等。当别人还在“撒夫夫”地造轮子实现这些才解题的时候,我已经直接调用库写完代码并且提交了,除了其中一个题目代码出了一个小bug,其余题目全部正确,而那个bug我也很快查找到并且重新提交了代码。几天之后,考试成绩出来,结果自然不用说。
所以,大概这就是我们为什么要学习理论了吧,我不是说不能直接应用,不能调用现成的库,而是说,我们应该在此之前,应该对其理论有了解,知道为什么是这样,做到知其然,也知其所以然。我想,您应该已经明白了吧。
(这篇文章为本人在知乎上的回答内容的改编版,并吸收了其他人部分观点)
原知乎提问回答:
为何中国人迷恋吴恩达的机器学习课? – zahet的回答 – 知乎 https://www.zhihu.com/question/65780182/answer/234715954
版权声明本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。本文地址: https://blog.ailemon.net/2017/09/25/why-to-study-math-for-machine-learning/ All articles are under Attribution-NonCommercial-ShareAlike 4.0 |