程序员要不要学习数学

题图:fromLOFTER

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

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

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

好日子很快就过去了……

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

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

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

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

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

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

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

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

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

……

中间的文章有部分小部分公式在







































北京白癜风多少钱
北京中科白癜风医院靠谱么



转载请注明:http://www.xxcyfilter.com/zyfl/9273.html