程序员数学:用Python学透线性代数和微积分
上QQ阅读APP看书,第一时间看更新

1.2 如何高效学习数学

数学书很多,但不是所有的书都有用。我有不少程序员朋友,出于求知欲或者上进心,尝试着学习像上一节中那样的数学概念。当使用传统的数学课本时,他们往往会因为在某一处卡住而不得不放弃。以下是一个典型的失败的数学学习故事。

1.2.1 Jane想学习数学

我的(虚构的)朋友Jane是一名全栈Web开发者,在旧金山的一家中型科技公司工作。大学期间,Jane并没有深入学习计算机科学或任何与数学相关的科目,她的职业生涯是从产品经理开始的。在过去的十年里,她学会了Python和JavaScript编程,并得以转型到软件工程领域。现在,在新的工作岗位上,她是团队中能力最强的程序员之一,能够搭建数据库、Web服务和用户界面,为客户提供重要的新功能。显然,她非常聪明!

Jane意识到,学习数据科学可以帮助她在工作中设计和实现更好的功能,利用数据来改善客户的体验。Jane在上班的地铁上,经常会阅读一些关于新技术的博客和文章。最近,她着迷于几篇关于“深度学习”的文章。一篇文章谈到谷歌的AlphaGo,它在深度学习的支持下,在一场棋局中击败了世界排名第一的人类棋手。另一篇文章则展示了由普通图像生成的令人惊叹的印象派画作,它同样使用了深度学习系统。

看完这些文章后,Jane在无意中得知,她的朋友的朋友Marcus在一家大型科技公司找到了一份深度学习的研究工作。据称,Marcus的年薪和年股票收入总共超过了40万美元。考虑到自己职业生涯的下一步,Jane还有什么理由不去研究这些令人着迷又赚钱的问题呢?

Jane做了一些研究,在网上找到了一个权威(而且免费)的资源:Goodfellow等人所著的《深度学习》一书。这本书读起来很像她习惯的技术博客,让她对学习这个主题更加兴奋。但随着她不断阅读,书中的内容越来越难。第1章涵盖了需要学习的数学概念,并介绍了很多Jane从未见过的术语和符号。她浏览了一下,想直接进入书中的精华部分,但书中的内容依旧越来越难。

Jane决定暂停对人工智能和深度学习的研究,先去补充一些数学知识。《深度学习》的数学章节列出了一本关于线性代数的参考书,供从未接触过这个领域的学生参考。她找到了这本由Georgi Shilov所著的教科书,名为《线性代数》。但是她发现这本教科书有400页之多,和《深度学习》同样晦涩难懂。

在花了一个下午的时间阅读关于数域、行列式和余子式等深奥概念的定理之后,她停下来了。她不知道这些概念如何能让她实现一个帮助棋手取得胜利或生成艺术品的程序,也不打算再花几十个小时从这些枯燥的资料中寻找答案。

我和Jane见了面,边喝咖啡边叙旧。她告诉我,因为不懂线性代数,所以在阅读真正的人工智能书时很吃力。最近,我听到了很多类似的感叹。

我想读一读关于[新技术]的书,但似乎需要先学一学[数学主题]。

她的做法是值得赞扬的:为想学习的科目和缺失的预备知识寻找最佳资源。虽然动机很合理,但是她发现自己陷入了令人厌恶的“深度优先”技术文献搜索中。

1.2.2 在数学课本中苦苦挣扎

大学水平的数学书,比如Jane选择的那本线性代数书,往往是非常公式化的。每一节都是一样的套路:先定义一些新的术语,再用这些术语陈述一些事实(即定理),然后证明这些定理为真。

这听起来是一个很好的、符合逻辑的顺序:介绍所讲的概念,陈述一些可以得出的结论,然后证明这些结论。那为什么读高数课本这么难呢?

问题是,数学知识实际上并不是这样创造出来的。当提出新的数学思想时,在找到正确的定义之前,可能会经过很长一段时间的实验。我想大多数专业数学家会这样描述他们经历的步骤。

(1) 发明一个游戏。例如,从“玩”一些数学对象开始。尝试列出所有这些数学对象,在这些对象中找到模式,或者找到具有特定属性的对象。

(2) 形成一些猜想。推测一些可以陈述出来的、关于游戏的一般事实,并至少让自己相信它们一定是真的。

(3) 创造一些精确的语言来描述游戏和你的猜想。毕竟,在你能表达它们之前,你的猜想不会有任何意义。

(4) 最后,凭着决心和一些运气,为你的猜想找到一个证明,说明它需要为真的原因。

我们要从这个过程中吸取的主要经验是,应该从全局思考开始,不要拘泥于形式。一旦对数学的工作原理有了大致的了解,词汇和符号就会成为有用的工具,而不会分散你的注意力。数学课本通常按相反的顺序排列,所以我建议把课本作为参考,而不是入门材料。

学习数学的最好方法并不是阅读传统课本,而是探索一些想法,并得出自己的结论。然而,你没有足够的时间重新发明一切。怎样才能达到平衡状态呢?这里给出我的拙见,它指导我编写出了这本新颖的数学书。