论文阅读训练数据稀疏?我们可以做得更好!(稀疏输入×神经网络 on PyTorch)
Posted 囚生CY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文阅读训练数据稀疏?我们可以做得更好!(稀疏输入×神经网络 on PyTorch)相关的知识,希望对你有一定的参考价值。
- 论文标题:Submanifold Sparse Convolutional Networks
- 中文标题:子流形稀疏卷积网络
- 论文下载地址:arxiv@1706.01307
- 论文项目地址:GitHub@SparseConvNet,注意该项目是基于 P y T o r c h \\rm PyTorch PyTorch开发的,是一个可安装的 P y t h o n P a c k a g e \\rm Python\\space Package Python Package,且只能在 L i n u x \\rm Linux Linux环境中安装,目前该 P a c k a g e \\rm Package Package还没有被 P y P i \\rm PyPi PyPi收录,各大镜像上也搜不到这个包(
spconv
)。
序言
之所以距离 D D L \\rm DDL DDL还剩四五天还重看一篇论文,是因为上一篇【论文实现】以SVD的分解形式进行深度神经网络的训练(PyTorch)出现很严重的问题,似乎对稀疏训练的理解还是太浅薄,毕竟已经有前人对稀疏训练做了一些工作的,可以考虑借鉴一些内容。本文应该算是比较有深度的一篇文章了,因为作者完成了全部的实现并封装成包。
纵观这学期,从寒假伤病的低谷中慢慢休整,直到三月中旬跑出第一个 45 45 45分以内的 10 k m 10\\rm km 10km宣告恢复巅峰,后来四月到五月经历了一场过山车式的恋爱,尝尽酸甜苦辣。五月潜心跑步,在繁忙的学业中完成月跑 135 k m 135\\rm km 135km,数次刷新 p b \\rm pb pb并完成寒假时就想跑的人生第一个场地半马。最终在 6 6 6月 19 19 19日把 10 k m 10\\rm km 10km跑到历史最佳 42 42 42分 33 33 33秒,此时笔者也从期初的近 78 k g 78\\rm kg 78kg掉到只剩 66 k g 66\\rm kg 66kg,可能是近十年以来最轻的体重了。
整体来看,这学期对笔者的影响特别特别的大,除了跑步及其带来的改变外,笔者与两三位挚友的深交,也加深了对一些人和许多事的认识与经验。虽然在很多方面依然还是非常非常的菜,毫无任何长进,那笔者也无可奈何了。
说说最近的事情,期末考成狗,成绩还没全部出来,估计不会特别好看。这两天在赶邓琪最终的汇报,搞完基本上这学期就彻底解脱了。又一学期结束,发现依然两手空空,实在是非常的真实。近期身体状态一般(天气太热,真的跑不动),学习状态尚可(受了一些刺激)。虽然已经过了很久,心态很平复了,但是偶尔还是会被一些突发事件给触动。虽说眼不见为净,但是好奇心总会害死猫,尤其当 W \\rm W W的 P O S T \\rm POST POST莫名其妙就出现在了列表里时,事情就变得非常胃疼。
人生也可以视为一个不断适应变化的过程罢,可能笔者之前的生活过于一成不变了,约莫如是,毕竟完全极端地抹除一些存在几乎是不可能的。
目录
- 序言
- 摘要 Abstract \\text{Abstract} Abstract
- 1 1 1 引入 Introduction \\text{Introduction} Introduction
- 2 2 2 动机 Motivation \\text{Motivation} Motivation
- 3 3 3 稀疏卷积层与合理的稀疏卷积层 SC and VSC \\text{SC and VSC} SC and VSC
- 4 4 4 实现 Implementation \\text{Implementation} Implementation
- 5 5 5 实验 Experiments \\text{Experiments} Experiments
- 6 6 6 相关工作 Related Work \\text{Related Work} Related Work
- 7 7 7 结论 Conclusion \\text{Conclusion} Conclusion
- 参考文献 References \\text{References} References
- 图表汇总
摘要 Abstract \\text{Abstract} Abstract
-
卷积神经网络(convolutional neural networks,下简称为 CNN \\text{CNN} CNN)通常用于分析时空数据(spatio-temporal data),如图像、视频、 3 D \\rm 3D 3D图形等。这类数据的张量表示一般是稠密的(dense),但是也有稀疏的(sparse)情况,如:
- 白纸上的笔画(penstrokes),本质是在二维白纸上用一维黑笔进行涂鸦,得到的图片矩阵是稀疏的,同理通过 O F F \\rm OFF OFF模型在 3 D 3\\text{D} 3D空间中构造 2 D 2\\text{D} 2D平面得到的 3 D 3\\rm D 3D张量也是稀疏的。
- 通过 LiDAR \\text{LiDAR} LiDAR扫描仪或者 RGB-D \\text{RGB-D} RGB-D照相机拍摄得到的 3D \\text{3D} 3D点云(point clouds);
一般来说常规针对稠密张量的运算方法在稀疏张量上是低效的,同理 CNN \\text{CNN} CNN的传统实现算法在稀疏输入数据上的运算也是很低效的。
-
本文实现一种用于处理稀疏输入的 CNN \\text{CNN} CNN,与以往工作的不同之处在于,本文的实现方式的 CNN \\text{CNN} CNN严格地在子流形上实现运算(operates strictly on submanifolds),而非在网络中的每一层进行扩张观测(dialting the observation with every layer in the network)。
原文:
We introduce a sparse convolutional operation tailored to processing sparse data that differs from prior work on sparse convolutional networks in that it operates strictly on submanifolds, rather than ‘dilating’ the observation with every layer in the network.
- 笔者注:
关于何为子流形,何为扩张观测,仍需后文的阅读与理解。- 子流形:指高维空间中的低维数据。
- 扩张观测:目前的理解是对于扩张的理解是卷积层中的非基态元素会在前向传播中以指数级的速度扩张成更多的非基态元素,非基态元素的运算相比于基态元素要慢,所以会导致原本稀疏的输入不断变稠密,导致运行复杂度增加。
- 笔者注:
-
本文的实验结果表明,子流形稀疏卷积网络(submanifold sparse convolutional networks,下简称为 SSCN \\text{SSCN} SSCN)可以在显著较少的计算量下取得与先进的模型基本同等水平的结果。
1 1 1 引入 Introduction \\text{Introduction} Introduction
-
正如摘要提及的那样,一些时空数据的张量表示是稀疏的,而传统 CNN \\text{CNN} CNN处理稀疏输入非常低效,因此前人已经实现了一些用于高效处理稀疏输入的 C N N \\rm CNN CNN架构:
-
参考文献 [ 1 ] [1] [1]:与传统 CNN \\text{CNN} CNN实现并无大异,但是在每秒浮点运算数(floating point operation per second,下简称为 FLOPs \\text{FLOPs} FLOPs)层面上改进了计算资源的耗用。
-
参考文献 [ 2 ] [2] [2]:与传统 CNN \\text{CNN} CNN实现并无大异,但是改善了内存占用。
-
参考文献 [ 9 ] [9] [9]:该文提出 O c t N e t s \\rm OctNets OctNets微调了卷积算子(convolutional operator)来生成那些原理兴趣区域(regions of interest)的网格点(grid)中的平均隐层状态(average hidden states)。
-
笔者注:这个可能需要阅读原论文才能弄明白究竟 O c t N e t s \\rm OctNets OctNets做了什么,看起来参考文献 [ 9 ] [9] [9]还是比较新的论文( 2016 2016 2016),应该还是值得一看的,看标题似乎是关于高维表示的学习,笔者猜想可能是通过对高维稀疏数据进行嵌入降维来降低复杂度。
在本文第 6 6 6节相关研究中专门对参考文献 [ 9 ] [9] [9]做了一些描述,可以看一看。
-
-
-
上述三篇参考文献的缺陷在于,它们把稀疏数据在每一层都进行了扩张(dilate),因为他们实现了一个完整的(full)卷积函数。而本文实现了贯穿整个网络的运算过程中,可以保持相同的稀疏模式(sparsity pattern)来训练 C N N \\rm CNN CNN,而无需扩张特征映射(feature maps)。
-
笔者注:
- 特征映射(feature maps),或者翻译为特征图,是 C N N \\rm CNN CNN中的重要概念,每个卷积层会计算 o u t c h a n n e l s \\rm outchannels outchannels张特征图,然后将这些特征图叠加得到卷积层的输出结果。
- ~~其实这句话还是很难于理解,仍需下文的阅读与理解。~~基本算是搞明白了。
-
-
本文具体实现方法是提出两种卷积算子(convolutional operator):详见本文第 3 3 3节相关内容
- 稀疏卷积层(sparse convolution,下简称为 S C \\rm SC SC);
- 合理的稀疏卷积层(valid sparse convolution,下简称为 V S C \\rm VSC VSC);
-
本文的实验是基于手写数字识别与 3 D 3\\rm D 3D图形状的数据集,实验结果显示在保持先进模型性能的基础上,可以减少 50 % 50\\% 50%的算力与内存开销。
2 2 2 动机 Motivation \\text{Motivation} Motivation
-
定义 2.1 2.1 2.1:称一个 C N N \\rm CNN CNN是 d d d维的,若它的输入张量是 d + 1 d+1 d+1维的,其中包含 d d d维的时空维度(spatio-temporal dimensions),如长、宽、高、时间戳等,以及 1 1 1维的特征空间维度(feature space dimensions),如 R G B \\rm RGB RGB图像的通道(channels)、曲面法向量(surface normal vector)等。
-
定义 2.2 2.2 2.2:每个稀疏输入对应一个与特征向量(feature vector)相联系的 d d d维站点网格(grid of sites)。称输入张量中的一个站点(site)是活跃的(active),若与之相联系的特征向量中的任意元素都不处于基态(ground state),比如特征向量中的任意元素都非零。
在实际操作中一般会设置阈值来消除那些距离基态很近的站点。
注意:虽然输入张量是 d + 1 d+1 d+1维的,但是活跃性(activity)是一种 d d d维性质,即沿特征空间维度的整个平面要么是活跃的,要么是非活跃的。
-
定义 2.3 2.3 2.3: CNN \\text{CNN} CNN的隐层也可以用一个 d d d维特征空间向量网格(grids of feature-space vectors)来表示。当输入张量在网络中进行运算时,称隐层中的站点是活跃的,若该层中的任意被当作输入的站点都是活跃的。
… a site in a hidden layer is active if any of the sites in the layer that it takes as input is active.
比如我们使用 3 × 3 3\\times3 3×3的卷积核,则每个站点都与隐层中的 3 × 3 = 9 3\\times3=9 3×3=9个站点连接。
-
定义 2.4 2.4 2.4:隐层的活跃性定义也可以类似归纳得到,即每层可以确定下一层中所有活跃状态(active state)。在每个隐层中,不活跃的站点都具有相同的特征向量,即特征向量中所有元素处于基态。注意隐层中的基态通常不为零,尤其是卷积层是带有截距项(bias)时。
- 笔者注:意思应该是基态就是截距项的向量,可能可以理解为基态就是输入为全零时的输出结果。
然而不论基态的具体数值如何,计算出基态的具体数值都只需要在模型训练时进行一次前向传播即可,这就意味着可以显著地节省运行时间与内存占用,具体节省情况依
以上是关于论文阅读训练数据稀疏?我们可以做得更好!(稀疏输入×神经网络 on PyTorch)的主要内容,如果未能解决你的问题,请参考以下文章
IJCAI 2022参数高效的大模型稀疏训练方法,大幅减少稀疏训练所需资源
这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!