工作生活

做算法,数学专业的我教你突破数学关

2019-06-30  本文已影响0人  机智的叉烧

对应大多数人而言,做机器学习等各种算法,最难突破的就两个点,一个是计算机能力,另一个是数学能力,由于现在有关技术逐渐成熟,教程和课程都逐渐完善,另外这个领域多半是计算机专业出身的同学,因此计算机能力慢慢变成了基操,大家都觉得还合适,但是数学,从本科各位同学学高数就开始嗷嗷叫了,然而要吃算法这碗饭,不得不迈过这座山,所以,还是得生啃。

而我,是从比高数更难的数分,比现代更难的高代过来,走过实变复变出来的一个普通的数学系同学,跌跌撞撞的走来感觉有些经验可以和大家分享,结合着我昨天收集的信息,给大家谈谈在这个领域,数学的作用以及一些学习方法吧,如有补充可以看看评论。

懒人目录

擅长数学的好处

在知乎里很多人把数学系的人干其他事情称为“猛虎下山”,因为了解了基本的方法论后对于具体问题会有着独特的角度和更为严谨的思维方法。那么在算法领域,擅长数学会有什么好处,我来简单讨论一下。

首先,擅长数学的人,会对模型有更加深入的理解。虽然现在在技术上,tf、sklearn之类的已经能够支持基本算法的操作,但是,对于不理解模型的人,那终究是积木,只能通过搭积木+实验的方法,上限明显,理解了理论,你能针对问题给处更为细节的方案,更加敢于大刀阔斧的进行修改,大幅提升性能。

第二,数据敏感性与分析诊断能力。这个是来源于常年看着数据和进行计算后得到的经验,不少职场老司机同样也有,在进行分析的时候经常能发现边缘但是关键的问题,并在实施前就想好策略解决,另一方面对于出现的问题,能迅速通过计算和分析得到结果,之前的文章“评价指标设计”里面的自己设置评价指标,其实就依赖这种能力。虽说这种能力前辈都能有,但是一进职场就有,这个就和你的数学能力有关了。

第三,更加精准的理解和表达。对于模型你能写出足够精细的伪代码,或者是能用公式表达,那你对这个模型的理解才真正的到家,可以参考现在科研的论文,公式已经是交流的基操了。

第三,就是笔面试了,笔面试常常会问你一些有关模型推导方面的问题,这就一定会涉及数学了,手写支持向量机,推导BP的反向传播,这都是最基本的,然后是一些方向专精的,推荐系统里面的FM,NLP中的W2V等等,最最功利的,我们要理解这些模型并在面试中说个所以然来,那就肯定要懂数学。

算法领域对数学的要求

那么问题来了,算法领域需要数学到什么程度呢,个人的理解,你越做的深入,需要的就越多,到后面很可能就成为你突破的瓶颈,再者,很多人把数学基础理解为简单的计算方法上,矩阵、求导等,而实际上远远不止如此,那在算法领域,具体是什么要求。

入门阶段,这个阶段大部分人在过类似《统计学习方法》之类的基础,而这本书事实上需要一定的数学基础,尤其是一些基本的数学概念,因此在此阶段,要达到的水平应该是大一数学的水平,知道基本的概念即可。

进阶阶段,这时候会有些人发现即使懂这些基础,但是有些细节还是不懂“为什么”,例如SVM为什么要求对偶,SGD为什么能找最优解等,这时候需要一些在原本数学概念基础上的一些理论,前面两个例如对应的都是运筹与优化方向的知识细节。当然了,这阶段其实很多人就止步了,毕竟我使用SVM并不需要知道SVM是什么也能去用,但是你要是能迈过这关,你会发现你对数据本身特点与联系模型提出方案的能力会有质的提升,你所谓的“经验”可能有了更加扎实的理论保证,有的时候可能只是模糊的感觉,但是就感觉在你的三观下某个模型的结果就是不好,那你可以避开了。

在进一步,你能根据自己的理解去设计模型了。你能分析损失函数是否合适,你能找到交叉熵和MSE做损失的差别,你能根据预测性能指标加bad case分析,来诊断模型的缺陷,根据模型的缺陷提出改进建议,甚至是创新,在科研上,你就能做一些理论创新,在技术上,你能针对独一无二的问题提出个性化方案,这就是专家了。

很多人可能会说,工业界很多时候用的都是基线,不需要多高端,有了数据就怼模型就好了,为什么需要这么高端的东西。我只想说,可能大部分内容确实是所谓的low的东西,但是你在进行迭代的时候,有自己的思路终究能给出更为合适的方案,LR万能,但是万能的代价是性能不会突出,相信大家都能理解。

有时候也没有必要分的那么清,我用人话来表达一下吧,无论科研还是工程,都是这三个角度判断:

你的数学水平,能在你的职业状态下满足上面需求,我觉得就完全足够了,毕竟数学对绝大多数人来说就和英语一样是工具。

需要掌握那些知识

要说数学知识本身,其实并不是很多,我结合着需要的程度和大家聊一下。

数学学科角度

