百科问答小站 logo
百科问答小站 font logo



如何看待「机器学习不需要数学,很多算法封装好了,调个包就行」这种说法? 第1页

  

user avatar   yunhua_lee 网友的相关建议: 
      

推荐一本书,俗称“火蜥蜴书”,这本书是我看过的机器学习和深度学习方面写的最好的一本书,对算法的讲解和应用非常到位,没有复杂的数学公式和推导,而是侧重算法的优缺点、应用场景、关键参数,算法本身的原理介绍也是通俗易懂。

======================2017.11.02补充========================

更变态的来了,基本上把神经网络都封装了,更不用说算法了:

keras项目:Keras中文文档

tensorflow的tf.estimator: tf.estimator Quickstart

=======================2017.10.22补充==============================

最近在玩TensorFlow,基本验证了原答案,举几个简单的例子:

tf.sigmoid: sigmoid算法实现

tf.nn.softmax: softmax算法实现

tf.squared_difference:差平方

tf.train.GradientDescentOptimizer:梯度下降算法优化器

tf.nn.relu:relu算法

tf.tanh:双曲正切函数

tf.nn.conv2d:卷积层

tf.nn.max_pool:池化层

一行简单代码:

=======================以下是原答案================================

我记得我刚毕业的时候,老师学长谆谆教导:计算机体系结构很重要,8086指令、段地址、寄存器、内存寻址、指针、深入浅出MFC、冒泡排序、快速排序、链表。。。。。。很重要,如果不懂,肯定不能成为好程序员,就算是同样调用API完成任务,你要是懂这些,关键时刻就你会懂,老板不给你加薪给谁加薪?

然而,毕业后我没有去做嵌入式、没有去做驱动、没有用汇编,以上这些全部都没什么卵用,用MFC也只是调用API,没有自己手写冒泡,后来用Java,HasMap、List等都是调API,也没见老板因为我不懂降我工资,因为我老板也不懂这些,他只看我有没有完成任务,有没有给它赚钱,他不会管我是调用API还是写汇编完成的;也没见哪位同事因为懂这些加薪了,因为工作中根本用不上!

相反,我发现Java虚拟机垃圾回收原理、MySQL索引设计技巧、tcp网络编程模型、CAP、BASE。。。。。。等非常有用,不但解决了业务问题,老板还给我加薪,公司还给我升级,还可以到外面给别人演讲!

所以,回到题主的问题,你应该先问一下自己几个问题:

1)你是做什么专业的

是机器学习理论研究么? -> 如果不懂数学,还是尽早转行吧!

还是将机器学习应用到业务中去?-> 不一定要懂很多数学,确实算法封装好了,应用就可以了,至于说调优,也是调参数,不是调算法,要开创一个新算法,那就属于机器学习的理论研究范畴了。

2)现在机器学习发展是什么阶段?

相当于50年代的纸带编程,还是60年代的汇编?还是70年代的C语言?还是90年代的Java?

我理解机器学习现在类似于70年代的C语言,虽然写起来很方便了,但还是要和指针内存打交道,这里的指针和内存就是机器学习的算法中的数学知识,所以我觉得即使算法封装好了,也要理解基本原理,不然这么多算法,你怎么知道选哪个算法?


user avatar   osttrich 网友的相关建议: 
      

首先,抛一个概念「Leaky Abstraction」,来自开发大神Joel Spolsky在二十年前的一篇文章:

到了今天,这个概念更加适用。

计算机科学发展到现在,几乎每个领域都形成了非常深的技术堆栈。在技术堆栈中,上一层是下一层的一个封装和抽象「Abstraction」,形成层层调用关系。越往上层走,越抽象,开发越简单;越往下层走,越具体,开发越繁琐。而程序员一般都是在最上层进行开发,效率很高。

