基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法.docx
-
资源ID:73274250
资源大小:19.78KB
全文页数:8页
- 资源格式: DOCX
下载积分:14.8金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法.docx
基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法|MaratDukhanfromGoogleResearch译者|凯隐责编|Jane出品|AI科技大本营ID:rgznai100【导读】本文介绍的内容主要聚焦Google的一项最新工作改变基于GEMM实现的CNN底层算法提出的新方法。通用矩阵乘法GeneralMatrixMultiply,GEMM是广泛用于线性代数、机器学习、统计学等各个领域的常见底层算法其实现了根本的矩阵与矩阵相乘的功能因此算法效率直接决定了所有上层模型性能目前主流的卷积算法都是基于GEMM来实现的。来自谷歌的PeterVajda在ECV2019中提出了一种全新的间接卷积算法用于改良GEMM在实现卷积操作时存在的一些缺点进而提升计算效率。通用矩阵乘法GEMM是根底线性代数子程序库BasicLinearAlgebraSubprograms,BLAS中的一个函数。BLAS提供了实现矩阵以及向量根本运算的函数最早于1979年度由C.L.LAWSON提出。BLAS的开展大致可以分为三个阶段levels的历程这以及函数定义出版顺序和算法中多项式的阶数和复杂性有关第一阶段只包含与向量vector有关的运算第二阶段添加了向量与矩阵进展运算的操作第三阶段添加了矩阵与矩阵之间的运算前两个阶段的BLAS都是用于向量处理器的而第三阶段适用于矩阵处理器所以BLAS的开展以及硬件的开展密不可分。GEMM属于第三阶段的算法正式公布于1990年度其迭代更新形式为其中A以及B可以进展转置或者hermitian共轭转置而A、B以及C都可以被忽略bestrided因此实际上这个公式就表示了任意矩阵之间所有可能的加法以及乘法组合例如最根本的A*B可以将置1C置为全0矩阵即可这也是其通用性的表现。由于矩阵乘法相对于向量-向量乘法和向量-矩阵乘法有更低的时间复杂度效率更高因此其广泛用于许多科学任务中与之相关的GEMM算法成为了目前BLAS设计者的主要优化对象。例如可以将A以及B分解为分块矩阵使得GEMM可以递归实现。有关GEMM的详细信息可以参见123。怎样对GEMM进展优化是BLAS相关工作的研究热点。基于GEMM的卷积算法及其缺点卷积神经网络CNN在CV问题中的表现很出色有多种在算法层面对齐进展实现的方法直接卷积算法采用7层循环快速卷积算法利用傅里叶变换来进展卷积和基于GEMM的卷积算法。通过将卷积操作用矩阵乘法来代替进而使用GEMM算法来间接进展卷积操作这使得卷积操作可以在任何包含GEMM的平台上进展并且受益于矩阵乘法的高效性任何针对GEMM的改良以及研究都能有助于卷积运算效率的提升进而进步模型的运算速度因此目前大局部主流的神经网络框架例如Tensorflow、Pytorch以及Caffe都使用基于GEMM的方法来在底层代码中实现卷积。详细的基于GEMM的卷积方法需要借助于im2col或者im2rowbuffer来内存转换使得数据格式知足GEMM算法的输入要求进而将卷积操作转化为GEMM操作然而这个转换经过是一个计算开销以及内存开销都比拟大的经过十分是在输入channel数较小时这个经过会在整个卷积经过中占有很大的比例。简言之就是在卷积经过中每个pixel都会被屡次重复的转换这是不必要的计算开销。因此有许多工作都在对这一经过进展改良本文工作提出了一种改良算法间接卷积算法IndirectConvolutionalgorithm主要有以下两个优点1、去掉了im2row的转换经过这使得算法性能有了宏大的提升upto62%。2、用了一个更小的indirectionbuffer来代替原来的im2rowbuffer。不同于im2rowbuffer的大小随着输入channel数线性增加indirectionbuffer没有这个特性因此indirectionbuffer的内存占用特性非常有利于输入channel数较多时的卷积操作。间接卷积算法原始的GEMM通过如下计算来不断迭代进展矩阵运算操作并输出矩阵其中A是输入张量B是一个常量滤波器C是输出矩阵在传统的im2colGEMM算法中通常1而0原始GEMM操作示意图如下图1原始GEMM操作其中im2colbuffer代表矩阵Afiltertensor代表矩阵BA以及B的乘积就是输出copy表示将输入的张量展开为一个二维矩阵也就是im2colbuffer。可以看到buffer的每一行那么是由固定个数步长的pixel展开成一维的向量组成的这些pixel都在原始tensor中的一个patch内在经过以及filtertensor相乘后由于矩阵行列相乘得到一个元素因此这几个pixel的信息都被整合成了一个值也就是对他们进展了卷积操作。最后在输出矩阵C中行数rows代表输出的像素点个数columns代表输出的channel数。可以看到buffer的columns是以及输入channel数有关的。为了降低buffer带来的开销提出了一种间接矩阵乘法的思想不把输入的tensor直接展开并存储在buffer中而只是在buffer中存放每个pixel在inputtensor的坐标也就是从存数据变成了存地址类似于指针pointer思想这样不管channel数有多少存的地址信息始终只有二维极大的降低了buffer的计算以及存储开销如下列图图2indirectconvolution当然由于buffer中存的是地址信息因此不能直接以及filter做矩阵乘法所以就只能通过在buffer的行间进展循环根据该行的pointer找到对应的输入数据再将输入数据与kernel相乘并与之前循环的结果拼接起来进而间接的实现矩阵乘法因此叫做indirectionbuffer。对于不同的卷积步长只需要将不同步长对应的卷积patch位置确定即可。而对于padding策略将指向填充位置的pointer对应的输入pixel的向量值全部设置为0。间接卷积算法的缺点间接卷积算法作为GEMM-BASEDCNN算法的一种改良能极大的提升计算效率但是存在以下几个限制1.这个算法是为NHWClayout设计的也就是讲应用范围比拟窄不能以及目前的主流方法相比。2.算法适用于前向传播中的卷积操作而在反向传播中作用不大不及基于col2im以及row2im的算法。3.具有以及GEMM一样的缺点在深度小卷积核的卷积操作中效率并不好。实验测试结果EfficientDeepLearningforComputerVision主要聚焦于怎样将深度学习部署到挪动设备上因此本文的工作主要在挪动设备以及挪动芯片上进展测试结果如下可以看到一旦步长增加那么Indirectconvolution带来的性能提升就会明显下降这是因为步长越大在原始的GEMM算法中重复计算的量就会减小因此原始GEMM的性能本身就会提升而indirectconvolution并不受益于步长增加。延伸介绍EfficientDeepLearningforComputerVisionWorkshop目前CV方向主流的研究都着重于怎样提升算法以及模型性能并不是太注重模型速度运算时间内存消耗等与运算资源有关的性能指标这不利于将模型部署在类似于挪动设备等计算资源有限的平台上。CVPR的这个workshop主要关注评估模型的计算开销以及存储开销有关的指标和怎样将其应用到挪动设备上相关团队隶属于谷歌研究院详见4。参考资料 1s:/spatial-lang.org/gemm 2s:/en.wikipedia.org/wiki/Vector_processor 3s:/petewarden/2021/04/20/why-gemm-is-at-the-heart-of-deep-learning/ 4s:/sites.google/view/ecv2019/home原文链接s:/arxiv.org/abs/1907.02129*本文为AI科技大本营编译文章转载请联络1092722531精彩推荐 “只讲技术回绝空谈2019AI开发者大会将于9月6日-7日在北京举行这一届AI开发者大会有哪些亮点一线公司的大牛们都在关注什么AI行业的风向是什么2019AI开发者大会倾听大牛共享聚焦技术理论以及万千开发者共成长。目前大会盲订票限量出售中扫码购票领先一步推荐浏览码农们的血与泪新零售全渠道中台的前世今身腾讯拥抱开源首次公布开源道路图技术研发向分享、复用以及开源迈进你点的每个“在看我都认真当成了喜欢