116、超分中的归一化技术:BN、LN 与 IN 对重建效果的影响

116、超分中的归一化技术:BN、LN 与 IN 对重建效果的影响
116、超分中的归一化技术:BN、LN 与 IN 对重建效果的影响去年夏天调一个EDSR的复现,跑了两天loss死活降不下去,PSNR卡在32.5纹丝不动。我盯着tensorboard上的曲线,感觉像在看心电图——平坦得让人绝望。后来把BatchNorm换成LayerNorm,一个epoch就掉了0.8个点,再跑两天直接干到33.7。当时我就意识到,归一化这玩意儿在超分里根本不是“加一个就行”那么简单。为什么超分对归一化这么敏感?先想清楚一个问题:超分网络在学什么?它学的是从低分辨率到高分辨率的映射函数,这个函数本质上是局部的、平移等变的。你给网络一个2x2的patch,它应该输出对应的4x4细节,不管这个patch在图像左上角还是右下角。但BatchNorm干了一件什么事?它沿着batch维度做归一化,把不同样本、不同位置的激活值混在一起算均值和方差。这等于告诉网络:“嘿,你输出的特征分布得跟整个batch的平均水平对齐。”对于分类任务这没问题——所有猫的图片在高层特征上确实应该相似。但对于超分,不同图像、不同区域的纹理细节天差地别,强行对齐反而破坏了局部特征的表达能力。我做过一个实验:在SRResNet的残差块里用BN,训练时PSNR还行,但一换到测试集,单张图推理的结果明显发灰,高频细节像被磨皮了一样。这就是BN的batch依赖在作祟——训练时batch size够大(32或64),统计量相对稳定;测试时单张图进去,BN直接拿训练集累积的running mean和running var来归一化,相当于给测试图套了一层“平均滤镜”。