首先是最基础的数学,这个对大部分大学理工类专业而言就是基础课吧。个人建议要进这行下面的都要掌握。

然后是一些比较进一步的内容,可能会涉及不同的学科说法,我这里以我自己接触的为例,大家听名字应该都会了解一些。不需要全部掌握,有需要或者有兴趣看看无妨。

再深入的,实际更加用不上了,要上面喂不饱你,实变函数、复变函数、微分方程、抽象代数、混沌学、实分析等内容可以了解一下,这些东西个人感觉至少领先时代100年,保守估计的,我们活不到的未来会发挥很大作用,但是具体是哪个我们不知道,毕竟历史大浪淘沙,至于目前数学最难的部分是类似陶哲轩做的调和分析之类的,有兴趣可以继续挑战哈哈哈。

知识点角度

知识点角度去谈可能会非常零散,遍布很多细节学科,但是很多学科下其实有些东西用的并不是特别多,我简单谈一谈吧。

学习方法

不知道有多少人跳过上面的看过来,我直接说建议吧。

往后说,对于做算法的同学,尤其是已经入了行的,我其实不建议单独花时间恶补数学,而是面向需求看,他不会为你的工作进展带来困难时,其实必要性不大,除非是这几种情况:

至于做科研的同学,尤其是奔着顶会去的同学,建议建议好好扎实数学:

所以综合起来,最好是根据自己的需求来补充即可,除非你真的学不下去,看不懂,否则不建议从头开始补,成本高收益小。

部分资料推荐

很多人找我要资料,或者问具体问题啥的,我想说——现在的资料收集门槛其实特别低,网络上还是图书馆,都建议大家多去看看,不缺学习材料。

咳咳恩,我简单推荐一些比较关键的,其他的,我不建议大家全都学,部分内容和学科也不需要全部掌握,我建议的学习方法是在一定基础get后,根据需求去学和看,有高数线代概统3剑客在手,其他的东西基本不会在知识上卡住你了,除非想不开要去弄抽代甚至更高级的东西。

首先,高数看同济大学的,基本是业内首推吧,我自己是看华东师范的数分,高数更倾向于教大家怎么去计算,对原理的探索其实不是很多,而数分相反。至于针对算法的同学,弄懂高数足够,知道怎么求微积分足够。

线代的话,我首推是我一位很好的朋友的文章,点击这里直达。这两个是我非常建议单独拿来过一遍的材料,精推,所以少给一下,但是按照个人的习惯,在这些材料看不懂的情况下,我非常建议大家多去图书馆之类的看看相关书籍对你不懂得这块的解释,多读几遍比对后,会慢慢理解。

概率统计方面,就推一本吧,概率论与数理统计,前面有关概率的建议全看,后面有关数理统计的,点估计+一些假设检验看一下无妨。有些人希望我讲讲,额,一两句话讲不完,讲完了估计也是一本书了,所以吧,自己去看可能比我来讲更加合适吧,这个事情需要有耐心,真急不来

再推荐一个口碑无敌好的视频,就是李宏毅老师的

上面的是建议系统自学的,也是本科大一的基本水平,做算法的各位更要好好掌握。

其他的,建议大家根据需求学习,对于不懂的概念进行补充,然后对有兴趣的内容可以专题学习,说白了,这些掌握《统计学习方法》看起来理应不会太困难。

数据结构与算法

这是一个数学专业也会学,计算机专业也会涉及但是多少有点不懂,且笔试面试经常考的东西,所以想单独拿来聊一下。

首先,对于做科研的同学,有关时间和空间复杂度的理论,要求不是很高,除非你尝试通过提升某个算法的性能,例如GBDT到XGBOOST、LightGBM等,否则,可以不用学太深,你的目标只是,有一个思路,能翻译为代码,足够。

对于要找工作的同学,尤其是工程上的,那就要求你是个老司机了。

首先,这个是大多数计算机类专业和部分数学类专业的基础课,如果是没有上过,其实可以考虑get起来。

另一方面,大部分人是需要面对实战和面试笔试的,所以还是要多做一些练习,重点是要动手!

很多时候,希望代码能够在性能上有进一步提升,非常建议大家做一些专题的进阶。

当然了,很多人会问设计计算机语言的问题。

部分问题专题

有些人通过后台等方式问了我一些问题,我这里集中回答一下。

Q: 有关数据科学和具体深度学习之间的关系。数据科学到什么程度算是掌握。

A: 我本身对数据科学本身没有明显的概念,甚至感觉有点类似统计学的概念额,所以我不太敢说。至于掌握到什么程度,额,说一本可能有些偏差但是还挺好的书——数据挖掘导论,这本书看完,感觉数据科学也能理解怎么回事了。

结束语

呃呃呃,看着字数已经接近6k了哈哈哈,不知道对大家有没有帮助吧,今天不打算谈太多有关理论上的东西,只是希望大家能对数学更有信心,把数学学会,突破自己前进的瓶颈吧。最后强调几个点。

最后祝大家加油吧!

上一篇 下一篇

猜你喜欢

热点阅读