训练速度最高100倍提升!基于PyTorch实现的可微逻辑门网络开源

简介: 训练速度最高100倍提升!基于PyTorch实现的可微逻辑门网络开源


本文通过逻辑门组合学习来探索面向机器学习任务的逻辑门网络。这些网络由 AND 和 XOR 等逻辑门组成,为了实现有效训练,本文提出可微逻辑门网络,一种结合了实值逻辑和网络连续参数化松弛的架构。


随着神经网络的成功应用,各项研究和机构也一直在致力于实现快速且高效的计算,特别是在推理时。对此,各种技术应运而生,包括降低计算精度,二进制和稀疏神经网络。本文中,来自斯坦福大学、萨尔茨堡大学等机构的研究者希望训练出一种不同的、在计算机领域被广泛应用的体系架构:逻辑门网络(logic (gate) networks)。


训练像逻辑门这样的离散组件网络所面临的问题是,它们是不可微的,因此,一般而言,不能通过梯度下降等标准方法进行优化。研究者提出了一种方法是无梯度优化方法,如演化训练(evolutionary training),它适用于小型模型,但不适用于大型模型。


在这项工作中,该研究探索了用于机器学习任务的逻辑门网络。这些网络由「AND」和「XOR」等逻辑门电路组成,可以快速执行任务。逻辑门网络的难点在于它通常是不可微的,不允许用梯度下降进行训练。因此,可微逻辑门网络的出现是为了进行有效的训练。由此产生的离散逻辑门网络实现了快速的推理速度,例如,在单个 CPU 核上每秒处理超过一百万张 MNIST 图像。这篇论文入选 NeurIPS 2022 。




纽约大学计算机科学教授 Alfredo Canziani 表示:由逻辑门(如 AND 和 XOR)组成的可学习组合网络,允许非常快速的执行任务及硬件实现。



距离论文公开才过去三个月,论文作者 Felix Petersen 表示该研究的官方实现已经公布,他们发布了 difflogic 项目,这是一个基于 pytorch 实现的可微逻辑门网络库。不仅如此,经过优化现在的训练速度比最初的速度快 50-100 倍,因为该研究提供了高度优化的 CUDA 内核。



项目介绍



difflogic 是一个基于 Python 3.6 + 和 PyTorch 1.9.0 + 的库,基于逻辑门网络进行训练和推理。该库安装代码如下:



pip install difflogic


需要注意的是,使用 difflogic,还需要 CUDA、CUDA 工具包(用于编译)以及 torch>=1.9.0(匹配 CUDA 版本)。


下面给出了 MNIST 数据集的可微逻辑网络模型的定义示例:














from difflogic import LogicLayer, GroupSumimport torch
model = torch.nn.Sequential(    torch.nn.Flatten(),    LogicLayer(784, 16_000),    LogicLayer(16_000, 16_000),    LogicLayer(16_000, 16_000),    LogicLayer(16_000, 16_000),    LogicLayer(16_000, 16_000),    GroupSum(k=10, tau=30))


该模型接收了 784 维的输入,并返回 k=10,对应于 MNIST 的 10 个类。该模型可以用 torch.nn.CrossEntropyLoss 进行训练,类似于在 PyTorch 中训练其他神经网络模型的方式。值得注意的是,Adam 优化器(torch. optimt .Adam)可用于训练,推荐的默认学习率是 0.01 而不是 0.001。最后,同样需要注意的是,与传统的 MLP 神经网络相比,逻辑门网络每层神经元的数量要高得多,因为后者非常稀疏。


为了深入了解这些模块的细节,下面是一些更详细的示例:


