训练速度最高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 -


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


相关文章
|
13天前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
156 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
20天前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现传统CTR模型WideDeep网络
本文介绍了如何在昇腾平台上使用PyTorch实现经典的WideDeep网络模型,以处理推荐系统中的点击率(CTR)预测问题。
185 66
|
11天前
|
机器学习/深度学习 文件存储 异构计算
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
61 18
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
|
7天前
|
机器学习/深度学习 文件存储 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
16 1
|
1月前
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
285 19
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
23天前
|
机器学习/深度学习 人工智能 搜索推荐
PaSa:字节跳动开源学术论文检索智能体,自动调用搜索引擎、浏览相关论文并追踪引文网络
PaSa 是字节跳动推出的基于强化学习的学术论文检索智能体,能够自动调用搜索引擎、阅读论文并追踪引文网络,帮助用户快速获取精准的学术文献。
184 15
|
2月前
|
机器学习/深度学习 人工智能 PyTorch
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
本文将系统阐述DPO的工作原理、实现机制,以及其与传统RLHF和SFT方法的本质区别。
102 22
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
209 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
2月前
|
人工智能 安全 PyTorch
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
SPDL是Meta AI推出的开源高性能AI模型数据加载解决方案,基于多线程技术和异步事件循环,提供高吞吐量、低资源占用的数据加载功能,支持分布式系统和主流AI框架PyTorch。
104 10
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
|
2月前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本文详细介绍了如何在昇腾平台上使用PyTorch实现GraphSage算法,在CiteSeer数据集上进行图神经网络的分类训练。内容涵盖GraphSage的创新点、算法原理、网络架构及实战代码分析,通过采样和聚合方法高效处理大规模图数据。实验结果显示,模型在CiteSeer数据集上的分类准确率达到66.5%。

热门文章

最新文章