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的公式推导是错误的。

最新文章

  1. npm包与gem包--在线&离线安装
  2. 编辑美化图片,保存至本地,Adobe出品(支持IOS,android,web调用)免费插件
  3. 福建红色文化VR/AR实体体验馆正式启用
  4. BZOJ 1449 球队收益(最小费用最大流)
  5. windows下删除服务的方法
  6. JAVA 对象内存分析
  7. jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局
  8. Java集合源码分析(二)Linkedlist
  9. hcna(华为)_Telnet篇
  10. iOS ----------NSDate 、CFAbsoluteTimeGetCurrent、CACurrentMediaTime 的区别
  11. 编译原理中DFA最小化
  12. 总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
  13. ubuntu下修改文件权限
  14. selector的小箭头去除
  15. LibreOJ 6280 . 数列分块入门 4
  16. Java - "JUC"之Condition源码解析
  17. uva 12508 - Triangles in the Grid(几何+计数)
  18. 美团实习Java岗面经,已拿offer
  19. ntoj 808 蚂蚁的难题(八)
  20. XAMl使用其他命名空间中的类型及加载和编译

热门文章

  1. python基础语法10 函数递归,模块,软件开发目录规范
  2. 【PHP】系统部署
  3. Collections.synchronizedList使用
  4. redux沉思录
  5. HTTP Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag
  6. 错误解决Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: pers.zhb.domain.Student column: classno (should be mapped with insert="false" update="false")
  7. 洛谷 CF1153B Serval and Toy Bricks
  8. Linux:搭建GitLab
  9. cv2 的用法
  10. ul的li元素水平并居中的css