数学,你在为谁膨胀?

数学,你在为谁膨胀?   今天聊数学基础

数学,你在为谁膨胀?

最近,总看到有人在网上推荐机器学习相关的数学书,今天专门找了找,才发现不是一本,是好几本,甚至一些子领域子问题也专门出了一本书,譬如线性代数在机器学习中的使用,又譬如自然语言处理使用的数学基础,等等。颇有一点出书的比看书的还多的意思。值得推荐的也发现了一些,找机会单聊。当然,我是挺愿意这样讲基础的书多出几本的,虽然生活中我们都喜欢一站式服务,基础知识最好也出个一本通之类的,买回来读完就啥都会了。不过,数学知识体系太庞大,基础概念又多,总是会挂一漏万,读着读着就磕巴了。要全都写进去,书又肯定会厚得吓人,连翻开的勇气也没有了。不过,这里我还是坚持一个观点,数学虽好,不过也不用贪杯哟。如果只为懂机器学习,数学真的不用懂太多。

这样说,肯定会有人不服气:你看,随便一本从数学角度讲机器学习的书至少能写400页,如果再加一点推导,写到700页还只是起步价。这是什么概念?要知道机器学习一般会从数学或者编程两种角度中选择一种来讲,而通常一本从编程角度讲机器学习的书两三百页也就打住了,这里面还算上了大段大段的代码,数学一本顶编程三本,想象一下你就知道,这得学多少数学。

是这样。不过,里面很多数学,就跟我们编写的用户注册功能的代码一样,很大一部分都是条件判断,与核心原理无关。什么意思呢?就算没真的编写过用户注册功能也不要紧,我们肯定都注册过新账户,稍微回忆一下就知道了:用户注册功能最核心的部分就是获取用户输入的用户名以及对应密码的信息,然后存入数据库。通常可能用短短几行。但是,我们需要对用户输入的信息,做大量合规性判断,譬如用户名是不是纯字母和数字,是不是已经存在,密码是不是符合安全规范,譬如长度为6位,包含大小写和特殊字符等等,都需要写条件判断。这些功能整个实现下来,代码就写得很长,而且对输入信息的限制条件越多,这样的合规性条件判断就越多,代码就越长,加点其他的显示效果之类的代码再配上注释,写个上百行不是梦想。

但不管最终代码看起来有多膨胀,别忘了核心原理就是存入数据库那两行。这里我们举个机器学习的例子。支持向量机是机器学习中最复杂的算法之一,scikit-learn里实现的LinearSVR,代码从254行一直写到435行,长度简直惊人!可是这都是核心代码吗?不是,注释就占了一大半,剩下纯代码的部分,变量初始化占了一部分,异常处理占一部分,再加上前面我们说的条件判断又占了一部分,能给核心功能留下的空间真的不多了,满打满算也就十行。

数学,你在为谁膨胀?

机器学习里的数学也是一样的道理。数学给我们的第一印象一般都是——数学这门课“难学”,不过参考答案“严谨”。具体来说,数学的每个概念每项操作,都必须有定义,定义可能包含其他概念,这就又有定义。每个概念的使用都必须满足一定条件,也就是包含合规性判断,再加上杂七杂八的“注释”,想不膨胀也难了——不过别忘了,核心代码也就两行。

这就是我所建议的,学机器学习,首先得明确动机。如果你更关注的是算法本身的原理,那数学不过是把原理表达出来所使用的一种语言罢了,犯不着把有限的时间精力耗费在与各种证明推导的死磕上。

不过,问题当然还没完,机器学习的数学里哪些是“核心代码”,哪些又是合规性判断,怎么进行区别?别急,话题很大,这一篇是聊不完了。敬请期待......下次再聊!

数学,你在为谁膨胀?

作者简介:

莫凡——新技术深度爱好者,曾经从事信息安全前沿技术跟踪研究和数据分析工作,在各类信息安全类技术期刊杂志发表文章五十余篇,现转为投身高端知识“白菜化”项目,希望能让将更多听起来高大上的名词沾一沾人间烟火,成为日常中生活真正用得上的知识,著有《机器学习算法的数学解析与Python实现》。个人公众号“睡前机器学习”,个人知乎号“木羊”。

数学,你在为谁膨胀?

数学,你在为谁膨胀?

 点击阅读原文,直达数据库专场