先看一个二维滤波器,如下图所示。滤波器是一个3x3的矩阵,输入数据是一个5x5的矩阵。输入矩阵中的红色方框(下文称之为滑窗)是一个激活区域(ActiveRegion),这个区域的大小与滤波器大小一致,均为3x3方阵。激活区域与滤波器对应系数相乘并相加即获得对应的输出(这里是矩阵元素对应相乘相加,不是矩阵乘法)。紧接着,滑窗右移一格,得到新的激活区域,再次与滤波器对应元素相乘相加获得第2个输出。这里滑窗的步进为1。当滑窗右侧边缘与输入数据右侧边缘重合时,滑窗重新回到输入数据最左侧边缘并下移一格。由此可见,滑窗在两个维度都会移动。
滤波与卷积本质上是一致的。回想一维滤波器或者说一维卷积运算。输入数据在时间维度上依次进入卷积窗口。当前的输出取决于滤波器系数和卷积窗内的输入数据,执行的运算也是相乘相加。至此,可以看到二维滤波器只是卷积窗由一维变为二维,同时,输入数据也由一维变为二维。 相乘相加是否可以转换成矩阵乘呢?答案是肯定的。以下图为例。首先,我们把每个激活区域的输入数据取出来由二维矩阵变为一维行向量。滑窗步进为1,共4个激活区域,所以可得到4个一维向量。这4个一维向量构成一个4x9的二维矩阵。其次,我们将滤波器按照先行再列的方式“拉直”,构成一个一维列向量,这个列向量维度为9x1。显然,这时4个激活区域构成的矩阵与滤波器系数构成的列向量是可乘的,满足了矩阵乘法的要求。之后就可以直接执行矩阵乘法获得输出结果。
CNN中的卷积运算本质上就算二维滤波器,是矩阵对应元素相乘相加。但在工程实现时,则将其采用上图所示方法转变为矩阵乘法,从而提高运算效率。
原文标题:卷积神经网络中会什么会有矩阵乘法?
文章出处:【微信公众号:Lauren的FPGA】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !