文档链接
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)
\]