直观理解神经网络。
如今几乎所有贴着"AI"标签的东西都跑在神经网络之上,可这个词听起来要么神秘(一个数字大脑),要么高深莫测(线性代数)。两者都没有必要。本篇要建立的工作直觉是:神经网络就是一大堆可调旋钮,把数字变成数字;而"学习"则是那个枯燥却强大的过程——不断微调这些旋钮,直到输出正确。不需要生物学,也不需要微积分。
一个神经元:一次加权投票。
暂时忘掉大脑。单个人工神经元只是一道小小的算术配方。它接收若干输入数字,将每个数字乘以它自己的权重,把结果相加,再加上一个叫偏置的数,然后把总和送进一个简单的"激活"函数,由它决定该多强地"放电"。
直觉是:神经元投出一张加权票。权重表示每个输入有多重要、朝哪个方向起作用。设想一个神经元在判断"这封邮件是垃圾邮件吗?"它的输入可能是单词 免费、紧急、会议 出现的次数。如果它学到 免费 上有很大的正权重、紧急 上有很大的正权重、会议 上是负权重,那么满是"免费""紧急"的邮件会把总和推高(投票:垃圾邮件),而"会议"会把它拉低(投票:非垃圾邮件)。激活函数随后把这个总和压成一个决定。
output = activation( w1*x1 + w2*x2 + w3*x3 + bias )
这一行就是全部机制。其余的一切,不过是重复与规模。
层:许多次投票,然后再对投票进行投票。
单个神经元只能在它的输入上画出一条笔直的分界线——对真实问题来说太简单了。于是我们把许多神经元并排放(一个层),再把它们合在一起的输出喂进下一层,再下一层。每一层的输出成为下一层的输入。
威力正来自这种堆叠。靠前的层学会检测简单的局部模式;靠后的层把它们组合成更抽象的模式。在一个识别图像的网络里,第一层可能对边缘和色块有反应,下一层对角点和纹理,再下一层对眼睛和车轮,而最后一层对"猫"或"汽车"。没有人设计这个层级——它自然涌现,因为这是优化器利用现有旋钮最高效的方式。
关键要素是层与层之间的激活函数。没有它,无论你堆多少层,堆叠都会塌缩成一条大直线。激活引入一个轻柔的弯折,弯折叠加弯折,就能逼近几乎任何模式。这就是为什么一个足够大的网络有时被称为"通用函数逼近器":只要神经元够多,它几乎能模拟任何输入到输出的关系。
深度学习里的"深",仅仅意味着层数多。层越多,网络就能构建更长的"模式的模式的模式"链条——这正是它能处理语言或图像这类极复杂输入的原因。
"学习"究竟是什么。
一个全新的网络权重是随机的,所以它输出的是胡话。学习就是修正这一点的过程,而它在概念上很简单——一个重复数百万次的反馈循环:
- 预测。把一个训练样例送过网络,看它输出什么。
- 测量误差。用一个叫损失的数字把输出与正确答案对比——网络错得很离谱时损失很大,正确时接近零。
- 分摊责任。对每一个权重,算出把它往上调还是往下调,会让损失小一点点。这一责任分摊步骤叫反向传播;它不过是把微积分里的链式法则机械地套用一遍,你不需要亲手算这套数学,也可以相信它有效。
- 微调。让每个权重朝着减小损失的方向迈出极小的一步。这就是梯度下降——就像浓雾中的徒步者总是朝略微下坡的方向迈步。
在整个数据集上重复,重复许多遍。慢慢地,随机的旋钮沉降到一个能产出好答案的配置。没有顿悟时刻,网络内部也没有"理解"——只有数十亿次由误差驱动的微小调整累积成能力。那个著名的类比:水自行找到下坡的路。每一步都很笨;终点却很惊人。
为什么这同时带来了优势与失败。
这一张图就能解释你在每一个神经系统中将会看到的行为。网络只在它的训练数据上把损失最小化过,所以它在数据覆盖的区域内出色,在区域之外则不可靠——它从未学到一条规则,只学到一个恰好穿过这些样例的拟合曲面。问它一件离它见过的一切都很远的事,它仍会给出一个自信的数字,因为这套机制里没有任何东西分得清"插值"和"瞎猜"。
这也解释了为什么神经网络难以解释。"知识"散布在数百万乃至数十亿个权重中,没有任何一个附带人类可读的含义。没有哪一行代码写着"这是一只猫",只有一片被梯度下降雕刻出来的庞大数值地形。确实存在探查网络学到了什么的工具,但从根本上说,它的能力是统计性的,而非符号性的。
把这个模型记在脑中,大语言模型就不再是魔法。一个聊天机器人正是这个东西——一大堆加权投票,旋钮经梯度下降在海量文本上调校,为每一个可能的下一个词各产出一个数字。更大、排布更巧妙,但还是同一台机器:数字进,数字出,旋钮朝着更小的误差被微调。本节其余所有内容,都建立在这一张图之上。