第2章 神经网络原理
2-1 必备的数学与统计知识
现在我们每天几乎都会通过各种渠道看到几则有关人工智能(AI)的新闻,介绍AI的各式研发成果,很多人基于好奇也许会想一窥究竟,了解背后运用的技术与原理,就会发现一堆数学符号及统计公式,也许会产生疑问:要从事AI系统开发,非要搞定数学、统计不可吗?答案是肯定的,我们都知道机器学习是从数据中学习到知识(Knowledge Discovery from Data, KDD),而算法就是从数据中萃取出知识的“榨汁机”,它必须以数学及统计为理论基础,才能证明其解法具有公信力与精准度,然而数学/统计理论都有局限,只有在假设成立的情况下,算法才是有效的,因此,如果不了解算法中的各个假设,随意套用公式,就好像无视交通规则,在马路上任意飚车一样危险。
(图片来源:Decision makers need more math[1])
因此,以深度学习而言,我们至少需要熟悉下列学科:①线性代数(Linear Algebra);②微积分(Calculus);③概率论与数理统计(Probability and Statistics);④线性规划(Linear Programming),如图2.1所示。
图2.1 必备的数学与统计知识
以神经网络优化求解的过程为例,上述四门学科就全部用上了,如图2.2所示。
图2.2 神经网络权重求解过程
(1)正向传导:借由线性代数计算误差及损失函数。
(2)反向传导:透过偏微分计算梯度,同时,利用线性规划优化技巧寻找最佳解。
(3)统计串联整个环节,如数据的探索与分析、损失函数定义、效果衡量指标等,都是基于统计的理论架构而成的。
(4)深度学习的推论以概率为基础,预测目标值。
四项学科相互为用,贯穿整个求解过程,因此,要通晓深度学习的运作原理,并且正确选用各种算法,甚至进而能够修改或创新算法,都必须对其背后的数学和统计有一定基础的认识,以免误用或滥用。
四门学科在大学至少都是两学期的课程,对已经离开大学殿堂很久的工程师而言,在上班之余,还要重修上述课程,相信大部分的人都会萌生退意了!那么我们是否有速成的快捷方式呢?
笔者在这里借用一个概念Statistical Programming,原意是“以程序解决统计问题”,换个角度想,我们是不是也能以程序设计的方式学统计,以缩短学习历程呢?
通常我们按部就班地学习数学及统计,都是从“假设”→“定义/定理”→“证明”→“应用”,一步一步学习。
(1)“假设”是“定义/定理”成立的前提。
(2)“证明”是“定理”的验证。
(3)“应用”是“定义/定理”的实践。
由于“证明”都会有一堆的数学符号及公式推导,经常会让人头晕脑涨,降低学习的效率,因此,笔者大胆建议,工程师将心力着重在假设、定义、定理的理解与应用,并利用程序进行大量个案的验证,虽然忽略了证明的做法,会让学习无法彻底地融会贯通,但是对已进入职场的工程师会是一种较为可行的快捷方式。
接下来我们就以上述做法,对四项学科进行重点介绍,除了说明深度学习需要理解的知识外,更强调如何以撰写程序实现相关理论及解题方法。