前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Winograd快速卷积解析

Winograd快速卷积解析

作者头像
AiTechYun
发布2019-07-30 15:22:32
1.9K0
发布2019-07-30 15:22:32
举报
文章被收录于专栏:ATYUN订阅号

Winograd和CuDNN

文章中蓝色背景内容为链接,部分站外链接无法从文章中直接跳转,若要访问请点击原文链接。

深度学习依赖于速度。更快的训练可以构建更大更复杂的网络。我们总是想要更快的网络来更快地检测自动驾驶汽车中的行人,并在资源受限的嵌入式设备和无限其他原因上启用网络。在CNN体系结构中,大部分时间都被卷积层所消耗。今天,我们将讨论Winograd算法,它可以将浮点乘法的数量减少2.25倍。

请参阅:算法文档详解

在我们开始讨论Winograd之前,我希望您了解卷积通常是如何在深度学习库中实现的。它们不是简单地以我们想象卷积的方式实现的。普通卷积的实现速度太慢,因为它们不能很好地利用CPU缓存和引用位置。为此,我们将卷积运算转换为矩阵乘法。让我们看看是怎么做的。

假设我们有大小为(4)的输入图像f和大小为(3)的过滤器g。

然后,利用im2col技术将输入图像转换为

现在不要惊慌失措。我理解,这可能感觉我们增加了不必要的内存消耗,但现在我们可以使用BLAS库来执行矩阵乘法,如CuBLAS (GPU)或Intel MKL (CPU),它们对矩阵乘法进行了非常好的优化。

如果您想深入了解这一点,请查看

https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/making_faster.html

但我们是人类,总是朝着更好的方向发展。那么,我们如何进一步提高速度呢?现在,Winograd公司开始介入了。所以,我们不是做点积,而是用这个公式计算结果矩阵。

我们来概括一下。

在该处:

这样我们可以找到m1、m2、m3、m4的值。然后用它们来计算卷积,而不是矩阵的点积。这里我们可以观察到,(g0+g1+g2)/2和(g0-g1+g2)/2的值不需要在每次卷积操作中计算,因为过滤器保持不变。在训练过程中,我们可以在卷积之前计算一次,在推理过程中可以保存预先计算的结果。现在,我们需要

通过计算m1、m2、m3、m4、m4的计算值,在计算结果中进行4个加法运算和4个MUL运算,计算m1、m2、m3、m4的计算值。在做普通的点积时,我们要做6个MUL运算而不是4个。这使得计算上昂贵的MUL操作降低了1.5倍,这是非常重要的。

在上面的例子中,我用了F(4,3)也就是F(4)和g(3)得到了2个卷积。最小1 d算法F (m, r)嵌套与自身获得最小的2 d算法,F (m x m ,r x r)。如果我们试一试,F(4, 4)和g(3,3) 这将给我们4个卷积,我们将看到,Winograd方法正在4 * 4 = 16 MULs vs 2 * 2 * 9 = 36 MULs在正常卷积可以将MULs减少 2.25 倍,这太疯狂了! !你看!

最后我希望这篇文章能够帮助您了解在您使用的库后面使用了多少优化。我认为这能很好地解释Winograd是如何工作的。在未来的文章中,我们将进一步讨论嵌套最小过滤算法,其中我们将讨论如何针对不同的内核大小实现Winograd。

文章来源:

https://medium.com/@dmangla3/understanding-winograd-fast-convolution-a75458744ff

End

推荐阅读

Recommended reading

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档