layer = LogicLayer(    in_dim=784,             # number of inputs    out_dim=16_000,         # number of outputs    device='cuda',          # the device (cuda / cpu)    implementation='cuda',  # the implementation to be used (native cuda / vanilla pytorch)    connections='random',   # the method for the random initialization of the connections    grad_factor=1.1,        # for deep models (>6 layers), the grad_factor should be increased (e.g., 2) to avoid vanishing gradients)


模型推理


在训练期间,模型应该保持在 PyTorch 训练模式,即.train (),这种模式使得模型保持可微。现在有两种模式可以进行快速推理:


  • 第一种选择是使用 PackBitsTensor。PackBitsTensors 允许在 GPU 上高效动态的执行训练好的逻辑门网络。
  • 第二种选择是使用 CompiledLogicNet。CompiledLogicNet 允许在 CPU 上高效地执行固定训练的逻辑门网络。


下面给出一些实验示例,它们包含在 experiments 目录中。main.py 用于执行,main_baseline.py 是包含规则的神经网络基线。


MNIST

python experiments/main.py  -bs 100 -t  10 --dataset mnist20x20 -ni 200_000 -ef 1_000 -k  8_000 -l 6 --compile_modelpython experiments/main.py  -bs 100 -t  30 --dataset mnist      -ni 200_000 -ef 1_000 -k 64_000 -l 6 --compile_model# Baselines:python experiments/main_baseline.py  -bs 100 --dataset mnist    -ni 200_000 -ef 1_000 -k  128 -l 3python experiments/main_baseline.py  -bs 100 --dataset mnist    -ni 200_000 -ef 1_000 -k 2048 -l 7


CIFAR-10

python experiments/main.py  -bs 100 -t 100 --dataset cifar-10-3-thresholds  -ni 200_000 -ef 1_000 -k    12_000 -l 4 --compile_modelpython experiments/main.py  -bs 100 -t 100 --dataset cifar-10-3-thresholds  -ni 200_000 -ef 1_000 -k   128_000 -l 4 --compile_modelpython experiments/main.py  -bs 100 -t 100 --dataset cifar-10-31-thresholds -ni 200_000 -ef 1_000 -k   256_000 -l 5python experiments/main.py  -bs 100 -t 100 --dataset cifar-10-31-thresholds -ni 200_000 -ef 1_000 -k   512_000 -l 5python experiments/main.py  -bs 100 -t 100 --dataset cifar-10-31-thresholds -ni 200_000 -ef 1_000 -k 1_024_000 -


想要了解更多内容,请参考原项目。


相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
AI 基础知识从 0.6 到 0.7—— 彻底拆解深度神经网络训练的五大核心步骤
本文以一个经典的PyTorch手写数字识别代码示例为引子,深入剖析了简洁代码背后隐藏的深度神经网络(DNN)训练全过程。
1090 56
|
7月前
|
机器学习/深度学习 PyTorch 测试技术
从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
PyTorch作为主流深度学习框架,凭借动态计算图和异构计算支持,广泛应用于视觉与自然语言处理。Intel Extension for PyTorch针对Intel硬件深度优化,尤其在GPU上通过自动混合精度(AMP)提升训练与推理性能。本文以ResNet-50在CIFAR-10上的实验为例,详解如何利用该扩展实现高效深度学习优化。
413 0
|
10月前
|
机器学习/深度学习 存储 算法
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
反向传播算法虽是深度学习基石,但面临内存消耗大和并行扩展受限的问题。近期,牛津大学等机构提出NoProp方法,通过扩散模型概念,将训练重塑为分层去噪任务,无需全局前向或反向传播。NoProp包含三种变体(DT、CT、FM),具备低内存占用与高效训练优势,在CIFAR-10等数据集上达到与传统方法相当的性能。其层间解耦特性支持分布式并行训练,为无梯度深度学习提供了新方向。
506 1
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
|
4月前
|
机器学习/深度学习 数据可视化 网络架构
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
PINNs训练难因多目标优化易失衡。通过设计硬约束网络架构,将初始与边界条件内嵌于模型输出,可自动满足约束,仅需优化方程残差,简化训练过程,提升稳定性与精度,适用于气候、生物医学等高要求仿真场景。
555 4
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
|
5月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
157 1
|
5月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
251 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
基于Pytorch 在昇腾上实现GCN图神经网络
本文详细讲解了如何在昇腾平台上使用PyTorch实现图神经网络(GCN)对Cora数据集进行分类训练。内容涵盖GCN背景、模型特点、网络架构剖析及实战分析。GCN通过聚合邻居节点信息实现“卷积”操作,适用于非欧氏结构数据。文章以两层GCN模型为例,结合Cora数据集(2708篇科学出版物,1433个特征,7种类别),展示了从数据加载到模型训练的完整流程。实验在NPU上运行,设置200个epoch,最终测试准确率达0.8040,内存占用约167M。
基于Pytorch 在昇腾上实现GCN图神经网络
|
9月前
|
Linux 虚拟化 iOS开发
GNS3 v3.0.5 - 开源免费网络模拟器
GNS3 v3.0.5 - 开源免费网络模拟器
955 3
GNS3 v3.0.5 - 开源免费网络模拟器
|
9月前
|
机器学习/深度学习 算法 PyTorch
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
深度学习近年来在多个领域取得了显著进展,但其核心组件——人工神经元和反向传播算法自提出以来鲜有根本性突破。穿孔反向传播(Perforated Backpropagation)技术通过引入“树突”机制,模仿生物神经元的计算能力,实现了对传统神经元的增强。该技术利用基于协方差的损失函数训练树突节点,使其能够识别神经元分类中的异常模式,从而提升整体网络性能。实验表明,该方法不仅可提高模型精度(如BERT模型准确率提升3%-17%),还能实现高效模型压缩(参数减少44%而无性能损失)。这一革新为深度学习的基础构建模块带来了新的可能性,尤其适用于边缘设备和大规模模型优化场景。
411 16
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南

推荐镜像

更多