用 AI 还原最大池化:位置索引还在,较小的值为何回不来
最大池化把一片区域变成一个最大值。如果同时保留最大值的位置,反池化是否就能恢复原图?答案仍是否定的。让AI给一张小网格做来回转换,可以直接看见“知道放回哪里”和“知道原来所有内容”之间的差别。
AI模型生成的概念插图:一个窗口保留最大项及其位置,反池化时其余位置为空;只示意局部机制,不是正文矩阵或运行截图。
四个窗口分别留下什么
固定单通道4×4输入,四行依次为[1,7,4,0]、[3,2,6,5]、[9,8,1,2]、[0,4,3,8]。最大池化窗口为2×2,步幅2,无填充,膨胀率1,不使用向上取整。四个窗口互不重叠,且每个窗口的最大值都唯一。
左上窗口的四项是1、7、3、2,最大值7位于第一行第二列。右上窗口最大值6位于第二行第三列;左下最大值9位于第三行第一列;右下最大值8位于第四行第四列。因此池化输出为两行[7,6]、[9,8]。
若使用从0开始、按行展开原4×4平面的索引,四个位置为1、6、8、15。比如第二行第三列对应行号1、列号2,所以索引为1×4+2=6。它不是这个2×2窗口内部的第几个元素,两种坐标不能混用。
放回最大项,其他格补零
按MaxUnpool2d的部分逆定义,将四个值放回对应索引,其余位置设为0,得到四行[0,7,0,0]、[0,0,6,0]、[9,0,0,0]、[0,0,0,8]。输出尺寸恢复成4×4,但原来的1、3、2以及其他非最大值没有回来。
这些零是反池化约定填入的值,不能解读成模型知道原位置本来就是零。原输入确实有两个零,但反池化结果出现更多零;仅凭最终数组,无法分清哪些零来自原始数据,哪些来自缺失信息的填充。
再把原输入左上角的1改为5,其他15项不变。左上窗口仍以7为唯一最大值,最大位置也没变,所以池化输出与四个索引全部不变。两个不同输入交出同一份保存结果,足以说明不可能从它们唯一恢复原输入。
怎样让 AI 检查来回转换
让AI为每个窗口保留成员、最大值、原图坐标和展平索引,然后单独画出补零的返回网格。人工任选索引6和15,先除以原宽度4找行,再取余数找列,便可检查值有没有回到正确位置。最后用1改5的反例检查它是否仍声称完全可逆。
这里窗口没有重叠,也没有并列最大值;若设置不同,索引选择和重复写回可能涉及实现细节。PyTorch文档还提醒,重复索引可能导致反池化行为不确定。教学小例应先隔离这些因素,再讨论复杂配置。
输出形状同样需要核对,因为不同原尺寸可能池化到同一尺寸,反池化时可用output_size明确目标。即使形状完全正确,也不补回非最大值。分割等网络可以在后续层学习怎样补充信息,但那属于学习与预测,不是池化算子已经保存了原图全部内容。
资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。


