Winograd Convolution 推导 - 从1D到2D

姚伟峰
http://www.cnblogs.com/Matrix_Yao/

1D Winograd 卷积

1D Winograd算法已经有很多文章讨论了,讨论得都比较清楚,这里就不再赘述,仅列出结论。

输入:四维信号
卷积核: 三维向量
输出: 二维信号
可表示为:

其中:

2D Winograd卷积

2D Winograd可以由1D Winograd外推得到,因此为解决2D Winograd问题,首先要重温1D 卷积解决的问题。在此复述一遍:
假设一个卷积核尺寸为3的一维卷积,假设每次我们输出2个卷积点,则我们形式化此问题:F(2, 3)。
因为输出为2,卷积核大小为3,对应的输入点数应该为4,则此问题表述为:

输入:四维信号
卷积核: 三维向量
因此,此卷积的矩阵乘形式应为:

请记住这个形式是Winograd算法解决的问题,后续2D算法将化归为这个问题。
下面我们来定义2D 卷积问题,将1D卷积扩展一维:
假设一个卷积核尺寸为3x3的二维卷积,假设每次我们输出2x2个卷积点,则我们形式化此问题:F(2x2, 3x3)。
因为输出为2x2,卷积核大小为3x3,对应的输入点数应该为4x4,则此问题表述为:

输入

卷积核

因此,此卷积的矩阵乘形式应为:

从这个式子里,我们可以看到1D卷积的影子,这个影子在我们对矩阵作了分块后会更加明显。

再明显一点,我们写成分块矩阵乘的形式:

至此,我们对2D卷积推导出了跟1D形式一致的公式,只不过1D中的标量在2D中变成了小矩阵或者向量。

实操粉

对实操粉而言,到这个形式为止,已经可以写代码了。
由1D Winograd可知,我们可以将该式改写为Winograd形式, 如下:

其中:

注意,这四个M的计算又可以用一维的F(2, 3) Winograd来做,因此2D Winograd是个嵌套(nested)的算法。

理论粉

对一个有追求的理论粉来说,只是得到可以写程序的递归表达肯定是不完美的,他们还是希望有一个最终的解析表达的。其实也很简单,我们把上面的式子规整规整,使得输出成为一个标准的2x2矩阵,有:

可以写为:

依1D Winograd公式, 并结合各M的公式,有下式。

注意到像这些都是2维列向量,hadamard product和concat可以交换而不影响结果,因此:

至此证得。

参考文献

  1. Fast Algorithms for Convolutional Neural Networkse

  2. Fast Algorithms for Signal Processing

  3. Going beyond Full Utilization: The Inside Scoop on Nervana’s Winograd Kernels

  4. 卷积神经网络中的Winograd快速卷积算法 注:本文关于2D Winograd的公式推导是错误的。

Winograd Convolution 推导 - 从1D到2D的更多相关文章

  1. 卷积神经网络中的Winograd快速卷积算法

    目录 写在前面 问题定义 一个例子 F(2, 3) 1D winograd 1D to 2D,F(2, 3) to F(2x2, 3x3) 卷积神经网络中的Winograd 总结 参考 博客:blog ...

  2. AES128加密-S盒和逆S盒构造推导及代码实现

    文档引用了<密码编码学与网络安全--原理和实践>里边的推导过程,如有不妥,请与我联系修改. 文档<FIPS 197>高级加密标准AES,里边有个S盒构造,涉及到了数论和有限域的 ...

  3. 1D Blending

    [1D Blending] BlendTree有类型之分,分为1D.2D.本文记录1D. 1D Blending blends the child motions according to a sin ...

  4. Notes on Convolutional Neural Networks

    这是Jake Bouvrie在2006年写的关于CNN的训练原理,虽然文献老了点,不过对理解经典CNN的训练过程还是很有帮助的.该作者是剑桥的研究认知科学的.翻译如有不对之处,还望告知,我好及时改正, ...

  5. NumPy的详细教程

    原文  http://blog.csdn.net/lsjseu/article/details/20359201 主题 NumPy 先决条件 在阅读这个教程之前,你多少需要知道点python.如果你想 ...

  6. KCF目标跟踪方法分析与总结

    KCF目标跟踪方法分析与总结 correlation filter Kernelized correlation filter tracking 读"J. F. Henriques, R. ...

  7. TensorFlow框架(4)之CNN卷积神经网络

    1. 卷积神经网络 1.1 多层前馈神经网络 多层前馈神经网络是指在多层的神经网络中,每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接的情况,如图 11所示. 图 11 对 ...

  8. 论文阅读笔记十九:PIXEL DECONVOLUTIONAL NETWORKS(CVPR2017)

    论文源址:https://arxiv.org/abs/1705.06820 tensorflow(github): https://github.com/HongyangGao/PixelDCN 基于 ...

  9. CNN 文本分类

    谈到文本分类,就不得不谈谈CNN(Convolutional Neural Networks).这个经典的结构在文本分类中取得了不俗的结果,而运用在这里的卷积可以分为1d .2d甚至是3d的.  下面 ...

随机推荐

  1. 记录一次群答问:jmeter正则提取器轻松提取一个及多个值

    图截得比较完整,电脑端浏览器放大倍数看吧^_^,手机端可以点击图片然后放大看. 一个正则提取问题 前几天,在Q群和微信群里被同时@,咨询这样一个问题:服务器返回:name="tom" ...

  2. pandas IO

    pd.read_csv("../data/user_info.csv", index_col="name") #假设csv里包含这几列: name, age, ...

  3. 用于C#的极速序列化/反序列工具 MessagePack

    MessagePack 比MsgPack-Cli快10倍,并且优于其他C#序列化器.MessagePack for C#还内置了对LZ4压缩的支持 - 一种极快的压缩算法.对于性能追求很重要,特别是在 ...

  4. bzoj4066: 简单题 K-Dtree

    bzoj4066: 简单题 链接 bzoj 思路 强制在线.k-dtree. 卡常啊.空间开1e6就T了. 代码 #include <bits/stdc++.h> #define my_m ...

  5. LSTM的神经元个数

    小书匠深度学习 目录: 1.LSTM简单介绍 2.简单假设样例 3.神经元分析 3.1忘记门层 3.2细胞状态 3.3输出层 3.4总结 4.测试 1.LSTM简单介绍 LSTM在时间上展开 红框从左 ...

  6. ModuleNotFoundError: No module named 'rest_framework_swagger'

    pip3.6 install django-rest-swagger

  7. 如果用了flex去加一个箭头怎么让他剧中

    左边是做了一个flex:1 右边是span的display:inline-block样式 父元素 .search-car-arrow display flex align-items center' ...

  8. bzoj5461 Minimax 题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5461 看到题目,必将m种权值离散化. 首先是一个显然的dp设计. 设$f(i,j)$表示第i个节点 ...

  9. Spring Boot 怎么打一个可执行 Jar 包?

    传统的 Java 应用程序都需要打一个 war 包,并到到 Tomcat webapps 目录下运行. Java 支持打 Jar 包,但没有提供一个标准的方式在一个 Jar 包内再加载嵌入别的 Jar ...

  10. [原创]敏捷管理实践Scrum思维导图

    [原创]敏捷管理实践Scrum思维导图