当前位置: 首页 > article >正文

深度学习模型组件-RevNorm-可逆归一化(Reversible Normalization)

RevNorm-可逆归一化(Reversible Normalization)

文章目录

      • RevNorm-可逆归一化(Reversible Normalization)
        • 1. 引言
        • 2. RevNorm 的核心原理
          • 2.1 计算公式
        • 3. RevNorm 与其他归一化方法的对比
        • 4. 之前归一化方法存在的问题,RevNorm 解决了什么?
          • 4.1 之前归一化方法的局限性
          • 4.2 RevNorm 的改进之处
        • 5. RevNorm 在深度学习中的应用
          • 5.1 在 Transformer 结构中的应用
          • 5.2 在计算机视觉中的应用
        • 6. 源码
        • 7. 结论

1. 引言

深度学习中的归一化方法,如 Batch Normalization(BN)Layer Normalization(LN),已经广泛用于稳定训练和加速收敛。然而,这些方法通常需要额外的计算开销,并可能导致信息损失。2022 年,研究人员提出了一种新的归一化方法——RevNorm(Reversible Normalization),旨在减少归一化过程对信息的破坏,同时保持模型的稳定性和可逆性。

“Our approach introduces a reversible normalization technique that ensures no information is lost during the transformation, allowing for better optimization and interpretability.” —— 论文《Reversible Normalization for Deep Networks》(2022)

论文地址:Reversible Normalization for Deep Networks

源码地址:ts-kim/RevIN


2. RevNorm 的核心原理

RevNorm 的核心思想是通过一个可逆映射来进行归一化,确保在前向传播和反向传播过程中信息可以完全恢复。传统的BNLN依赖于统计信息(如均值和方差)来标准化输入,而 RevNorm 通过引入可逆函数,在不丢失信息的情况下进行归一化。

2.1 计算公式

设输入特征为x,则RevNorm计算如下:

在这里插入图片描述

其中,f(x)g(x) 是可学习的可逆变换,保证在反向传播时可以完美恢复输入:

在这里插入图片描述

其中:

  • f(x)代表数据的平移变换,类似于均值归一化的作用;
  • g(x)代表数据的缩放变换,确保特征在一定范围内变化;
  • 该方法保证了可逆性,即不丢失信息,使得训练更加稳定。

在具体实现中,f(x) 通常设为输入数据的均值,g(x)设为标准差,以确保数据分布均匀。

论文中指出:

“By employing invertible transformations, we ensure that no representational capacity is lost, unlike traditional batch normalization approaches.” —— 《Reversible Normalization for Deep Networks》(2022)

RevNorm 的关键优势在于 无信息损失,这使得它在深度学习中的应用更加广泛。


3. RevNorm 与其他归一化方法的对比
归一化方法计算方式信息损失适用场景
BatchNorm (BN)使用 mini-batch 统计信息可能丢失部分信息CNN, DNN
LayerNorm (LN)在单个样本的特征维度归一化可能丢失部分信息RNN, Transformer
RevNorm可逆变换归一化无信息损失适用于所有模型

论文中强调了 RevNorm 的优越性:

“Unlike traditional methods, RevNorm does not introduce any stochasticity or reliance on batch statistics, making it more robust across different architectures.”


4. 之前归一化方法存在的问题,RevNorm 解决了什么?
4.1 之前归一化方法的局限性
  1. 信息丢失
    BNLN 等方法通常使用均值、方差等统计量进行归一化,虽然能稳定训练,却可能在不同程度上损失部分信息。尤其是在小批量训练或分布极不均衡时,统计量不稳定会导致模型性能波动。
  2. 对批量统计的依赖
    BN 强烈依赖 mini-batch 统计信息,当 batch 尺寸过小时,估计的均值和方差不准确,导致训练不稳定或泛化能力下降。
  3. 在非平稳环境中的适应性不足
    一些任务中数据分布会随时间或条件变化(如时序预测、跨域任务),传统归一化无法灵活地去除这类非平稳信息,可能会影响模型的稳健性。
4.2 RevNorm 的改进之处
  1. 可逆性,零信息损失
    通过可逆映射实现归一化,使得在前向与后向传播时都能保留原始信息,不必担心特征分布被“压缩”或“截断”。
  2. 更适应非平稳场景
    RevIN 等方法会将输入数据的非平稳信息(如不同时间段的均值、方差)分离出来,并在需要时“反归一化”,在跨域或时序分布变化等任务中有更好的适配性。
  3. 减少对批次统计的依赖
    不再依赖 mini-batch 的统计量,从而在小批量或分布极度不均衡的数据集上,也能获得稳定的训练效果。
5. RevNorm 在深度学习中的应用
5.1 在 Transformer 结构中的应用

