趋近智
RealNVP 架构(全称为实值非体积保持变换,Real-valued Non-Volume Preserving transformations)将仿射耦合层扩展到了图像等高维数据集。RealNVP 并没有简单地将一维数组对半切分,而是引入了使用二值掩码(binary masks)来划分多维数据的结构化方法。
在处理图像等空间数据时,显式地将一个张量拆分为两个独立的张量会变得很繁琐,且计算效率低下。RealNVP 通过应用二值掩码简化了这一过程。二值掩码是一个与输入形状完全相同的张量,其中填满了 0 和 1。我们使用这个掩码来明确定义哪些特征保持不变,哪些特征进行仿射变换。
设 表示该二值掩码。我们可以使用逐元素乘法重写标准的仿射耦合操作:
在这个等式中, 的元素保持与输入 完全一致。 的元素则通过缩放函数 和平移函数 进行修改。由于 和 只接收输入中未修改的部分,其雅可比矩阵保持为三角阵,从而实现了快速的行列式计算和逆运算。
为了有效捕捉图像中不同像素之间的关系,RealNVP 的作者提出了两种具体的掩码模式:棋盘格掩码(checkerboard masking)和通道掩码(channel-wise masking)。
在棋盘格掩码中,图像的空间维度以类似于标准棋盘的交替模式进行掩码。被分配掩码值为 1 的像素与掩码值为 0 的像素直接相邻。这种设计迫使模型利用像素周围的直接空间上下文 (context)来预测其变换参数 (parameter)。
在通道掩码中,空间维度保持完整,拆分发生在图像张量的深度维度上。如果一个中间张量有 64 个通道,前 32 个通道被分配掩码值 1,剩下的 32 个通道被分配掩码值 0。
单个耦合层只能更新一部分输入数据。如果网络中的每一层都使用完全相同的掩码,那么被分配为 1 的元素将永远不会被变换。为了解决这个问题,RealNVP 架构堆叠了多个耦合层,并在不同操作之间反转二值掩码。如果一个像素在第一层中保持不变,那么第二层中的反转掩码将确保它得到变换,并使用新更新的像素作为其调节上下文。
在两个连续的耦合层中交替执行掩码操作,以确保所有输入变量最终都能得到变换。
函数 和 通常通过深层卷积神经网络 (neural network) (CNN)实现,经常使用残差块。RealNVP 架构的一个特性是这些内部网络本身不需要是可逆的。整个模型的可逆性由耦合架构本身在数学上保证。这使得你可以为 和 使用标准且表达力强的神经网络层,而无需担心它们各自的数学性质。
在训练这些架构时,数值稳定性需要特别注意。仿射耦合方程依赖于对缩放网络的输出进行指数运算,即 。如果网络 输出一个较大的正数,指数函数会爆炸,导致梯度计算失败。实际实现中经常对 的输出应用 tanh 激活函数 (activation function),将数值限制在 -1 到 1 之间。这个受限的输出随后会通过一个可学习的参数进行缩放,从而在防止最大似然估计期间出现数值爆炸的同时,赋予模型足够的灵活性。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•