夜雨聆风学习资料网

ARTICLE · 1030485

Excel里的CNN:用求解器让69个参数自己"学会"识别数字

Excel里的CNN:用求解器让69个参数自己"学会"识别数字

之前我们两次用 Excel 的求解器做最优化——一次是单变量函数的最小值,一次是神经网络的 14 个参数。现在轮到 CNN 了。

这一篇用 Excel 的求解器直接优化 CNN 的 69 个参数。虽然暂时做不到让求解器跑梯度下降,但求解器可以直接求出使  最小的参数——这是验证 CNN 结构是否有效的最直接方法。

一、实验设定

  • 输入:96 张 6×6 像素的手写数字图像(数字 1、2、3 各约 32 张)
  • 网络:3 个过滤器(3×3)→ 3 个卷积子层(4×4)→ 3 个池化子层(2×2)→ 输出层(3 单元)
  • 激活函数:Sigmoid
  • 池化:最大池化
  • 代价函数:96 张图像平方误差的总和 
  • 工具:Excel 求解器(Solver)

二、Excel 操作六步走

步骤 ①:读入学习用的图像数据

把 96 张 6×6 的二值图像读入工作表。每张图的 36 个像素值(0 或 1)排列在工作表的一行中,同时标注正解 

图像编号 | x11 x12 ... x66 | t1 t2 t3
    1   |  1   1  ...  0  |  1  0  0   ← 数字"1"
    2   |  1   1  ...  1  |  0  1  0   ← 数字"2"
   ...
   96   |  1   0  ...  1  |  0  0  1   ← 数字"3"

步骤 ②:设置参数的初始值

69 个参数(27 个过滤器分量 + 3 个卷积偏置 + 36 个输出权重 + 3 个输出偏置)用标准正态分布随机数赋初始值。

步骤 ③:对第 1 张图像计算所有中间变量

按 5-3 节的关系式依次计算:

  • 卷积层加权输入 (式 (1))
  • 卷积层输出 (式 (2))
  • 池化层输出 (式 (3))
  • 输出层加权输入 (式 (4))
  • 输出层输出 (式 (5))
  • 平方误差 (式 (6))

在 Excel 中就是逐个单元格嵌套公式。

步骤 ④:把公式复制到 96 张图像

将步骤③中为第 1 张图像建立的公式,向下复制到其余 95 张图像上。这相当于批量计算——每张图像在同一套参数下跑一次正向传播,算出各自的 

步骤 ⑤:算出 

把所有 96 个  相加:

这就是要求解器最小化的目标单元格。

步骤 ⑥:用求解器执行最优化

在 Excel 的求解器插件中设置:

  • 目标单元格(设为"最小化")
  • 可变单元格:69 个参数(过滤器、权重、偏置)
  • 求解方法:GRG Nonlinear(广义梯度下降)

运行求解器,它自动调整 69 个参数,直到  降到最小值。

三、求解结果

书中展示的实际运行结果:

——求解器找到了一组参数,使得对所有 96 张训练图像的预测误差精确为 0。这意味着 CNN 完美拟合了训练数据。

用 Python 来表达这个结果:

"""
验证:如果 CT=0,意味着对每张图像的预测都是精确的
C = 0.5 * ((t1-a1)^2 + (t2-a2)^2 + (t3-a3)^2) = 0
→ a1=t1, a2=t2, a3=t3 (Sigmoid输出在(0,1),精确等于0或1需要z→∞)
→ 实际中CT接近0就说明预测非常准确
"""

四、用新图像测试:泛化能力

训练好之后,必须用没见过的图像测试——否则可能只是"背下来"了训练数据(过拟合)。

书中用了一个新的 6×6 图像(像字母 "I" 一样的数字 "1"):

测试图像(像I的数字"1"):
0 0 0 0 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 0 0 0 0

把这个测试图像输入到训练好的 CNN 中,输出层的三个值分别是:

  • 最大 → 判定为数字"1"
  • :较小
  • :较小

CNN 正确识别了,并且这个图像与训练集中的任何一张都不完全一样——说明模型学到的是"竖直条"这个模式(而不是具体的像素排列),具备一定的泛化能力。

五、Excel 求解器的局限性

虽然求解器跑出了  的完美结果,但我们要清醒地认识到:

  1. 求解器 ≠ 反向传播:求解器内部用的是数值方法来近似梯度(类似数值微分),所以计算量极大——96 张图像 × 69 个参数 × 多次迭代,对求解器来说非常吃力。

  2. 实际问题中数据量大得多:96 张 6×6 的图像是刻意简化的例题。真实的 MNIST 有 60000 张 28×28 的图像,用求解器去优化上万甚至上百万个参数是不可能的。

  3. 所以需要误差反向传播法:如第 4 章学到的,反向传播法能在一次正向-反向过程中算出所有 69 个参数的梯度,计算效率比数值微分高几个数量级。5-5 和 5-6 节就将为 CNN 建立反向传播公式。

六、小结

  1. Excel 求解器验证了 CNN 结构的有效性:69 个参数能完美拟合 96 张训练图像
  2. 六步操作流程:读入数据 → 设初始值 → 正向计算 → 复制公式 → 算  → 求解器优化
  3. 测试新图像表明 CNN 学到的是模式而非死记——有一定的泛化能力
  4. 求解器的方法无法扩展到大规模问题——这正是我们需要反向传播法的原因

用 Excel 跑 CNN 听起来很疯狂,但它证明了一件事:CNN 不是魔法,就是一层层明确可算的数学运算。

相关学习资料