15.矩阵运算与img2col方式的卷积

文章介绍了矩阵乘法的基础知识,包括GEMM算法和Strassen算法如何降低矩阵运算的复杂度。接着,讨论了卷积运算,提到了常规卷积的计算方式以及如何通过img2col方法将卷积转换为矩阵乘法,从而利用高效的矩阵运算库进行加速。实验表明,img2col方法在卷积运算中比直接计算更快。

使用矩阵计算卷积

GEMM算法

矩阵乘法运算(General Matrix Multiplication),形如:

C = A B , A ∈ R m × k , B ∈ R k × n , C ∈ R m × n C = AB, A\in \mathbb{R}^{m\times k},B\in \mathbb{R}^{k\times n},C\in \mathbb{R}^{m\times n} C=AB,ARm×k,BRk×n,CRm×n

矩阵乘法的计算可以写成如下公式:

C m , n = ∑ k = 1 K A m , k B k , n ; m , n , k ∈ R C_{m,n}=\sum_{k=1}^{K}A_{m,k}B_{k,n};m,n,k\in \mathbb{R} Cm,n=k=1KAm,kBk,n;m,n,kR

矩阵的乘法操作可以写成如下图所示,

写成伪代码的形式为:

for i=1 to n
   for j=1 to n    
     c[i][j]=0
     for k=1 to n
         c[i][j] = c[i][j]+a[i][k]*b[k][j]

从上面可以看到使用普通的矩阵乘法运算,其复杂度是 O ( n 3 ) O(n^3) O(n3),这个复杂度相对来说是很高的,当矩阵的维度很大时,运算量会显著增加。

矩阵运算作为基础运算,有大量的科学家对其进行研究,试图降低其运算复杂度。

Strassen’s Matrix Multiplication Algorithm为例,其将矩阵乘法的运算复杂度降低到了 O ( n l o g 2 7 ) ≈ O ( n 2.81 ) O(n^{log 2^7})\approx O(n^{2.81}) O(nlog27)O(n2.81)

这个算法是Strassen1969年发布的论文《Gaussian Elimination is not Optimal.》中提出的,主要是通过矩阵块的操作,减少乘法运算的次数。

将矩阵写成矩阵块的形式:

A = ( A 11 A 12 A 21 A 22 ) , B = ( B 11 B 12 B 21 B 22 ) , C = ( C 11 C 12 C 21 C 22 ) A=\begin{pmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{pmatrix},B=\begin{pmatrix} B_{11} & B_{12} \\ B_{21} & B_{22} \end{pmatrix},C=\begin{pmatrix} C_{11} & C_{12} \\ C_{21} & C_{22} \end{pmatrix} A=(A11A21A12A22),B=(B11B21B12B22),C=(C11C21C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值