曾经地球上有众多人种,为什么智人会脱颖而出?
为了统计食物数量,许多动物都掌握了计数能力,我们的祖先也只是其中之一。不过计数可以是 0+1, 1+1 , 任何数+1,从 1 数到 100 时,儿时的我们不得不记住所有的情况。但如今的你我已经掌握了代数,会用变量和函数来研究关系。与算术不同的是,代数不关心结果,只关心变量之间的关系。
这就是我们计数所用的模型。或许在你我看来这没什么了不起的。但正是这种不关心具体结果,只研究关系的能力,使我们从其他生物中脱颖而出。因为它可以让我们重复利用学到的模型。
事实上代数的起源远比上述符号的发明还要早,因为智人的语言正是第一批代数符号。其他生物的语言,只会用来指代具体的事物与数量。智人的语言却不同,可以用来指代抽象的事物及关系。这正是变量和函数的雏形。
语言可以用来交流,但更重要的是,语言决定了我们如何描述事物的关系。如何构建所处环境的模型。怎样预测将会发生的一切,从而做出决策。
除了自然语言和数学语言,人类又发明了计算机语言。将重复利用现有模型的能力推到了一个前所未有的高度。
那么数学语言中的线性代数和微积分到底有什么作用?
请耐心地跟着我的思路,这种思考的连贯性是一起理解线性代数和微积分的关键。
我们从计数 3 匹斑马眼睛的总数开始考虑,虽然可以应用计数模型 6 次,数出三只斑马眼睛的总数,不过人类很快就发现斑马都有 2 只眼睛,比例始终不变。于是发明了乘法 3×2,用于方便表示 2+2+2 这种单次累积量始终不变的加法。
乘法
为了直观地研究变量之间关系,人类又发明了坐标系,观察变量所画出点的相对位置来感受关系。可以画出 斑马个数 x 与斑马眼睛总数 y 的关系图,同时可以画出斑马个数 x 与单个斑马的眼睛数 w 的关系图。
由于 w 不随 x 的变化而变化,造成 x 和 y 所画出的点都落在一条直线上,因此这种关系(y=wx, w=2)叫做线性关系。其关键在于累积速度 w 是一个常量。
线性关系
这时 w 与 y 的关系是:w 形成的图形面积(乘法 3×2)就是眼睛的总数 y 。
以上是斑马个数 x 这个单因素(输入)来累积斑马眼睛总数 y 这个单因素(输出)。
当想要知道斑马和小鸟共有多少只脚时,出现了两个累积因素:斑马的个数 x1 和小鸟的个数 x2。以及两个累积速度:斑马 w1=4 只脚,小鸟 w2=2 只脚。这时 x1,x2 与脚数量 y 的关系是:y=4x1+2x2 。但如果又增加狮子,猴子等因素时,式子就会变得越来越长。
不过很快人类发明了向量 (vector),可将不同因素按照固定顺序排列。用一个变量来表示这些因素的整体。这样就可以用向量来表示任何事物了。
向量
因素的个数也就是向量的维度。
向量的维度
可用一个向量 x,这里的x=[x1,x2]来代表斑马和小鸟分别有多少只。
再用一个向量w,这里的 w=[4,2]来表示每个斑马和小鸟分别有多少只腿,累积速度 w 也叫做一组权重 (weights)。
权重
单个因素时的乘法是只有一个因素和权重相乘来累积输出 y,这里 y=2×2=2+2。
多个因素时的乘法则是各个因素分别乘以对应权重来累积输出y,也正因如此,做向量乘法时,权重的个数一定要与因素的个数一致。这也叫做线性组合,虽然又有乘法又有加法,但并不冲突,因为乘法就是快速表示累积速度不变的加法。
这次我们把因素的累积方式扩充到了多因素来累积单因素。
可当我们不仅想要知道有多少条腿,还想要知道有多少个眼睛时。
可以用两个有序排列的向量来表示两组权重,就形成了矩阵 W ,
矩阵
第一个行向量w1表示每个斑马和小鸟分别有多少条腿,第二个行向量w2表示每个斑马和小鸟分别有多少个眼睛。
行向量
这时,输出 y 也变成了向量(y=[y1,y2]),第一个因素是腿的总个数 y1,第二个因素是眼睛的总个数 y2。
若有一只斑马瞎了一只眼,就用向量 b 来表示 y 的偏移(bias)。
因素和一组权重相乘后,输出会累积一个因素。因素和两组权重相乘后,输出会累积两个因素。每多用一组权重,输出的维度就会增加 1,形成了按固定顺序排列的多因素向量。
于是我们得到了最普遍的一种(线性变换)关系。可以从任意维度的输入,变换到任意维度的输出。由于 W 和 b 这两个变量的作用是用于描述输入 x 和输出 y 之间的关系,人们也把它们统称为参数 (parameters)。
参数
终于,我们扩充到了多因素累积多因素的变换。
但是输入 x 是一个变量(只表示单次状态的变量),只能一次一次计算,如果第一次看到了 3 个斑马和 1 只鸟,第二次看到了 4 个斑马和 1 只鸟,
若想同时计算出两次观察出来的眼睛和脚的数量。就可以把所有(两次观察到的)x 并成矩阵来批量计算。
现在知道了如何批量计算多因素对多因素的累积。事实上刚才的流程正是把两点连成的线扩展到了多点形成的网络。
可以看到标量,向量,矩阵之间的乘法,这一切依然是你我熟悉的计数,只不过输入输出扩展到了多因素,b 代表着累积前的状态,我们熟悉从 0 开始累积,是因为食物就是从没有累积到有的。而 W 代表着 累积速率,即便是从1 数到 100,累积速率依然存在,只不过每次计数时,我们只取因素的一倍。
但线性变换的乘法是用来表示速度始终一致的累积。如果累积速度也随着因素的改变而改变,是一个变量呢?比如说细胞分裂的速度会随着细胞个数的增加而增加。
累积速度
细胞分裂的速度
可以设想一下,每次数过一只斑马的眼睛后,下一只的斑马眼睛就多一只会怎样?第一只斑马,1只眼,第二只,2只眼,第三只,3只眼,以此类推。这样就没有办法再用乘法来快速表示这种累积了。
不变的是,累积速度 w 形成的图形面积仍然是 y 的累积总量。
不过该图形的面积,类似三角形可又不是。但如果要累积的因素并非间隔跳跃的自然数,而是可以无限分割的实数,因素 x 的间隔可以无限小时,图形就可以无限的接近三角形。这时累积量也就成了三角形的面积。
如果你还有印象,y=x2/2 的微分是 y=x,而 y=x 的积分是 y=x2/2 + 一个常量(正是偏移)。
引入无限后,微积分告诉了我们,积累量 y=wx 与积累速度 w=x 两个函数之间的关系。
如果累积因素不是从 0 开始,而是从 1 开始,匀速累积时,用 b (形成)的图形面积减去 a (形成)的图形面积,就是该累积量。变速累积时,道理也是一样,b (形成)的图形面积减去 a (形成)的图形面积。
乘法和除法是累积速度为常量时的累积运算,
积分和微分是累积速度为变量时的累积运算。
积分对应着乘法,用来求累积量。
微分对应着除法,用来求累积速度。
但由于微分和积分都是在 x 和 y 的增量可以无限细分时使用的,所以加上了一个小 d 来代表这种无限。
在累积速度不变的线性乘法里,各个因素只与其对应的累积速度相乘,互不干扰。在累积速度可变的非线性变换里,各个因素同样只与其对应的累积速度相乘。所以在多变量时,各个因素的微分也是独立求得的,也称之为偏导数。
偏导数
虽然感觉用到无限细分的因素在生活中不多,但有一个因素你非常熟悉:
时间
变量和函数赋予了我们研究事物关系的能力,一个知识可以代表任何符合该关系的事物。这些知识是一代又一代的先人用毕生时间积累而来的。人生不过百年,可这些知识却透过语言和文字冲破了时间屏障,展现在你我面前。
但也正因所研究出的抽象关系可以指代任何具体事物,要先弄清关系所指的任务、输入和输出后,才能体会真正含义。可我们又太关注于关系本身,而忽视了对情景的交代。
每个人生来都是科学家,充满了探明事物关系的冲动,需要的仅仅是一个理由。我们在将前人的智慧摆在学生面前的同时,却也拿走了摄取它的理由。