看懂这个世界的关键,是同一双眼睛的反复使用

她接到的差事是给村里两千个人画像。

她叫阿芮,是村里唯一会画画的孩子。村正给她两年时间,让她为人口册上的每一个人画一张像,挂在祠堂里。

她算了一下:两千张画,一张画十天的话,至少要五十多年。她活不到那时候。

她坐在祠堂门口想了三天。第三天傍晚,她注意到一件她从来没有真正想过的事——村里的每一张脸,都有眼睛、鼻子、嘴。每张脸上眼睛的位置略有不同,大小不同,形状不同——但它们都是眼睛

她回去做了一件事——她不去画整张脸了。她只画眼睛

她做了一面很小的纸片,上面只画了一只眼睛的简单轮廓。然后她拿着这面纸片走到一个村民面前,把纸片在他的脸前来回移动——左上、右上、中间、左下、右下——每移到一处,她就在心里问:"这里像不像眼睛?"在两只真正的眼睛位置,纸片对上了——形状一致;在其他地方,纸片对不上

她做了一张表,记录了这个村民的脸上"像眼睛"的强度——表上有几十个格子,每个格子对应脸上一个位置,每个格子里写一个数字,表示"那位置像眼睛的程度"。两只真眼睛对应的格子分数最高,其他格子很低。

然后她又做了第二面小纸片——鼻子的轮廓。同样地,把它在脸上来回移动,记录每个位置"像鼻子"的程度。再做第三面——嘴。第四面——眉毛。第五面——耳朵。

她有五面纸片。每张脸都被她翻译成五张表——五张分数图。

这件事她做得飞快。一张脸,移动五面纸片各几十次,几分钟就完事。两千张脸,几个月就做完了

但是这五面纸片画得不算好,精度有限。她又想了一招——她把第一轮收来的"五张分数图"作为新的素材,在上面再次用更大的纸片去检测。这次大纸片不是检测眼睛或鼻子,而是检测眼睛 + 眉毛同时出现的某种空间关系——这是"眯着眼笑"的表情;另一张大纸片检测嘴 + 鼻子的某种比例关系——这是某种特定的脸型。

第二轮她做了二十张大纸片,每张检测一种**"局部组合"**。两千张脸,又是几张二十维的分数图。

第三轮她做了五张更大的纸片,检测"整张脸的整体气质"——是开朗、是严肃、是稚气、是忧愁、是慈祥。

最后她坐在祠堂里,面对每个村民只用看几分钟——把那个人的脸过一遍五片小纸片(像不像眼睛/鼻子/嘴...),再过一遍二十张中纸片(局部组合),最后过一遍五张大纸片(整体气质)。她就能画出这个人——准确、传神、不漏神。

两年快要到的时候,她真的画完了两千张画。

村正问她:"你怎么画得这么快?是不是省事了?"

她摇头:"我没省事。我只是发现了一件事——画两千张人脸这件事,根本不需要两千个画家。它需要的是一双眼睛,被用两千遍。"

寓言之外

阿芮的小纸片,就是 Convolution(卷积)——卷积神经网络(CNN)的核心机制,计算机看懂图像的奠基技术

把一张数字图像想象成一个由几百万像素组成的"巨大脸"。每个像素只是一个亮度值,整体看起来毫无意义。CNN 做的事,和阿芮一模一样:

第一层卷积——准备一些小尺寸的滤镜(filter / kernel),每个滤镜是一个小的数字模板。用每个滤镜在图像上从左到右、从上到下逐个位置滑动,每滑到一个位置,计算"图像这一小块和这个滤镜有多吻合"。吻合度高的位置,新图(feature map)上对应位置的数字就大;吻合度低的位置,数字就小。

一个滤镜可能学会检测"水平边缘",另一个检测"竖直边缘",再一个检测"红绿色块",再一个检测"圆形"——这些都是低层视觉特征。CNN 训练时,这些滤镜不是人手设计的,是模型自己从数据里学出来的

第二层卷积——把第一层的输出(几张 feature map)当作新的"图像",再用一组更大的滤镜去扫——这次每个滤镜检测的是"水平边缘 + 竖直边缘的某种组合"——也就是"角"或"轮廓"之类的中级特征。

