第六章 从感知到认知专栏总目录《智能重生》AI工程师成长小说专栏一陆鸣的神经网络跑了一整夜准确率停在了96.2%。那是用一层隐藏层能达到的极限。再往上无论他怎么调学习率、换激活函数、加Dropout准确率就像被什么东西卡住了一样纹丝不动。“不是你的错。”赵工程师第二天早上走进工作间看了一眼屏幕上的数字“单层隐藏层的表达能力有限。手写数字识别97%左右就是天花板了。要突破你需要更深、更复杂的网络。比如卷积神经网络。”“卷积”陆鸣打了个哈欠眼角挂着干了的眼屎“那是什么”赵工程师没有直接回答。他从抽屉里翻出一张旧照片递给他。照片上是一个老人的脸满是皱纹眼睛深陷表情严肃得像是在指责拍照的人。“你看到这张照片的时候你的大脑在做什么”赵工程师问。陆鸣看着照片。“我……看到了一个老人。很老。不高兴。”“对。但你的视觉系统不是一步到位认出‘老人’的。它首先检测边缘——眼睛的边缘、鼻子的轮廓、嘴巴的线条。然后把这些边缘组合成简单的形状——圆形眼球、椭圆形脸型、细长的矩形眉毛。然后把这些形状组合成更有意义的部件——眼睛、鼻子、嘴巴。然后再把这些部件组合成一张脸。然后再识别出‘老人’这个类别。”“每一层都在提取更高级的特征。从像素到边缘从边缘到形状从形状到部件从部件到物体。这就是卷积神经网络的灵感来源——生物的视觉皮层。”赵工程师在白板上画了一个简单的图输入图像 (28x28) ↓ 卷积层 激活 → 特征图 (多个) ↓ 池化层 → 降低维度 ↓ 卷积层 激活 → 更深特征 ↓ 池化层 ↓ 全连接层 → 分类输出“卷积层不是把整张图像的每个像素都连接到每个神经元——那样参数太多了。它只连接一个局部窗口用同一个‘滤波器’也叫卷积核滑过整张图像在每个位置做点积运算。这样做的两个好处参数共享同一个滤波器检测同一种特征无论在图像的哪个位置局部连接每个神经元只对一小块区域响应符合视觉皮层的生理结构。”陆鸣盯着那个图。他想起昨天写的神经网络——输入层784个神经元直接连接到128个隐藏层那是全连接。每个隐藏层神经元都看到了整张图像没有“局部”的概念。而卷积层不一样它只关心一小块区域就像你用放大镜一点一点地扫描图片而不是一眼看全貌。“这就像……你捡垃圾的时候不是看整个垃圾堆而是先看一小块找出铜的颜色再移到下一块”“很好的类比。”盒子在口袋里说话了“卷积核就是你的‘铜探测器’。它在整个垃圾堆上滑动标记出所有可能是铜的位置。你不需要记住垃圾堆的每一个细节——你只需要知道哪里有铜。”陆鸣把盒子放在桌上。“那你教我这个。”二“第六章深度学习进阶——卷积神经网络与循环神经网络。”“第一部分卷积神经网络CNN。”盒子的屏幕上出现了一个动态的演示一张手写数字“8”的图片28x28灰度一个3x3的滤波器卷积核在图片上滑动每一步做一次点积运算产生一个数字。滑动完整张图片后得到一个26x26的输出矩阵因为28-3126。“这个输出叫做‘特征图’。每一个特征图对应一种特征——比如‘垂直边缘’、‘水平边缘’、‘对角线’等。一个卷积层通常有多个滤波器如32个因此会产生多个特征图。”陆鸣问“滤波器里的数字是怎么来的”“和全连接神经网络的权重一样——从数据中学习。初始化时是随机的训练过程中通过反向传播逐渐调整。网络会自己学会哪些滤波器对分类任务最有用。”他试着在脑海里模拟这个过程。如果把一张图片分成无数个3x3的小窗口每个窗口与同一个滤波器做点积得到的结果就是该滤波器对这个窗口的“响应强度”。如果滤波器是一个垂直边缘检测器中间一列是正数两边是负数那么当它滑过一条垂直的黑色线条时点积结果会很大。网络通过训练会自动发现“垂直边缘”对识别数字“1”、“4”等有用。“除了卷积层CNN还有另一个重要操作——池化层。”屏幕上的演示一个2x2的池化窗口步长为2在特征图上滑动。每个窗口取最大值最大池化输出尺寸减半从26x26变成13x13。“池化降低特征图的空间维度减少参数量同时让特征对小的平移、旋转更加鲁棒。即使数字稍微歪了一点池化后的特征仍然相似。”陆鸣想到了自己捡垃圾时不会因为铜零件稍微偏左或偏右几厘米就认不出来。他的视觉系统有“平移不变性”。池化层就在模拟这种性质。“现在把卷积、池化、全连接串起来构建一个完整的CNN。”盒子给出了一个经典架构——LeNet-51998年就提出的、用于手写数字识别的卷积神经网络modelSequential([Conv2D(6,kernel_size(5,5),activationrelu,input_shape(28,28,1)),MaxPooling2D(pool_size(2,2)),Conv2D(16,kernel_size(5,5),activationrelu),MaxPooling2D(pool_size(2,2)),Flatten(),Dense(120,activationrelu),Dense(84,activationrelu),Dense(10,activationsoftmax)])虽然没有真的运行这段代码盒子里的Python环境支持基础的NumPy但没有Keras/TensorFlow但陆鸣理解了结构两个卷积-池化块提取特征然后三个全连接层做分类。“如果用这个CNN重新训练MNIST准确率能达到99%以上。”盒子说“全连接网络只能看到全局像素统计而CNN看到了局部结构——数字‘8’的两个圆圈数字‘4’的三角形。”陆鸣忽然想起一件事。“我们净土地外面那些废墟里有很多失控的机器。如果能用摄像头拍下它们的图像训练一个CNN来分类哪些是危险的、哪些是相对安全的……探索者出去的时候就不用每次都冒险了。”“非常好的应用思路。”盒子说“但训练CNN需要大量标注数据。你有吗”陆鸣沉默了。净土地没有那么多标记好的机器图像。他还需要另一种方法——也许是用“天工”已经训练好的模型做迁移学习。“迁移学习正是我们稍后会讲的内容。”盒子说“现在先完成第二部分循环神经网络RNN。”三“CNN处理的是空间信息——图像、视频帧。而RNN处理的是序列信息——时间序列、文本、语音。净土地的能源核心负载是一个时间序列你可以用RNN来预测未来几分钟的功率变化提前做出调整。”屏幕上出现了一个简单的循环结构一个神经元不仅接收当前输入x_t还接收上一时刻自己的输出h_{t-1}。这个循环让网络有了“记忆”。“RNN的公式h_t activation(W_h·h_{t-1} W_x·x_t b)。当前隐藏状态h_t依赖于过去所有时刻的隐藏状态。”陆鸣想到了能源核心那条振荡的功率曲线。如果他能用过去十分钟的功率值作为输入训练一个RNN来预测下一分钟的功率值他就可以提前调整调节器避免振荡。“但RNN有缺陷。”盒子说“梯度消失/爆炸问题在长序列上尤其严重。你从第四章学过链式法则在时间上展开RNN相当于一个非常深的网络梯度要乘很多个W_h。如果W_h的特征值小于1梯度会指数级衰减梯度消失网络记不住太久之前的信息如果大于1梯度会指数级爆炸梯度爆炸训练不稳定。”“解决方案LSTM长短时记忆网络和GRU门控循环单元。它们引入了‘门’机制——遗忘门、输入门、输出门——来控制信息的保留和丢弃。”屏幕上的LSTM单元结构看起来复杂得多几个Sigmoid门一个tanh激活还有一条贯穿顶部的“细胞状态”线。“细胞状态像一条传送带。遗忘门决定丢弃哪些旧信息输入门决定添加哪些新信息输出门决定当前输出什么。这种结构让LSTM可以记住数百步前的信息。”陆鸣盯着那个图看了很久。他想到的不是数学而是记忆。他自己的记忆也是这样——有些事他早就忘了被遗忘门丢弃有些事他拼命想记住输入门写入细胞状态然后在需要的时候提取出来输出门。LSTM不是在模拟大脑的神经元而是在模拟大脑的记忆系统。“那我们能训练一个LSTM来预测能源核心的负载吗”他问。“可以。但同样需要数据。不过为了让你理解RNN的原理我会给你一个简化的例子——用RNN预测一个正弦波的下一个点。”盒子上给出了代码框架。陆鸣照着写了一个简单的RNN用NumPy手动实现循环逻辑。他生成了一个带有噪声的正弦波序列用前10个点预测第11个点。训练几百步后RNN学会了预测当输入是0.5、0.8、1.0、0.9…时输出应该是下一个值。他跑了一下预测代码得到的曲线和真实正弦波几乎重合。“它学会了。”陆鸣说声音里有一种发现的喜悦“它学会了正弦波的规律。”“对。RNN能学习任何时间序列中的模式。这对于净土地的能源管理、物资需求预测、甚至数据风暴的到来预警都非常有用。”赵工程师不知何时又站在了门口。他听到了“预测能源负载”的部分若有所思。“陆鸣你学完这些大概能帮我优化能源分配算法了。我以前用的是PID但现在看来数据驱动的预测控制可能更有效。”“我还在学。”陆鸣说“还有迁移学习没讲。”四“迁移学习。这是让你在数据稀缺时依然能构建强大AI的关键技术。”盒子的屏幕上出现了一个金字塔底层是“通用特征”中间是“领域特征”顶层是“任务特定特征”。“在大规模数据集如ImageNet包含1400万张标注图片上训练一个深度CNN它的底层会学到非常通用的特征——边缘、颜色、纹理。这些特征几乎是所有视觉任务共通的。你把这样的预训练模型拿过来只微调它的最后几层用你自己的少量标注数据比如净土地的机器图像就能得到不错的效果。”“这就像……”陆鸣试图找一个类比“你小时候学会了认字后来你认什么文件、什么路牌都不需要从头学起。识字是通用能力阅读具体内容是特定任务。”“完美的类比。迁移学习让你站在巨人的肩膀上。在AI领域有公开的预训练模型库——VGG、ResNet、BERT、GPT等。大断线前‘天工’就使用了大规模的迁移学习在通用语料上预训练大语言模型然后在特定任务上微调。”陆鸣忽然意识到一件事——“天工”的强大不仅仅是它的规模大更是因为它学会了“如何学习”。它有通用的知识基础然后能快速适应新任务。这不就是人类的学习方式吗先接受通识教育再专业分工。“所以如果我有个预训练好的CNN我只需要用净土地的少量机器图像去‘微调’最后几层就能得到一个能识别危险机器的模型”“是的。而且微调时你可以冻结前面很多层的权重只训练最后的全连接层。这样需要的计算力和数据量都极少。”陆鸣在脑海里盘算着。净土地废墟里有很多废弃的摄像头他可以拆下来用。只要有动力就能实时拍摄。然后他需要标注一些图像——哪些机器是静止无害的哪些是巡游攻击型的哪些是躺在地上但有可能被重新激活的。几十张标注图像可能就够微调了。他第一次觉得自己可以用AI真正改变净土地的生存状况。不是被动的防御而是主动的感知与预警。“我们能在净土地部署这样的系统吗用摄像头加一个小的计算设备”他问赵工程师。赵工程师沉默了片刻。“计算设备我们有——那台服务器还能跑。但摄像头需要能量和网络连接。我们可以把摄像头装在净土地的瞭望塔上用有线连接到中央枢纽。软件部分……你写。”陆鸣深吸一口气。他要写一个能“看”的AI。五接下来的三天陆鸣几乎没有离开工作间。白天他在赵工程师的指导下把一台旧服务器从仓库里搬出来清掉灰尘接上电源。服务器运行着一个精简版的Linux系统没有图形界面只有黑色的终端和光标。他没用过Linux但在盒子的帮助下他学会了基本的命令行操作——ls、cd、mkdir、nano、python。他写了一个图像采集脚本用USB接口连接一个拆机摄像头实时读取图像帧。然后他写了一个基于迁移学习的分类脚本——他从盒子里得到了一个预训练的CNN模型轻量级的MobileNet适合在低功耗设备上运行去掉了最后的分类层加上自己的全连接层输出2类危险/安全然后用手工标注的50张净土地机器图像进行微调。训练只用了十几分钟。50张图像20个epoch。他在测试集另外20张没见过的图像上运行了一下准确率85%。不高但比随机猜测的50%好得多。而且随着他标注更多的图像准确率会继续提升。他把摄像头架在净土地最高的瞭望塔上正对着外面的废墟区域。然后运行了实时检测脚本。屏幕上出现了摄像头的画面——灰色的荒野、散落的废弃机器、远处数据风暴退去后的云雾。每隔一秒钟脚本会对当前帧做一次推理在画面上框出检测到的机器并标注“安全”或“危险”。他看到第一个框出现了——一台倒下的无人机标注“安全”。第二个框——一个静止的机器狗标注“安全”。第三个框——一个半埋在土里的、有六条手臂的机器人标注“危险”。陆鸣盯着那个“危险”的标注心跳加速。那个机器人他以前见过——探索者老陈就是被类似的机器人打成重伤的。现在他的程序认出了它。他成功了。一个从垃圾堆里走出来的废物用他所学的数学、编程、神经网络创造了一个能保护人命的系统。赵工程师站在他身后看着屏幕上的检测框没有说话。但他的眼角有东西在反射灯光亮晶晶的。“这个系统”赵工程师说“就叫‘守望者’吧。”那天晚上陆鸣给系统加了一个功能当检测到危险机器时发出警报声并在地图上标出位置。他把地图投影在大屏幕上——净土地第一次有了一个智能的“电子哨兵”。盒子在他的口袋里发出了一条消息“第六章完成情况CNN原理90%、池化与感受野85%、RNN与LSTM基础70%、迁移学习95%、实践项目——‘守望者’系统95%。综合评分A-。”“剩余课程进度60%。”“用户已具备基础数学线性代数、微积分、概率统计、编程Python、NumPy、机器学习基础、神经网络全连接CNNRNN、迁移学习。后续将进入更高级的主题生成模型GAN、VAE、强化学习、大语言模型、AI对齐与安全。”陆鸣看着那个“A-”心里说不上是什么滋味。他从来没拿过A哪怕是A-。但在净土地的生存法则里A-并不能让你多吃一碗粥。真正让他觉得有价值的是那个正在实时运行的、能预警危险的“守望者”。他走出工作间爬上瞭望塔看着外面灰色的荒野。摄像头安静地转动着像一只不知疲倦的眼睛。他站在摄像头旁边视线和它重叠。远处有什么在移动。不是数据风暴是一个单独的、小小的光点。光点在废墟中画了一个不规则的圆然后消失了。陆鸣揉了揉眼睛。也许是他看错了也许是某个失控的无人机。但那光点让他想起了盒子背面那个磨损的logo——“天工”的金色圆环。他掏出便携终端点亮了知识星图。星图已经变成了一片璀璨的星海密密麻麻的光点组成了无数个星座。每一个星座代表一个知识领域。他看到了线性代数星座、微积分星座、概率星座、Python星座、机器学习星座、CNN星座、RNN星座……它们之间还有细线相连表示知识的关联。他不是废物了。他甚至不仅仅是一个工程师。他正在变成一个“理解AI”的人——不是从外部观察而是从内部构建。他知道一个神经网络怎么从随机权重变成手写数字识别器知道一个卷积核怎么在图像的滑动中提取边缘知道一个LSTM怎么在时间的循环中保留记忆。他知道这些。因为他亲手做过。他关上终端走下瞭望塔。工作间的灯还亮着服务器的风扇嗡嗡地转。沈莜在门口放了一碗粥碗下面压了一张纸条“听说你弄了个会报警的东西。干得不错。粥是奖励。明天多给你一碗。”陆鸣端起碗粥已经凉了。但他不在乎。他喝了一口觉得这是他在净土地喝过的最好喝的一碗粥。不是因为味道。是因为明天他还会有新的知识要学新的代码要写新的系统要建。明天的他会比今天更懂这个世界。而这个世界——这个由数据和算法驱动的、破碎又可能被修复的世界——正在他的理解中一点一点地清晰起来。第六章 · 完本章知识清单卷积神经网络CNN核心概念卷积核滤波器在输入上滑动做点积运算产生特征图参数共享与局部连接相比全连接大幅减少参数池化层最大池化/平均池化降维、平移不变性经典架构卷积-激活-池化重复最后接全连接层分类CNN的训练滤波器权重通过反向传播学习梯度公式涉及卷积操作的转置转置卷积用于可视化或生成循环神经网络RNN处理序列数据有“记忆”能力隐藏状态在时间步间传递公式h_t activation(W_h·h_{t-1} W_x·x_t b)问题长序列上的梯度消失/爆炸LSTM长短时记忆网络引入门机制遗忘门、输入门、输出门和细胞状态能够长期保存信息缓解梯度消失迁移学习在大型通用数据集上预训练模型提取通用特征在小规模领域数据上微调最后几层适应具体任务节省数据和计算资源是数据稀缺场景下的关键方法实践应用CNN可用于图像分类/目标检测如识别危险机器RNN/LSTM可用于时间序列预测如能源负载迁移学习让净土地能用少量标注数据快速部署AI系统思考题供读者自测为什么CNN比全连接网络更适合图像任务用参数数量和特征提取的角度解释。如果你要识别净土地居民的情绪高兴/悲伤/恐惧你会用CNN还是RNN为什么迁移学习中的“冻结层”和“微调层”如何选择什么情况下要冻结更多底层下一章预告第七章《创造与想象》陆鸣将进入生成模型的世界——变分自编码器VAE和生成对抗网络GAN。他将学习如何让AI“创造”新图像、新声音甚至新的文字。同时净土地的物资短缺问题日益严重陆鸣试图用生成模型设计新的工具和零件通过3D打印机幸存的一台制造出来。这一章将带他走向AI的创造性前沿也会让他第一次直面AI伦理问题——当AI能生成以假乱真的内容时我们如何分辨真伪