【论文学习】快速卷积方法——Winograd 变换

版权声明: https://blog.csdn.net/DL_wly/article/details/90142009

论文:Fast Algorithms for Convolutional Neural Networks

本博客关注于论文中Winograd 变换部分

        在1D,2D和多维度中,最小算法需要等于输入数量的多次乘法。 换句话说,为了计算F(m,r),我们必须访问m + r-1个数据值的间隔,并且为了计算F(m×n,r×s),我们必须访问(m + r- 1)×(n + s-1)数据值。 因此,最小滤波算法需要每个输入一次乘法。

1、F(2x2,3x3)

        F(2,3)的标准算法使用2×3 = 6乘法.Winograd [16,p。 43]记录了以下最小算法:

        该算法仅使用4次乘法,因此通过公式μ(F(2,3))= 2 + 3 - 1 = 4最小化。它还使用涉及数据的4个加法,3次加法和2次乘法, 过滤器(总和g0 + g2可以计算一次),另外4个加法将产品减少到最终结果。

        快速滤波算法可以以矩阵形式写成:

       其中@表示元素乘法。 对于F(2,3),矩阵为:

       最小1D算法F(m,r)自身嵌套以获得最小2D算法,F(m×m,r×r)如下:

        其中现在g是r×r滤波器,d是(m + r-1)×(m + r-1)图像瓦片。 通过将F(m,r)的算法与F(n,s)的算法嵌套,可以将嵌套技术推广到非平方滤波器和输出F(m×n,r×s)。

        F(2×2,3×3)使用4×4 = 16乘法,而标准算法使用2×2×3×3 = 36。这是36/16 = 2.25的算术复杂度降低。 数据变换使用32个加法,滤波器变换使用28个浮点指令,逆变换使用24个加法。

        F(m×m,r×r)的算法可用于计算具有r×r内核的交集层。 每个图像通道被分成尺寸(m + r-1)×(m + r-1)的瓦片,r-1个相邻瓦片之间的重叠元件产生P =ΔH/m≤W/ m 然后对每个通道中的每个瓦片和滤波器组合计算C.F(m×m,r×r),并将结果在所有通道上相加。

      构建U = GgGT和V = BTdB,我们有:

       将瓦片坐标标记为(x,y),我们将单个图像i,滤波器k和瓦片坐标(x,y)的交换图层公式(2)重写为:

2、F(3x3,2x2)

        使用随机梯度下降训练网络需要相对于输入和权重计算梯度。 对于一个三角形网络层,相对于输入的梯度是下一层反向传播误差(尺寸为N×K×H×W)与层的R×S滤波器的翻转版本的卷积。 因此,可以使用与正向传播相同的算法进行计算。

        相对于权重的梯度是层输入与反向传播误差的卷积,产生每个滤波器和通道的R×S个输出。 因此,我们需要计算卷积F(R×S,H×W),这是不切实际的,因为我们的快速算法的H×W太大了。我们将这个卷积分解成一个较小的卷积的直接和,例如F( 3×3,2×2)。算法的4×4瓦片在每个维度上重叠2个像素,3×3输出在所有瓦片上求和,形成F(3×3,H×W)。

        对于(3 + 2-1)2 = 16乘法与直接卷积的3×3×2×2 = 36乘法,它实现与相应的正向传播算法相同的36/16 = 2.25算术复杂度降低。

3、F(4x4,3x3)

        数据变换使用12个浮点指令,滤波变换使用8,逆变换使用10。

        应用嵌套公式对于使用6×6 = 36乘法的F(4×4,3×3)的最小算法,而标准算法使用4×4×3×3 = 144.这是算术复杂度降低4。

        2D数据变换使用12(6 + 6)= 144个浮点指令,滤波变换使用8(3 + 6)= 72,逆变换使用10(6 + 4)= 100。

        最小Winograd变换所需的加法和常数乘法的数量随着瓦片大小而二次增加[10,p。 211]。因此,对于大的瓦片,变换的复杂性将压倒乘法数量的任何节省。

        变换矩阵元素的大小也随着瓷砖尺寸的增加而增加。这有效地降低了计算的数值精度,因此对于大块,无法准确计算变换[16,p。 28。

        Convnets需要惊人的数字精度[5,6]。这意味着我们可以在过滤计算中牺牲一些数值精度,而不会影响到凝血酶的准确性。我们检查补充材料中F(6×6,3×3)的可能性。

猜你喜欢

转载自blog.csdn.net/DL_wly/article/details/90142009
今日推荐