例如,编写一个网络应用,可以调用开发框架的网络模块,网络模块封装和抽象了操作系统提供的网络API,网络API封装和抽象了HTTPS层,HTTPS层封装和抽象了TCP层,TCP层封装和抽象了IP层,IP层再封装和抽象了物理链路层。程序员只需要使用好高层的网络模块就可以了,更不需要懂HTTPS协议、TCP协议、IP协议等,这些底层的协议都被封装了,都被抽象了。

但是,Joel Spolsky认为:

All non-trivial abstractions, to some degree, are leaky.

意思是说「任何稍微复杂一点的抽象,在一定程度上,都是会出现问题的」。换句话说,堆栈中任何一个抽象层都不能做到完美的封装,在一些特定情况下可能会出现问题,上层用户没办法绕开抽象层而解决问题。这些问题可能是运行效率问题、内存泄露问题、非预期的运行结果、奇怪的bug等等。系统越复杂,堆栈越深,遇到问题的可能性就越大。

如果程序员只懂最上层的技术,一旦底层出现了任何问题,往往就束手无策,根本定位不了问题出现在哪一层,更别说解决问题了。

遇到这样的情况,就考验程序员的功底了。优秀的程序员往往对整个堆栈都有一定的了解,有「下钻」的能力,可以定位出哪一层出了问题,然后可以找解决方案或变通方案。

机器学习也是一样的道理,如果你只懂调用现成的算法包,你可能只是一个「调参师」,不了解模型和算法的工作机制,遇到模型泛化效果差或者训练性能差,你不知道到底是参数不对,还是算法用错了,还是模型就用错了。

知其然,知其所以然,是从事技术工作的一项基本素养。

如果你想在机器学习领域做一些有意义的、高质量的事情,除了机器学习、深度学习知识之外,还有一些准备知识是需要掌握的:

书不用多,挑经典,多看几遍,读透。上面几本书,除了了花书,豆瓣评分都是9分以上。学习数学要先理解思想,然后才能理解公式,这几数学书基本上把思想讲透了。

最后,机器学习巨头Yann LeCun 在《Data Scientists at Work》中说到,要从事机器学习,应尽量学数学、物理、编程、机器学习、计算机视觉等。看看吧,他把物理都列进去了,更凶残。大牛就是这样炼成的。


user avatar   breaknever 网友的相关建议: 
      

我在学术圈和工业界都有过一些经验,讲讲我的看法。

我认为大部分机器学习从业者不需要过度的把时间精力放在数学上,而该用于熟悉不同算法的应用场景和掌握一些调参技巧。好的数学基础可以使你的模型简洁高效,但绝非必要的先决条件。原因如下:

