程序员要不要学习数学?

题图:from LOFTER

前些年经常有新人问我,我数学不太好,能不能做编程这份有前途的职业?我的数学基础都还给大学老师了,还能不能成为一个优秀的程序员?

那时候我的回答通常是「编程和数据其实关系不大,主要是考察逻辑关系和清晰的编程思路」。以前确实是这样,除了一些专业领域或底层软件产品(比如数据库),编程过程中用到的数学知识非常少,再复杂的逻辑,通过一些数据模型和复杂表达式也可以实现。那优秀程序员和普通程序员的区别是什么呢?实现是否优雅,能不能扩展,是不是简洁,性能好不好,有没有考虑安全、异常、日志等场景,但功能大家是都能实现的。

即使是算法,实际编程过程中用到的场景也不多,最常用的排序、二分查找、递归,这些程序员基本都能写,更复杂的算法,也能找到相关的库。要求再高一点,比如能运用广度优秀搜索、图、贪婪算法、倒排索引等等,这些没有数学基础,一样一身正气,程序员们牢记,仁者无敌~~

好日子很快就过去了……

在机器学习和深度学习已经应用到各个领域的今天,如果你想入门人工智能,不懂数学基本上就很艰难了。不了解概率论、数值分析和线性代数,你就很难看懂别人学习出来的模型,无法调整参数看数据结果,看也看不明白。很多人去读 AI 相关的论文,已经全部是翻译过来的中文了,除了数学公式全是中国字,就是不知道啥意思。

为了解决这个横亘在程序员和 AI 工程师之间的大山,我们邀请了王天一教授开了一门「人工智能基础课」,分享人工智能的基础知识(尤其是数学),以帮助程序员们更好的学习和理解人工智能。听这个课就能学会数学么?也许吧,不信的话可以先读读王教授的这篇文章……

九层之台,起于累土:线性代数

“人工智能基础课”将从数学基础开始。必备的数学知识是理解人工智能不可或缺的要素,今天的种种人工智能技术归根到底都建立在数学模型之上,而这些数学模型又都离不开线性代数的理论框架。

事实上,线性代数不仅仅是人工智能的基础,更是现代数学和以现代数学作为主要分析方法的众多学科的基础。从量子力学到图像处理都离不开向量和矩阵的使用。而在向量和矩阵背后,线性代数的核心意义在于提供了⼀种看待世界的抽象视角:万事万物都可以被抽象成某些特征的组合,并在由预置规则定义的框架之下以静态和动态的方式加以观察。

线性代数中最基本的概念是集合。在数学上,集合的定义是由某些特定对象汇总而成的集体。集合中的元素通常会具有某些共性,因而可以用这些共性来表示。对于集合 { 苹果,橘子,梨 } 来说, 所有元素的共性是它们都是水果;对于集合 来说,所有元素的共性是它们都是动物。当然 { 苹果,牛 } 也可以构成一个集合,但这两个元素并没有明显的共性,这样的集合在解决实际问题中的作用也就相当有限。

“苹果”或是“牛”这样的具体概念显然超出了数学的处理范围,因而集合的元素需要进行进一步的抽象——用数字或符号来表示。如此一来,集合的元素既可以是单个的数字或符号,也可以是多个数字或符号以某种方式排列形成的组合。

在线性代数中,由单独的数 a 构成的元素被称为标量:一个标量 a 可以是整数、实数或复数。如果多个标量 a1,a2,⋯,ana1,a2,⋯,an 按一定顺序组成一个序列,这样的元素就被称为向量。显然,向量可以看作标量的扩展。原始的一个数被替代为一组数,从而带来了维度的增加,给定表示索引的下标才能唯一地确定向量中的元素。

每个向量都由若干标量构成,如果将向量的所有标量都替换成相同规格的向量,得到的就是如下的矩阵:

……

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171224B0LBTI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券