第三层、第四层……——一层一层往上,每层检测的特征越来越抽象。最初是边缘和颜色,中间是纹理和零件,最后是物体类别(脸、车、猫、字)。

这就是 CNN 的层级结构。

但比层级结构更重要的,是阿芮"同一面纸片走遍整张脸"的那个动作。这个动作有一个深刻的名字:Translation Invariance(平移不变性)。一只眼睛长在脸的左上还是右下,它都是同一只眼睛——所以同一个滤镜应该检测出它。CNN 通过参数共享(同一个滤镜在所有位置使用)实现了这个性质。

为什么这个性质这么重要?

考虑替代方案:如果你不用卷积,而是用一个全连接神经网络处理一张 256×256 的图像,第一层就需要 256×256×N 个参数。一张猫的照片猫在左边,模型看到的是"参数模式 A";同一只猫的照片猫在右边,模型看到的是"参数模式 B"——它必须把同一个概念学两遍。学十遍猫在不同位置,它要学十组不同的参数。

CNN 不是这样。一只猫,不管在哪里,都是同一组滤镜检测出的同一组激活模式。模型学一次,就在所有位置都通用。

这一个看似简单的设计——让模型架构本身,内置了"图像里物体可以平移"这个先验知识——是 CNN 在 2012 年彻底改变了计算机视觉的根本原因。在那之前,计算机视觉是一群手工设计特征(SIFT、HOG)的工程师的领地。AlexNet(2012)用 CNN 在 ImageNet 上把错误率从 26% 直接砍到 15%,从此整个领域换了主角。

更深一层——CNN 的成功揭示了一件事:好的机器学习模型,不是因为它"什么都不假设、纯靠数据"。恰恰相反,好模型通常都内置了对数据的某种结构假设(inductive bias)

  • CNN 假设:图像中相邻像素相关、特征可平移
  • RNN 假设:序列中时间顺序重要、距离近的更相关
  • Transformer 假设:任意位置都可能相关,让模型自己学权重(它的 inductive bias 最弱,所以它需要的数据最多)
  • Graph Neural Network 假设:图的拓扑结构反映关系

架构里注入的先验,等于训练时省下的数据。这是阿芮的小纸片告诉我们的:不是每张脸都要从头看,因为你已经知道脸里大概有什么

最后一句话——CNN 之所以美,是因为它模仿了我们自己的视觉系统。哺乳动物的视皮层从 V1(检测边缘和方向)到 V2(纹理和形状)到 V4(部分物体)到 IT(完整物体识别)——也是一层层、由低到高的特征构造。Hubel 和 Wiesel 在 1960 年代用电极记录猫的视皮层时,看到的就是这种层级激活。

阿芮没有读过神经科学。她只是在祠堂门口想了三天。但她发明的方法,和大自然花了几亿年演化出来的方法,在结构上几乎一样

也许这就是为什么她能画完两千张画。

在 AI 史的位置

CNN 的种子在 1980 年 由日本科学家 Kunihiko Fukushima 提出(Neocognitron),灵感正是 Hubel 和 Wiesel 对猫视皮层的研究。1989 年,Yann LeCun 在贝尔实验室把 backprop 用到了类似结构上,训练出第一个能识别手写数字的 CNN——LeNet。它后来被部署到美国邮政系统,1990 年代美国的邮编识别就跑着 LeCun 的 CNN

但接下来 CNN 沉寂了将近二十年——计算太贵、数据太少、神经网络整体在第二次冬天里。2012 年,Alex Krizhevsky 的 AlexNet 在 ImageNet 比赛上一举击败所有传统方法,深度学习时代正式开始。从 AlexNet 到 VGG、GoogLeNet、ResNet,CNN 统治了计算机视觉将近十年。

今天,虽然 Vision Transformer(ViT)在某些任务上超过了 CNN,但 CNN 的卷积思想——参数共享、平移不变、层级特征——已经渗透进了几乎所有视觉模型,包括 Stable Diffusion、SAM、CLIP 这些。

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:08. 同一双眼睛走遍全村

本文链接:https://www.sshipanoo.com/blog/ai/ai-fables/08-同一双眼睛走遍全村/

本文最后一次更新为 天前,文章中的某些内容可能已过时!