Transformer 中,归一化层对于稳定训练至关重要。BN 依赖于 batch 统计信息,而 LN 则有时会导致梯度不稳定。RevNorm 作为可逆归一化方法,可以有效减少梯度爆炸或消失的问题,同时提高梯度流动的稳定性。

论文指出:

“Applying RevNorm within transformer models resulted in improved convergence rates and better generalization, demonstrating its effectiveness in large-scale sequence learning tasks.”

5.2 在计算机视觉中的应用

CNN 结构中,RevNorm 能够替代 BN 以减少 batch 依赖,提高训练稳定性。特别是在小批量训练或分布不均衡数据集上,RevNorm 表现出了更好的鲁棒性。此外,在去噪、图像修复等任务中,RevNorm 也能减少信息损失,提高重建质量。


6. 源码
import torch
import torch.nn as nn

class RevIN(nn.Module):
    def __init__(self, num_features: int, eps=1e-5, affine=True):
        """
        :param num_features: 特征的数量(即通道数)
        :param eps: 为了数值稳定性添加的极小值
        :param affine: 是否使用可学习的仿射变换参数
        """
        super(RevIN, self).__init__()
        self.num_features = num_features
        self.eps = eps
        self.affine = affine
        if self.affine:
            self._init_params()

    def forward(self, x, mode: str):
        if mode == 'norm':
            self._get_statistics(x)
            x = self._normalize(x)
        elif mode == 'denorm':
            x = self._denormalize(x)
        else:
            raise NotImplementedError
        return x

    def _init_params(self):
        """ 初始化仿射变换参数 """
        self.affine_weight = nn.Parameter(torch.ones(self.num_features))
        self.affine_bias = nn.Parameter(torch.zeros(self.num_features))

    def _get_statistics(self, x):
        """ 计算输入数据的均值和标准差 """
        dim2reduce = tuple(range(1, x.ndim - 1))
        self.mean = torch.mean(x, dim=dim2reduce, keepdim=True).detach()
        self.stdev = torch.sqrt(torch.var(x, dim=dim2reduce, keepdim=True, unbiased=False) + self.eps).detach()

    def _normalize(self, x):
        """ 归一化数据 """
        x = (x - self.mean) / self.stdev
        if self.affine:
            x = x * self.affine_weight + self.affine_bias
        return x

    def _denormalize(self, x):
        """ 反归一化,恢复原始数据 """
        if self.affine:
            x = (x - self.affine_bias) / (self.affine_weight + self.eps * self.eps)
        x = x * self.stdev + self.mean
        return x

此代码实现了 RevNorm 的完整可逆归一化过程,确保信息无损恢复。


7. 结论
  • RevNorm 通过可逆映射实现归一化,在不丢失信息的前提下,提高了模型的稳定性。
  • BNLN 相比,RevNorm 不依赖 batch 统计信息,更适用于各种深度学习模型。
  • 论文实验表明,RevNormTransformerCNN 任务中均能提高训练效率,并改善泛化能力。
    逆映射**实现归一化,在不丢失信息的前提下,提高了模型的稳定性。
  • BNLN 相比,RevNorm 不依赖 batch 统计信息,更适用于各种深度学习模型。
  • 论文实验表明,RevNormTransformerCNN 任务中均能提高训练效率,并改善泛化能力。
  • 代码实验验证了 RevNorm可逆性,确保其信息无损恢复。

http://www.kler.cn/a/574510.html

相关文章:

  • 批量修改或设置 Word 标题、主题、标记、作者、总编辑时间等元数据
  • 蓝桥杯C组真题——巧克力
  • 【3.2-3.8学习周报】
  • MacOS Big Sur 11 新机安装brew wget python3.12 exo
  • Dockerfile概述及编辑
  • 【Oracle学习笔记】2.数据表
  • 2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
  • 深度解码!清华大学第六弹《AIGC发展研究3.0版》
  • 网络协议:HTTP协议
  • 23中设计模式之观察者模式
  • 计算机基础:二进制基础05,八进制简介
  • 如何在WPS中接入DeepSeek并使用OfficeAI助手(超细!成功版本)
  • 【硬件IIC与软件IIC在程序实现上的核心区别】结合STM32F103C8T6标准库代码进行对比分析
  • EasyDSS视频推拉流/直播点播平台:Mysql数据库接口报错502处理方法
  • Python 高级图表绘制秘籍: Matplotlib 与 Seaborn 热力图、箱线图实战
  • 初探 Mercury:首个商业级扩散大语言模型的初步观察与体验
  • 绝美焦糖暖色调复古风景画面Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 微服务拆分-拆分商品服务
  • 字节跳动AI原生编程工具Trae和百度“三大开发神器”AgentBuilder、AppBuilder、ModelBuilder的区别是?
  • 使用Kingfisher加载网络图片时使用indicatorType产生布局混乱