自然语言处理之路:前提——数学能力

一个自然语言处理炼丹师的自白

往期:

自然语言处理之路:前提——英文能力

上一期说完英语,这一期当然就是三大巨头中的另一个,数学。相信很多领域,特别是理工相关领域的童鞋,对数学的重要性深有所感。数学好,不光能很容易读懂论文,还能让你有能力推导自己的算法。有时读用数学推导出一个简洁 idea 的论文时,真的非常有趣。比如之前 Wasserstein GAN 论文,先用数学推了几大页,最后得出一个很简单的改进方法,非常精彩。我这样的数学渣渣,只能看着这样的论文流口水。

当然,其实数学最重要的用途还是,让你学东西的速度加快好几倍。因为大部分理工科的东西都是建立在数学理论基础上的,所以数学好的话,基本上一看就懂。核心的数学骨架都一样,不同的只是外面的衣服。这也是数学系转专业比较简单的原因。

这里还想说说自己对数学的心态变化。首先不得不提之前看到过的一句话,中国教育最大失败是让学生们本能地憎恨学习。数学上也是,更多时提的不是数学之美,而是这里分数比较多(敲黑板声)。自己小时候对数学还是很感兴趣的,特别是读过一本至今都印象很深的数学启蒙书《小木头趣游魔数世界》(现在怎么找都找不到了)。这本书里面把数学问题和各种历史天文地理结合起来讲,非常有趣。

但到之后,数学就只与分数有关,也就不喜欢了。 很多时候自己都不知道自己在学习什么,为什么要学,只是因为必须得学才学,这造成了逆反心理。说实话,直到大学毕业前,我对数学也是讨厌至极。之后进入修士阶段,得补基础知识,上了些公开课还有看了些国外作者写的数学书,才慢慢又开始喜欢数学,是因为对数学之美的喜爱,还有对其广阔应用的意识。这也是我个人的体会,国内和国外学习材料两个很大的不同之处在于,对学科本身透露出的热爱,还有对其与实际应用结合的强烈意识。想想也知道,一本全篇都透露出作者对这个话题热情的书,和一本冰冷冷只是把知识全部列出来的书,你更想读哪本呢。

线性代数

考研时没意识到那小小一本线性代数有什么用。其实说到底,是还没有明白线性代数背后真正的含义。直到上了MIT OCW 上的 Strang 教授 (MIT有很多上课非常棒的老师) 的线性代数课。Strang 可以说是我最喜欢的老师之一了。不光是因为讲课特别好,也不光是因为他每次讲课都会很呆萌地双手摊开问问题,更主要的是他那种对数学本身的热爱很感染人,让我们也情不自禁地想去了解这个让他痴迷的东西。

来自学生们的祝福, -1, 2, -1 蛋糕矩阵

当然还有课程的配套书《Introduction to Linear Algebra》,这个书封面是我见过最有意思的封面之一。最开始看很不明觉厉,但是当看完书之后回来再看,就不得不为这个设计拍手叫绝。

刷完之后,对线代有兴趣的可以读读更进阶的《Linear Algebra Done Right (线性代数应该这样学)》

至于线代的用途,可以这样说吧,基本上现在计算机底层那些运算其实都是在用线代。更别提当前这些深度学习框架了,里面的所谓 Tensor (张量)其实就是多维矩阵,运算时也都是用线代的方法在计算。还有机器学习里面的 PCA(主成分分析)和降维这些也与线代有着密切关系。

概率论和信息论

概率论和信息论,如果说现代计算机科学底层运算很多都在用线代的话,那么上层很多算法就都是建立在概率论和信息论基础上了。深度学习之前,机器学习的主流是统计学习,基本上都是在搭建在概率论和信息论之上的。

这两个想要一起大概稍微了解的话,就直接看 Goodfellow 那本深度学习书的第三章:Probability and Information Theory

概率论这方面的资源很多,稍微列举一下:

  1. 首先关于概率论非常推荐哈佛大学的 Statistics 110: Probability :虽然不是很有名,但内容非常扎实,介绍了很多关于概率论和统计学的内容
  2. 当然还有 MIT OCW 上的课 Probabilistic Systems Analysis and Applied Probability
  3. 之后关于统计学也挺推荐 Udacity 上的 Element Statistics: 分成 Descriptive 和 Inferential 两部分来讲,因为是短视频,所以很生动容易看

概率论还有一本700多页的神书《Probability: The Logic of Science (概率论沉思录)》,很惭愧的是,自己都没看完过,每次都是中途弃。

信息论的话,因为修的是自己学校的信息论课,没有上什么公开课所以不很了解。关于书,那么就是那本经典的《Element of Information Theory》,还有《Information Theory, Inference and Learning Algorithms》这本,网上有配套公开课。

其他

最后告诉大家一个好消息,关于微积分,实际上用到的不太多,感觉最有用的就是怎么求导。而深度学习框架里面,因为有计算图的帮助,所以反向传播什么都是自动求导。想仔细看的话,直接上MIT OCW 找 Single Variable CalculusMultivariable Calculus 看就可以了,Multi 的老师特别萌

还有一个好消息,其实上面提到大部分内容,如果不是特别感兴趣想深入了解的话,其实不看也是可以的。直接简单地读读那本 Deep Learning 的第二章第三章就行了。但这样也少了很多学习数学的乐趣。

这期就先这样吧,下期讲讲语言学。