用 AI 做卷积窗口卡:核翻不翻面,算出的正负号就可能相反

前天 3阅读

把一张小网格交给AI计算卷积,如果只看输出尺寸,可能漏掉整幅结果符号反了的问题。原因之一是数学卷积与深度学习接口常用的互相关,对核是否翻面有不同约定。做一张不对称小核的窗口卡,可以很快检查自己究竟用了哪种操作。

用 AI 做卷积窗口卡:核翻不翻面,算出的正负号就可能相反

AI模型生成的概念插图:小窗口扫过网格并形成结果;不是运行截图、照片或正文矩阵数值的精确显示。

把输入和规则完整抄在纸上

原创输入X为四行:[1,2,0,1];[0,1,3,2];[2,0,1,1];[1,2,2,0]。核K为两行[1,0]、[0,−1]。只有一个输入通道和一个输出通道,无偏置、无填充、无激活,膨胀率为1,初始步幅为1。

按PyTorch Conv2d文档中的二维互相关约定,核保持当前方向,与窗口对应位置逐项相乘再相加。这个核因此计算窗口左上值减右下值;不是减去整个右下区域的总和,也不先把核旋转。

先手算两格,再让AI补齐

左上窗口是[1,2]与[0,1],结果为1×1+2×0+0×0+1×(−1)=0。向右移动一格,窗口为[2,0]与[1,3],结果是2−3=−1。负数在本练习中必须保留,不擅自加绝对值或ReLU。

继续滑动得到完整三行结果:[0,−1,−2];[0,0,2];[0,−2,1]。输入每边4格、核每边2格,没有填充且每次走1格,所以每边能放4−2+1=3个位置。请AI在每项旁保留窗口左上坐标,便于把错值定位回输入。

翻核与加步幅,是两个独立改动

若按数学卷积先把核旋转180度,核变为[−1,0]、[0,1],恰好是原核的相反数。本例每个输出因此翻转符号。这个结论来自所选核,不能推广成“所有核翻面都只会改符号”;对称核甚至可能完全不变。

再回到不翻核的互相关,只把步幅改为2。用一基坐标表示,窗口左上角只取(1,1)、(1,3)、(3,1)、(3,3),输出两行为[0,−2]、[0,1]。每边数量为向下取整((4−2)/2)+1=2,不能仍画成三格。

本文已用独立逐项乘加程序核对九个窗口、翻核结果和步幅2结果。再把输入全部换成同一个常数,所有结果应为0,因为核权重和为0;这是另一个无需依赖AI判断的手动检查点。

复制后即可得到自己的验算卡

“输入X=[[1,2,0,1],[0,1,3,2],[2,0,1,1],[1,2,2,0]],核K=[[1,0],[0,−1]]。单通道,无偏置、填充、激活,膨胀1。先按不翻核互相关、步幅1逐格给窗口坐标与乘加结果;再分别比较180度翻核和步幅2。最后用常数输入检查权重和,不编造视觉识别效果。”

这份输出不是一张已经学会识别物体的特征图。真实卷积层可以组合多通道并学习权重;本任务的用途是检查算子方向、遍历位置和数值符号,避免在理解第一层运算时就把不同约定混在一起。

资料核对日期:2026年10月2日。算例为原创教学设计,没有进行真实模型训练或性能测试。

参考资料

PyTorch:Conv2d

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。