ML创新点
通用型
基本上都是即插即用的万金油
Winograd卷积
通过数学变换大幅减少卷积计算量
在传统的卷积优化中 可以使用FFT, 但是FFT在针对于大的卷积核时才有明显优势,而且限制比较多.
对于现在的小卷积核 Winograd算法的优势便很明显
Winograd算法基于国剩余定理 将空间域的卷积变换到Winograd域计算
Winograd的符号是 \(F(m,n)\) 代表输出m个点 卷积核大小n
Winograd乘法计算次数为: m + n - 1
普通卷积乘法计算次数为: m * n
注意: Winograd在FP32下表现很好 在其他量化下可能导致量化精度降低很多很多
注意: 插值点的选用非常重要
流程
计算F(m,r)的变换矩阵
确定插值点: 插值点是构建变换矩阵的核心数学坐标 决定了变换矩阵 A B G的系数
由中国剩余定理 想确定一个n次多项式需要n+1个点
根据选定的插值点集合 构造一个 n*n的Vandermonde矩阵
卷积核变换(G): 将原始卷积核转化为变换域的矩阵
输入变换(B): 将输入矩阵转换为变换域的阵
哈达玛积(\(\circ\)): 在变换域中 两个矩阵左哈达玛乘积
输出变换(A): 将点乘结果逆变换回空间域
\[
Output = A^T [(G g G^T) \cric (B^T dB)]A
\]
其中
g: 卷积核
d: 输入块
G,B,A: 预先计算豪的变换矩阵(由插值点决定)