NOAI 2024 复赛第2题 | 一张32×32的图,怎么看出是AI画的?
计算机视觉 CNN
用NOAI复赛真题,构建孩子的AI知识图谱
每个知识点后续都会单独展开讲解,欢迎先关注收藏
这道题在做什么
5,000张真实照片,5,000张AI用扩散模型生成的假照片,每张只有32×32像素。你要训练一个卷积神经网络(CNN),判断一张图是真拍的还是AI生成的。
特别的是,评分不只看准确率——网络越简单,分数越高。层数多一层,准确率至少要高好几个百分点才能回本。
知识全景
这道题的知识链路和2024年第1题(投篮命中率预测)有重叠(监督学习、损失函数、优化器等),但新增了一整块内容:图像处理与卷积神经网络。
| 阶段 | 知识点 |
| 理解任务 | ① 图像的数字表示 |
| 认识数据 | ② 生成模型与AI图像 |
| 搭建模型 | ③ 卷积运算 ④ 卷积核与特征提取 ⑤ 池化 ⑥ 卷积神经网络(CNN) |
| 提升模型 | ⑦ 数据增强 ⑧ 批归一化(BatchNorm) |
| 设计策略 | ⑨ 模型复杂度与评分权衡 |
2024年第1题涵盖的监督学习、损失函数、梯度下降、过拟合等基础知识在这道题中同样适用,不再重复展开。
① 图像的数字表示
在计算机眼里,一张图片就是一堆数字。
一张32×32的彩色图片,由3层数字矩阵组成——红(R)、绿(G)、蓝(B)各一层。每一层的每个格子里是一个0到255的数字,表示这个像素在该颜色通道上的亮度。
所以这张图的数据形状是 3×32×32:3个通道、32行、32列,总共3,072个数字。
灰度图只有1个通道。视频是一连串图片。不管多复杂的视觉数据,底层都是数字矩阵。
理解"图片=数字矩阵"是所有计算机视觉任务的起点。
② 生成模型与AI图像
这道题里的"假图片"是用扩散模型(Diffusion Model)生成的。
扩散模型的思路很直觉:先把一张真实图片逐步加噪声,加到最后变成一团纯噪声。然后训练一个神经网络,学会"把噪声一步步去掉,还原成图片"。学会之后,从纯噪声出发,就能生成出看起来像真实照片的新图片。
这类能"创造新数据"的模型统称生成模型。扩散模型是目前最主流的一种,Midjourney、Stable Diffusion、DALL-E都基于这个思路。
但生成的图片和真实照片在细节纹理上有差异。人眼在32×32的分辨率下很难分辨,但CNN可以——这就是这道题存在的前提。
③ 卷积运算
2024年第1题用的MLP把所有输入拉成一条长向量,丢失了像素之间的空间关系。对图像来说,"这个像素旁边是什么"非常重要——这正是卷积运算要解决的问题。
卷积的操作是这样的:拿一个小的数字方块(比如3×3),在图片上从左到右、从上到下滑动。每滑到一个位置,把小方块和它覆盖的图片区域做逐元素乘法再求和,得到一个数字。滑完整张图,就产生了一张新的数字矩阵。
这个小方块叫卷积核(也叫滤波器)。它的大小(3×3、5×5等)决定了每次"看"多大一块区域。
关键的好处是:卷积核在整张图片上共享参数。不管图片多大,一个3×3的卷积核只有9个参数。而MLP对每个像素都有独立的权重——32×32的图片就需要1,024个权重连接到一个神经元。这让卷积对图像任务来说远比MLP高效。
④ 卷积核与特征提取
不同的卷积核提取不同的特征。
一个卷积核可能对横线敏感——在横线出现的地方输出大数字,其他地方输出小数字。另一个卷积核可能对竖线敏感,还有的对斜线、角点、纹理变化敏感。
浅层卷积核提取的是低级特征:边缘、线条、颜色变化。深层卷积核把低级特征组合起来,形成高级特征:形状、纹理模式、局部结构。
这道题里,CNN不需要认出"图片里是什么东西"。它只需要捕捉到纹理层面的统计差异——AI生成的图片在像素过渡上往往更平滑,缺少真实照片中相机传感器带来的细粒度噪声。这种差异恰好是浅层卷积核擅长提取的。
这也解释了为什么这道题只需要2层卷积就能达到不错的效果。
⑤ 池化
卷积之后,特征图(Feature Map)的尺寸和输入一样大(如果用了padding的话)。为了减小数据量、提取更宏观的信息,需要池化。
最常用的是最大池化(Max Pooling):把特征图划分成不重叠的小块(比如2×2),每个小块只保留最大值。一次2×2的最大池化,特征图的宽和高都减半。
池化的作用
• 缩小尺寸:减少后续层的计算量
• 提取主要特征:只保留局部最显著的响应
• 增加平移不变性:特征稍微移动几个像素,池化后的结果不变
这道题要求至少2个MaxPool2d层。每次2×2池化将尺寸减半——32×32经过两次池化变成8×8。
⑥ 卷积神经网络(CNN)
把卷积层、激活函数、池化层、线性层组合起来,就构成了卷积神经网络。
一个典型的CNN结构:
输入图片 → [卷积 → 激活 → 池化] × N → 展平 → 线性层 → 输出
• 卷积+激活+池化这个组合重复若干次,逐步提取越来越抽象的特征,同时缩小尺寸
• 展平(Flatten)把最终的特征图从三维(通道×高×宽)拉成一维向量
• 线性层把特征向量映射到最终的分类结果
CNN是计算机视觉领域的基础架构。从2012年AlexNet在ImageNet上大幅领先传统方法开始,CNN一直是图像识别的核心工具。
后来出现了更复杂的CNN变体(ResNet、VGG、EfficientNet等),但基本组件都是一样的:卷积+池化+全连接。
⑦ 数据增强
训练数据越多,模型越不容易过拟合。但如果训练集就那么大怎么办?
数据增强在不增加真实数据的情况下,人为制造更多样的训练样本。对图像来说,常见的增强方式包括:
• 随机水平翻转:左右镜像
• 随机裁剪:裁掉边缘的一小部分,再缩放回原尺寸
• 颜色抖动:微调亮度、对比度、饱和度
• 随机旋转:小角度旋转
每个epoch里,同一张图片经过不同的随机变换,模型看到的都是"稍微不一样"的版本。这迫使模型学习真正有用的特征,而不是记住训练图片的具体样子。
注意:数据增强只在训练时使用,测试时不用——测试时你希望得到稳定、可重复的结果。
⑧ 批归一化(BatchNorm)
2024年第1题讲了数据归一化——在输入数据进入网络之前做一次缩放。批归一化把这个思路推广到了网络内部:在每一层的输出上也做归一化。
为什么需要这样做?随着训练的进行,每一层的输入分布会不断变化(因为前面的层在更新参数)。下一层刚适应了上一层的输出分布,上一层参数一更新,分布又变了。这让训练不稳定,需要更小的学习率和更多的epoch。
BatchNorm在每一层之后把输出标准化为均值0、标准差1,然后再学两个参数把它缩放到合适的范围。这相当于在每一层都"重置"了数据的分布,让训练更稳定、收敛更快。
在这道题的评分公式中,BatchNorm不算作卷积层或线性层,不影响复杂度分。它是一个"免费"的性能提升。
⑨ 模型复杂度与评分权衡
这道题的评分公式把准确率和模型简单性放在一起考量:
最终得分 = (1/(卷积层数+线性层数+1) + 准确率) × 3/4
这不只是一个做题技巧——它反映了机器学习中一个核心问题:模型复杂度与性能的权衡。
更复杂的模型(更多层、更多参数)理论上能表达更复杂的关系。但复杂度的代价是:
• 计算成本:更多参数意味着更慢的训练和推理
• 过拟合风险:参数多了更容易记住训练数据的噪声
• 部署难度:在手机、嵌入式设备等资源有限的环境下,大模型可能跑不动
在实际工程中,一个轻量但准确率95%的模型,往往比一个庞大但准确率97%的模型更有价值。这道题的评分公式就是在训练这种思维:不是越大越好,而是用最少的资源达到最好的效果。
这道题把战场从"二维坐标"搬到了"图像",核心武器从MLP换成了CNN。理解卷积的本质——用小窗口在图上滑动提取局部特征——就抓住了计算机视觉最重要的一个思想。