1. 即使你有了一定的数学功底,还是不知道怎么调参或者进行优化。这话说的虽然有点自暴自弃,但扪心自问在座的各位,当你发现accuracy不好、loss很高、模型已经overfitting了,你唰唰唰列列公式玩玩矩阵就知道问题出在哪里了吗?不一定。诚然,懂得更多的统计原理可以帮助推测问题出在了哪里,你可能换了一个loss function或者加了新的regularizer,但结果不一定会更好:(

数学基础之于机器学习从业者很像debugger之于码农,它给了你方向,但不能保证你一定可以解决问题。那怎么能解决问题?只有经验经验经验,别无他法,有时候甚至靠的是直觉。数学基础是好的内功基础,但你调包调多了,其实也慢慢能抓到一些感觉,不必看不起“调包侠”。

2. 工业界可以应用的模型是很有限的,可调的参数也是有限的。工业界选择模型非常看重可解释性,效率,以及和整个系统的整合能力。举例,在我的工作中,大部分时间都在使用Regression和Decision Tree相关的算法(如 Random Forests)。是因为这两个算法最好么?不,恰恰是因为这两个算法稳定及高效,而且容易解释。对于这样的模型,你即使数学能力很强,能调整的参数也是有限的。根据网上的例子和经验,大量的工程师可以在数学基础稍弱的情况下做到很好的效果。

3. 数学/统计知识已经成了既得利益者刻意为外来者建立的一道壁垒。不知道大家有多少人是从事过ML研究的。我个人的观察是做出成绩的ML研究人员是有限的,科班出身的researcher更是远远无法工业界的空缺。所以大家没有必要担心会被转行者抢了饭碗,也没有必要刻意鼓吹一定要懂矩阵,凸优化,等数学知识才配做机器学习。大家都是出来卖的,不必互相为难。说来惭愧,在工作中我常常跟老板说这个人不能用,你要用我这种科班出身的人,但我内心是不赞同的。

每当我看到知乎上有人问机器学习怎么入门,结果大家立马推荐第一本就看PRML和Statistical Learning以及一大堆公开课和数学课的时候,我的内心是崩溃的。各位答主的目标是把所有人都吓回去还是秀一下优越感?

4. 理论模型和实际应用分的是两块不同的蛋糕。承接第2,3点,做理论研究的发力于突破,提出新的模型或者优化方法,做应用的致力于把模型应用于数据上,攫取商业价值。这两者不存在利益冲突,做理论的人有自带正统光环的优势,所以更该显得大度一些。只有“调包”的人越来越多,这个行业才会繁荣,因为证明技术落了地,可以带来实际价值

5. 行业的发展趋势是降低工具的使用难度,这让我们不必反复造轮子。亚马、逊谷歌、微软等各大平台都开放了他们的机器学习工具。以前人们还需要自己写各种模型,好一些的调一下sklearn,但现在Azure ML Studio已经方便到零代码了。年初的时候,我试了一下ML studio,简直方便的可怕,完全是图形拖动连接就可以建立模型,那一刻我仿似看到了自己即将失业。

6. 文艺一点说,我们需要更包容的心态,切勿文人相轻。想要接触了解一门学科,应该先有兴趣,才有探索的积极性。就像我们第一次看到Hello word出现的样子,很多刚入行的人第一次看到机器学习能解决实际问题时,会产生浓厚的兴趣。

我怕的就是所谓的圈内人都说你必须要会矩阵分解,必须要会用trace算导数,必须会优化,才能开始学习机器学习。这个周期太长,很多人连开始的勇气都没有~我觉得不管怎么样,要先动手做起来,发现自己的不足,再去补充需要的东西。

既然学术是自由的,我们就打开大门,欢迎大家都进来坐坐。如果他/她不喜欢,欢迎到隔壁串门。但我们不要给自己家门垒了高高的台阶,说闲人勿进。久而久之,难免门可罗雀。


综上,我觉得应用机器学习模型和技巧既不能完全不懂数学,两眼一抹黑,也不该要求每个从业者都要精通各种数学理论。模型应用者要长存对理论的敬畏之心,不要总想搞个大新闻说“机器学习也不过如此”,但做理论的也不必觉得高人一等,别人都是二等公民。


user avatar   hqythu 网友的相关建议: 
      

女王:求求题主放过我,我可不敢有什么政绩。。。




  

相关话题

  如何看待美国数学学会(AMS)即将在其旗下期刊进行数学论文双盲审? 
  有什么深度学习数学基础书推荐? 
  如何看待学生所认为的「数学是门没用的学科!」? 
  人工智能是当前最好的计算机专业吗? 
  未来作曲编曲会因为AI智能编曲的壮大而彻底失业吗? 
  在计算资源有限的情况下,有什么深度学习的选题可以推荐/避免? 
  一道数列题竞赛的感jio,但明明白白出现在考卷上,请问咋做? 
  怎样理解“单点紧化”? 
  如何向人类同伴证明自己不是一个人工智能? 
  如何看待 2019 年麻省理工选出的全球十大突破性技术,你觉得其中哪个技术会在 5 年内产生巨大影响? 

前一个讨论
因琐事争端把男友论文及资料全删了,有挽回办法吗?怎么才能让男友消气?
下一个讨论
在工作中总是有男领导骚扰,有时候领导会拿前途说事。如何既不让自己受伤害,又不会得罪领导呢?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利