Google的神经网络表格处理模型TabNet介绍( 二 )


默认情况下 , 训练过程会将信息写入执行脚本的位置的tflog子文件夹 。您可以将tensorboard指向此文件夹以查看训练和验证统计信息:
tensorboard --logdir tflog如果您没有GPU ...…您可以尝试这款Colaboratory笔记() 。请注意 , 如果您想查看Tensorboard日志 , 最好的选择是创建一个Google Storage存储桶 , 并让脚本在其中写入日志 。这可以通过使用tb-log-location参数来完成 。例如 。如果您的存储桶名称是camembert-skyscrape , 则可以在脚本的调用中添加--tb-log-location gs:// camembert-skyscraper 。(不过请注意 , 您必须正确设置存储桶的权限 。 这可能有点麻烦 。 )
然后可以将tensorboard从自己的本地计算机指向该存储桶:
tensorboard --logdir gs://camembert-skyscraper超参数优化在存储库(opt_tabnet.py)中也有一个用于完成超参数优化的快捷脚本 。同样 , 在协作笔记本中显示了一个示例 。该脚本仅适用于到目前为止的分类 , 值得注意的是 , 某些训练参数虽然实际上并不需要 , 但仍进行了硬编码(例如 , 用于尽早停止的参数[您可以继续执行多少步 , 而 验证准确性没有提高] 。 )
优化脚本中变化的参数为Nsteps , featuredim , batch-momentum , gamma , lambda-sparsity 。(正如下面的优化技巧所建议的那样 , outputdim设置为等于featuredim 。 )
论文中具有以下有关超参数优化的提示:
大多数数据集对Nsteps∈[3 , 10]产生最佳结果 。通常 , 更大的数据集和更复杂的任务需要更大的Nsteps 。N_steps的非常高的值可能会过度拟合并导致不良的泛化 。
调整Nd [featuredim]和Na [outputdim]的值是获得性能与复杂性之间折衷的最有效方法 。Nd = Na是大多数数据集的合理选择 。Nd和Na的非常高的值可能会过度拟合 , 导致泛化效果差 。
γ的最佳选择对整体性能具有重要作用 。通常 , 较大的N_steps值有利于较大的γ 。
批量较大对性能有利-如果内存限制允许 , 建议最大训练数据集总大小的1-10% 。虚拟批次大小通常比批次大小小得多 。
最初 , 较高的学习率很重要 , 应逐渐降低直至收敛 。
结果我已经通过此命令行界面尝试了TabNet的多个数据集 , 作者提供了他们在那里找到的最佳参数设置 。使用这些设置重复运行后 , 我注意到最佳验证误差(和测试误差)往往在86%左右 , 类似于不进行超参数调整的CatBoost 。作者报告论文中测试集的性能为85.7% 。当我使用hyperopt进行超参数优化时 , 尽管使用了不同的参数设置 , 但我毫不奇怪地达到了约86%的相似性能 。
对于其他数据集 , 例如Poker Hand 数据集 , TabNet被认为远远击败了其他方法 。我还没有花很多时间 , 但是当然每个人都应邀请他们自己对各种数据集进行超参数优化的TabNet!
TabNet是一个有趣的体系结构 , 似乎有望用于表格数据分析 。它直接对原始数据进行操作 , 并使用顺序注意机制对每个示例执行显式特征选择 。此属性还使其具有某种内置的可解释性 。
我试图通过围绕它编写一些包装器代码来使TabNet稍微容易一些 。下一步是将其与各种数据集中的其他方法进行比较 。
tabnet的各种实现
google官方:github/google-research/google-research/tree/master/tabnet
pytorch: githubdreamquark-ai/tabnet
本文作者的一些改进:github/hussius/tabnet_fork
作者:Mikael Huss
【Google的神经网络表格处理模型TabNet介绍】deephub翻译组