Tnlearn是一个开源的Python库。它基于符号回归算法生成任务特定的神经元,然后利用多样化的神经元构建神经网络。
快速链接
动机
-
受NuronAI启发 在过去十年中,成功的网络主要在新颖的架构中使用单一类型的神经元,然而最近的深度学习研究受到人脑神经元多样性的启发,导致了新人工神经元设计的提出。
-
基于任务的神经元设计 鉴于人脑依赖于基于任务的神经元,人工网络设计能否从关注基于任务的架构转向基于任务的神经元设计?
-
增强表征 由于不存在普遍适用的神经元,基于任务的神经元可以在相同结构内增强特征表征能力,这得益于其对任务的内在归纳偏置。
特点
-
采用向量化符号回归来找到适合输入数据的最优公式。
-
我们对获得的基本公式进行参数化,创建可学习参数,作为神经元的聚合函数。
概览
这里将展示一张描述tnlearn结构的精美图片。
基准测试
我们选择了几种先进的机器学习方法进行比较。
方法 | 会议 | 代码链接 |
---|---|---|
XGBoost | ACM SIGKDD 2016 | 采用官方代码 |
LightGBM | NeurIPS 2017 | 由widedeep实现 |
CatBoost | Journal of big data | 采用官方代码 |
TabNet | AAAI 2021 | 由widedeep实现 |
Tab Transformer | arxiv | 采用官方代码 |
FT-Transformer | NeurIPS 2021 | 由widedeep实现 |
DANETs | AAAI 2022 | 采用官方代码 |
我们在两组真实世界数据上测试了多种先进的机器学习方法。测试结果(MSE)如下表所示:
方法 | 粒子碰撞 | 小行星预测 |
---|---|---|
XGBoost | $0.0094\pm0.0006$ | $0.0646\pm0.1031$ |
LightGBM | $0.0056\pm0.0004$ | $0.1391\pm0.1676$ |
CatBoost | $0.0028\pm0.0002$ | $0.0817\pm0.0846$ |
TabNet | $0.0040\pm0.0006$ | $0.0627\pm0.0939$ |
TabTransformer | $0.0038\pm0.0008$ | $0.4219\pm0.2776$ |
FT-Transformer | $0.0050\pm0.0020$ | $0.2136\pm0.2189$ |
DANETs | $0.0076\pm0.0009$ | $0.1709\pm0.1859$ |
基于任务的网络 | $\mathbf{0.0016\pm0.0005}$ | $\mathbf{0.0513\pm0.0551}$ |
资源
以下是人工神经网络多样性的资源总结。
资源 | 类型 | 描述 |
---|---|---|
QuadraLib | 库 | QuadraLib 是一个用于高效优化和设计探索二次网络的库。QuadraLib 的论文获得了 MLSys 2022 最佳论文奖。 |
范峰磊博士的 GitHub 页面 | 代码 | 范峰磊博士的 GitHub 页面总结了一系列关于二次网络的论文和相关代码,包括二次自编码器和 ReLinear 训练算法。 |
多项式网络 | 代码 | 这个代码库展示了如何构建深度多项式网络并使用张量分解进行稀疏化。 |
树突 | 书籍 | 一本全面涵盖树突计算所有方面的综合性书籍。 |
依赖
你应该确保 PyTorch 的版本与 CUDA 的版本相对应,以保证 GPU 加速。以下是参考版本:
Pytorch >= 2.1.0
cuda >= 12.1
其他主要依赖项在安装 tnlearn 时会自动安装。
安装
可以使用 pip 轻松安装 tnlearn 及其依赖项:
pip install tnlearn
也可以使用 conda 轻松安装 tnlearn 及其依赖项:
conda install -c tnlearn
快速开始
这是一个快速示例,展示如何在回归任务中使用 tnlearn。注意,你的数据类型应该是表格数据。
from tnlearn import VecSymRegressor
from tnlearn import MLPRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 生成数据
X, y = make_regression(n_samples=200, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
# 使用向量化符号回归算法生成基于任务的神经元
neuron = VecSymRegressor()
neuron.fit(X_train, y_train)
# 使用基于任务的神经元构建神经网络并进行训练
clf = MLPRegressor(neurons=neuron.neuron,
layers_list=[50,30,10]) #指定 MLP 中隐藏层的结构
clf.fit(X_train, y_train)
# 预测
clf.predict(X_test)
tnlearn 中有许多可以调试的超参数,使神经网络性能更加优越。具体用法请参见 API 文档。
API 文档
这是我们的官方 API 文档,可在 Read the Docs 上查看。
引用
如果你觉得 tnlearn 有用,请在你的出版物中引用它。
@article{
}
团队
Tnlearn是由Meng Wang、Juntong Fan、Hanyu Pei和Fenglei Fan共同完成的作品。
许可证
Tnlearn根据Apache License 2.0发布。