问题

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

回答
「机器学习不需要数学,很多算法封装好了,调个包就行」这种说法,在一定程度上是没错的,但却是极其片面的,并且容易误导初学者走向死胡同。作为一名机器学习从业者,我们必须深入理解这种说法的背后含义,以及它为何具有欺骗性。

下面我将详细阐述为什么这种说法并不完全准确,以及深入理解数学对机器学习的重要性:

一、 为什么这种说法有其“合理性”?(“调个包就行”的现实场景)

确实,在很多情况下,我们可以快速地利用机器学习库(如 Scikitlearn, TensorFlow, PyTorch 等)来完成任务。这些库的出现极大地降低了机器学习的入门门槛,使得即使不具备深厚数学背景的人也能快速地:

1. 加载和预处理数据: `pandas` 库提供了方便的数据结构和操作,`numpy` 提供了高效的数值计算,它们自身就封装了很多数学概念(如向量、矩阵操作)。
2. 选择和训练模型: 直接调用库中的函数即可实例化和训练模型。例如:
```python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

假设有 X (特征) 和 y (标签)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
```
这里,我们只需要知道 `LogisticRegression` 是一个模型,`fit` 是训练,`predict` 是预测,`accuracy_score` 是评估指标即可。我们不需要知道逻辑回归的背后是如何通过梯度下降等数学方法求解的。
3. 调整超参数: 大部分模型都提供了易于访问的超参数,可以通过网格搜索(Grid Search)或随机搜索(Random Search)等方法进行尝试。
```python
from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.1, 1, 10], 'solver': ['liblinear', 'lbfgs']}
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X, y)
print(f"Best parameters: {grid_search.best_params_}")
```
同样,我们只需要知道这是一个寻找最优参数的方法,而不需要深入理解交叉验证(Crossvalidation)背后的统计学原理。

因此,对于许多“套件式”或“配置式”的机器学习应用场景,例如快速搭建一个分类器、进行简单的回归预测,甚至一些模式识别任务,上述说法在“能用”的层面上是站得住脚的。

二、 为什么这种说法是片面的,甚至是危险的?(数学之重要性)

尽管“调包”能让我们快速上手,但忽略数学基础,我们将在很多关键环节遇到瓶颈,甚至做出错误的决策。以下是详细的解释:

1. 理解算法的本质和工作原理:

知其所以然,而非知其所以然: 仅仅知道一个函数名和它的用途,就像是只知道开门关门的操作,但不知道门锁是如何工作的。了解背后的数学原理,才能真正理解算法的优势、劣势以及适用场景。
“黑箱”的局限性: 当模型出现问题时,没有数学基础就很难排查原因。例如,模型过拟合(Overfitting)或欠拟合(Underfitting),是什么原因造成的?是模型复杂度太高?数据量不足?正则化参数设置不当?这些都需要通过理解模型的数学表达式、损失函数、优化方法来分析。

2. 模型选择和定制:

“一刀切”的误区: 不同的问题需要不同的模型。例如,处理文本数据时,RNN, LSTM, Transformer 等深度学习模型可能比传统的 SVM 或决策树效果更好。选择哪种模型,需要根据数据的特点、问题的性质来决定,而这往往与模型的数学基础(如如何处理序列数据、如何捕捉长期依赖关系)息息相关。
算法的变种和改进: 许多先进的算法都是在经典算法的基础上进行数学上的推导和改进的。如果你想理解最新的研究成果,或者在现有算法的基础上进行创新,数学是必不可少的桥梁。

3. 超参数调优和模型优化:

