可逆残差网络是残差网络(ResNets)的一种变体,由 Gomez 等人提出。
核心原理:
它允许从后续层的激活结果中精确重建任何给定层的激活结果,从而在反向传播期间无需存储大多数层的激活值,极大降低了内存需求。
具体结构:
由一系列可逆块组成。每层的单元被划分为两个组,分别记为和。每个可逆块接受输入,产生输出,其公式如下:
并且可以从下一层的激活值重建上一层的激活值:
优势:
-
显著减少内存消耗,其激活存储要求与深度无关,相比同等大小的 ResNets,内存占用至少降低一个数量级。
-
反向传播更高效,因为所需内存减少,且每层输出可直接用于计算梯度。
限制:
-
可逆块的跨距只能为 1,否则会丢失信息,无法进行可逆计算。若要采用类似残差块的结构,中间非可逆层的激活结果必须显式存储。
-
模型的雅可比矩阵需具有单位行列式,这对网络可表示的功能施加了一定约束。
应用:
可用于图像识别、分类任务,自然语言处理、语音识别,还能用于开发新的生成模型以创建合成图像、视频等媒体。在半监督学习中也有应用,因为其只需少量内存存储激活值,可用于训练具有大量未标记数据的模型。
计算开销:
一个个连接的神经网络,正向计算的理论加乘开销为,反向传播求导的理论加乘开销为(反向求导包含复合函数求导连乘),而可逆网络多一步需要反向计算输入值的操作,所以理论计算开销为,比普通网络开销约多出左右。但在实际操作中,正向和反向的计算开销在 GPU 上差不多,可以都理解为。那么普通网络的整体计算开销为,可逆网络的整体开销为,即多出了约。
相关实验:
在 CIFAR-10、CIFAR-100 和 ImageNet 等数据集上进行实验,证明了尽管激活存储要求与深度无关,但可逆残差网络建立了与同等大小的 ResNets 几乎相同的分类精度。
在 CAP-VSTNet 中的应用:
CAP-VSTNet 由可逆残差网络和无偏线性变换模块组成,用于多样化的风格迁移。可逆残差网络能保留内容亲和度,且不会引入冗余信息。其每个可逆残差块执行一对输入的函数,使用通道分区方案,将输入沿通道维度分成两个大小相等的部分。通过堆叠多层和块来获得大的感受野,以捕获密集的成对关系。放弃了归一化层,因为它对学习风格表示提出了挑战。为了捕获大规模风格信息,挤压模块用于将空间信息减少倍,并将通道维度增加倍。结合可逆残差块和挤压模块来实现多尺度架构。
在 PyTorch Memcnn 中的应用:
PyTorch Memcnn 使用了可逆残差网络技术,能在训练深度学习模型时大幅降低内存占用,无需改动现有代码结构。在大模型上能省的显存,但计算量可能略微增加。模型越深,节省的显存越多。使用时需注意可逆层前后的特征维度得一样,且不是所有层都能换成可逆的。
在 Residual Flows 中的应用:
Residual Flows 基于可逆残差网络,并进行了创新性提升,可用于更大规模的网络和数据集。其核心技术创新点包括无偏密度估计、内存高效的梯度重 formulization、引入 LipSwish 激活函数等。可应用于高质量的图像合成、视频生成、自然语言的文本生成等,尤其适合大规模图像数据库的密度估计任务。它具有大规模兼容性、灵活性和易用性等特点,适配 Python 3.6+和 PyTorch 1.0+环境,通过 Pip 安装<代码开始>residual-flows<代码结束>包即可使用,官方提供了预处理脚本和预训练模型。
在可逆半色调方法中的应用:
构建可逆半色调的抖动网络模型,深层特征提取模块包括若干深层特征提取子模块,每个子模块由噪声补偿块和轻量型残差块依次正向连接而成。噪声补偿块采用两个卷积分别作为上层网络输出特征和高斯噪声的映射,通过加性变化得到下层网络输入。在半色调过程中,将连续彩色图像输入模型得到伪半色调图像,再经二元门得到可逆半色调图像;在恢复色调过程中,输入可逆半色调图像可输出连续彩色图像。训练该模型时,损失函数包括可逆半色调损失和恢复损失,其中可逆半色调损失又包含色调一致性损失、二值损失、感知一致性损失和蓝噪声损失等。
相关开源项目及链接:
- GitHub - renmengye/revnet-public:https://github.com/renmengye/revnet-public
- residual-flows:https://gitcode.com/gh_mirrors/re/residual-flows
如需了解更多关于可逆残差网络的详细信息,可参考上述相关论文和开源项目。同时,不同应用场景中对可逆残差网络的具体实现和优化可能会有所差异,具体使用时需根据实际需求进行调整和改进。