doubly block toeplitz matrix 在加速矩阵差卷积上的应用

yspm / 2023-08-03 / 原文

文档链接

CNN 的卷积是执行了 \(w'_ {i,j}=\sum\limits_{x,y}w_{i+x,j+y}\times C_{x,y}\),有人认为每次平移卷积核,运算量很大,又是乘法又是加法。

现在我们吧 \(w_{x,y}\) 展开形成一个 \([n\times m,1]\) 的向量 \(V\),然后构造一个大小为 \([(n+1)\times (m+1),n\times m]\) 矩阵 \(P\) 使得 \(X=PV\) 得到的 \(X\) 压缩成 \([n+1,m+1]\) 矩阵之后取右下部分能得到正确的 \(w'\)

虽然我感觉变成矩阵乘向量之后运算更多了啊。

teoplitz 矩阵可以被压缩成一个向量,或者说他长成这样:

\[\left( \matrix{ a_{0} & a_{-1} & a_{-2} & \cdots & \cdots & \cdots & a_{-(N-1)} \cr a_{1} & a_{0} & a_{-1} & a_{-2} & & & \vdots \cr a_{2} & a_{1} & a_{0} & a_{-1} & & & \vdots \cr \vdots & \ddots & \ddots & \ddots & \ddots & \ddots & & \vdots \cr \vdots & & & \ddots & a_{0} & a_{-1} & a_{-2} \cr \vdots & & & & a_{1} & a_{0} & a_{-1} \cr a_{M-1} & \cdots & \cdots & \cdots & a_{2} & a_{1} & a_{0} } \right) \]

\(a_{i,j}=V_{i-j}\)

doubly block teoplitz 矩阵若干块 teoplitz 矩阵拼起来的,比如现有若干 teoplitz matrix \(A_{-(N-1)},\dots A_{N-1}\)

\[\left( \matrix{ A_{0} & A_{-1} & A_{-2} & \cdots & \cdots & \cdots & A_{-(N-1)} \cr A_{1} & A_{0} & A_{-1} & A_{-2} & & & \vdots \cr A_{2} & A_{1} & A_{0} & A_{-1} & & & \vdots \cr \vdots & \ddots & \ddots & \ddots & \ddots & \ddots & & \vdots \cr \vdots & & & \ddots & A_{0} & A_{-1} & A_{-2} \cr \vdots & & & & A_{1} & A_{0} & A_{-1} \cr A_{M-1} & \cdots & \cdots & \cdots & A_{2} & A_{1} & A_{0} } \right) . \]


一头雾水!

记卷积核为\(\left(\begin{matrix}k_{1,1}&k_{1,2}\\k_{2,1} &k_{2,2}\end{matrix}\right)\) ,二维图片大小为 \([n,m]\),那么先 zero padding 将图片大小变成 \([n+2,m+2]\)(围一圈 \(0\),卷积核 \(3\times 3\) 就再围一层)

新来一个大小为 \([n+1,m+1]\) 的矩阵 \(K=\left(\begin{matrix}k_{2,2}&k_{2,1}&0&0\\k_{1,2}&k_{1,1}&0&0\\0&0&0&0\\0&0&0&0\end{matrix}\right)\) 并取出它的所有列向量,展开形成一个 teoplitz 矩阵,例如:

\[F_0=\left(\matrix{ k_{22} & 0 & 0 \cr k_{21} & k_{22} & 0 \cr 0 & k_{21} & k_{22} \cr 0 & 0 & k_{21}} \right) \quad F_1= \left( \matrix{ k_{12} & 0 & 0 \cr k_{11} & k_{12} & 0 \cr 0 & k_{11} & k_{12} \cr 0 & 0 & k_{11}} \right)\quad F_2=F_3= \left( \matrix{ 0 & 0 & 0 \cr 0 & 0 & 0 \cr 0 & 0 & 0 \cr 0 & 0 & 0} \right) \]