上一章你已经见过一件近乎魔法的事:把"国王"减掉"男人"再加上"女人",落点竟然离"王后"很近。含义变成了能加减的坐标。但一个问题被我们悄悄跳过了:那些坐标,是谁算出来的?词向量不是天上掉下来的,它背后有台机器在把数字搓来搓去。这台机器,就是本章的主角——神经网络。
你八成听过它的传说:模仿人脑、由"神经元"组成、能"学习"能"思考"。现在把这层皮撕掉。神经网络(neural network)跟大脑的关系,大概就跟"热狗"跟"狗"的关系一样大——名字是历史遗留的浪漫,实物是另一回事。它不思考,不理解,也没有小人在里面开会。它只是一个巨大的、可以调的函数。
先把"函数"这个词还给你
函数听起来吓人,其实你天天在用。函数(function)就是一台"进去一个东西、出来一个东西"的机器:你喂给它输入,它吐给你输出。自动售货机是函数(投币+按钮→一罐可乐),汇率换算是函数(100 人民币→约 14 美元),温度换算 F = C × 1.8 + 32 也是函数。
关键在于:一个函数里往往藏着几个可以拧的旋钮。温度换算里那个 1.8 和 32 就是旋钮。如果我不告诉你摄氏和华氏怎么换,只丢给你一堆对照数据——0 度对 32、100 度对 212、37 度对 98.6——你能不能反过来把 1.8 和 32 这两个旋钮的值试出来?能。这就是神经网络干的唯一一件事:给定一堆"输入→正确输出"的例子,把自己身上的旋钮拧到能拟合这些例子。
所谓"训练一个神经网络",翻译成人话就是:有一个带着几亿个旋钮的公式,我拿海量例子去反复微调这些旋钮,直到这公式喂进输入能吐出对的输出。没有学习的灵光,只有拧旋钮。
拆开看:一层就是一次矩阵乘法
那这个"带旋钮的公式"长什么样?核心零件简单到你会失望:一堆乘法和加法。
假设输入是三个数 [x₁, x₂, x₃]——比如上一章那种词向量的一小截。我想把它变成两个数的输出。我要做的,就是给每个输入配一组"权重"(就是旋钮),加权求和:
out₁ = w₁₁·x₁ + w₁₂·x₂ + w₁₃·x₃ + b₁
out₂ = w₂₁·x₁ + w₂₂·x₂ + w₂₃·x₃ + b₂
那些 w 是权重(weight)——每个输入该被看重几分,就是可拧的旋钮;那些 b 是偏置(bias)——一个不管输入是啥都要加上的基准值,好比调音时的"底噪"。当你把成千上万个这样的加权求和整整齐齐码在一起,数学家给它起了个名字叫矩阵乘法(matrix multiplication)。别被吓到,它的本质就是刚才那一堆"乘一乘、加起来",只是用一个紧凑的记号一次性写完几百万个。
矩阵乘法不是什么高深操作,它就是"批量的加权求和"。你有一排输入数字,有一张旋钮表,把它们对着乘一遍加起来,得到一排新数字。GPU 之所以为 AI 而生,就是因为它一秒能做天文数字次这种乘加。
光会乘加还不够:得把线掰弯
但只有矩阵乘法,会撞上一堵墙。你把一次加权求和的结果,再喂给下一次加权求和……数学上有个残酷的事实:一堆线性变换叠起来,等于一个线性变换。加权求和的加权求和,还是加权求和。这意味着你哪怕堆一百层,本事和一层一模一样——只能画直线。而真实世界几乎没有一件事是直线:房价和面积不是直线,一个词该不该接在另一个词后面更不是直线。
怎么破?在每层加权求和之后,塞一个非线性的小动作,把直线"掰弯"。最常用的那个简单到离谱,叫 ReLU(读作"瑞露",全称 Rectified Linear Unit):
ReLU(x) = 如果 x 大于 0 就保留 x,否则就变成 0
就这么一句"负数一律拍平成零"。别小看它。正是这个不起眼的拐点,让网络有了"分段"的能力——不同区间可以有不同的斜率。无数个这样的小拐点拼在一起,就能逼近任何弯弯曲曲的曲线。这不是比喻,而是一条被证明过的定理(叫万能逼近定理(universal approximation theorem)):只要旋钮够多,这种"乘加+掰弯"的结构,能以任意精度拟合几乎任何函数。
打个比方:矩阵乘法给你一根根笔直的木条,非线性给你在木条上折弯的能力。光有直木条你只能搭个方框;能折弯之后,你用足够多的折线就能拼出任何形状的轮廓——一只猫、一条心电图、语言里的规律,都是"形状"。
把它串起来:一个会认数字的例子
在脑子里跑一遍。假设我要认手写数字:输入是一张 28×28 的小图,摊平成 784 个数(每个数是一个像素的深浅)。
- 第一层:784 个数进去,做一次矩阵乘法,比如压成 128 个数,再每个过一遍 ReLU 掰弯。
- 第二层:128 个数进去,再乘一次、再掰一次,压成 10 个数。
- 这 10 个数分别代表"像 0 的程度""像 1 的程度"……哪个最大,就猜它是几。
整个过程没有任何一步在"看"这张图、在"想"这是什么。从头到尾,只是一串数字流进来,经过几轮"乘加、掰弯、乘加、掰弯",另一串数字流出去。它不认识数字,它只是被一堆例子把旋钮拧到了——碰巧对这些像素组合会吐出对的答案。
那"智能"到底藏在哪
你可能会追问:既然只是乘加和掰弯,那让 GPT 能写诗、能答题的本事在哪?答案不在结构里,而在旋钮的具体数值里。结构是死的、笨的、通用的;一个刚出厂、旋钮全是随机数的网络,吐的是纯粹的乱码。它和训练好的 GPT,零件一模一样,差别只在于那几千亿个旋钮被拧成了什么值。
所以"模型"这个词,物理上就是一大坨数字——那几千亿个权重的值。你下载一个开源大模型,下载的不是什么灵魂,就是一个几百 GB 的旋钮设定文件。
这里也埋着本章最该破除的迷思:网络里没有"概念"、没有"知识"以人能读懂的方式存着。所谓"它懂了语法",物理上只是某些旋钮恰好被拧到了一个让语法规律能被拟合出来的组合。它不是学会了规则,而是长成了一个"碰到这种输入就吐出那种输出"的形状。
那么问题只剩最后一个,也是整本书最硬的一个:这么多旋钮,到底是怎么被拧到对的值上的?总不能真靠人手一个个试——几千亿个旋钮,试到宇宙热寂也试不完。这里有一套精巧的"自动拧旋钮"的办法,叫训练。它怎么知道该往哪拧、拧多少?那是第七章"蒙眼下山"的故事了。
但在那之前,我们得先看看这台"乘加+掰弯"的机器里,最要命也最漂亮的一个零件:它怎么让句子里的词彼此看一眼、决定谁该听谁的。所以本质上,神经网络从来不是一个会思考的大脑,它只是一个大到吓人、却笨到骨子里的可调函数——真正让它显得聪明的,是下一章那个叫"注意力"的机关。