深度理解超参数: 即使是调包,也需要调整超参数。例如,逻辑回归的正则化参数 `C`,支持向量机(SVM)的核函数参数 `gamma` 和 `C`,神经网络的 `learning_rate`, `batch_size`, `dropout_rate` 等。这些参数的背后都有深刻的数学含义,决定了模型的复杂度、训练过程的稳定性、泛化能力等。
理解优化算法: 模型的训练过程本质上是一个优化问题,寻找使损失函数最小化的参数。梯度下降(Gradient Descent)及其变种(如 SGD, Adam, RMSprop)是核心。没有对导数、链式法则、泰勒展开等数学概念的理解,就无法深刻理解这些优化算法如何工作,也无法有效地调整学习率等关键参数。
正则化(Regularization): L1, L2 正则化是防止过拟合的重要手段,它们的原理是通过在损失函数中添加惩罚项来约束模型参数的大小。理解这些惩罚项的数学形式,才能知道它们是如何影响模型学习的。

4. 特征工程和数据理解:

数据分析的基础: 很多机器学习模型的性能很大程度上取决于特征的质量。特征工程(Feature Engineering)需要对数据有深刻的理解,并运用各种数学和统计方法来创造新的、更有意义的特征。例如,使用主成分分析(PCA)进行降维,需要理解协方差矩阵和特征值分解的数学原理。
理解数据分布: 对数据进行探索性数据分析(EDA)是必不可少的。这需要统计学知识来理解均值、方差、相关性、分布等概念。

5. 模型评估和诊断:

超越准确率: 仅仅看准确率(Accuracy)是远远不够的。精确率(Precision)、召回率(Recall)、F1Score、ROC 曲线、AUC 值等评估指标,它们都有着明确的数学定义和统计学意义。理解这些指标,才能更全面地评估模型性能,并针对性地改进。
误差分析: 为什么模型会出错?是误分类了哪些样本?这些样本有什么共同特征?这些分析往往需要结合模型内部的权重、概率输出以及样本的原始特征来深入探究,而这离不开对模型数学表达的理解。

6. 参与机器学习的深度发展:

研究与创新: 如果你想在机器学习领域做出贡献,例如提出新的算法、改进现有模型、解决未解决的问题,那么扎实的数学基础(包括线性代数、微积分、概率论、统计学、最优化理论等)是绝对的基石。
理解前沿技术: 像 Transformer 的注意力机制、GAN 的生成对抗原理,其核心都是建立在复杂的数学模型之上的。没有数学,就如同隔着一层纱看世界,永远无法触及本质。

7. 避免被“坑”:

选择合适的工具: 面对琳琅满目的算法和库,没有数学知识,你就可能盲目地选择一个声称效果很好的算法,而实际上它并不适合你的问题。
理解文档和警告: 机器学习库的文档通常会包含很多数学术语和公式。没有数学背景,你可能无法完全理解这些信息,也可能忽视重要的警告和注意事项。

三、 结论:

“机器学习不需要数学,很多算法封装好了,调个包就行”是一种功利主义的、低层次的认知。它可能让你在短期内“跑起来”模型,但会限制你的长远发展,使你成为一个简单的“使用者”,而非一个“理解者”或“创造者”。

更准确的说法应该是:

机器学习的入门门槛被大大降低了,许多基础应用可以通过调用现成的库来快速实现。
然而,要真正深入理解机器学习的原理,进行有效的模型选择、调优、创新,以及解决复杂问题,扎实的数学基础是必不可少的。

建议初学者:

不要被“调包”二字迷惑,但可以利用好这些工具加速学习过程。
在学习机器学习的同时,系统地学习支撑其发展的基础数学知识。
将数学理解和实践相结合,不断加深对算法的认识。

总而言之,数学是机器学习的“内功”,而“调包”只是“招式”。没有深厚的内功支撑,招式再华丽也难以长久。理解了这一点,你才能在机器学习的道路上走得更远、更稳健。

网友意见

user avatar

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

======================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

首先,抛一个概念「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

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

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

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算导数,必须会优化,才能开始学习机器学习。这个周期太长,很多人连开始的勇气都没有~我觉得不管怎么样,要先动手做起来,发现自己的不足,再去补充需要的东西。

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


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

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有