持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
首先有一个很重要的点,卷积神经网络其实没有卷积运算。
但是也可以认为有卷积运算。可能说法有点绕,我们从具体的例子看一下。
假设有个矩阵A,另有个小矩阵B,取一块重叠的地方对应元素相乘相加,就是卷积神经网络中的具体运算。这种运算被称作所谓的相关性运算。如果仅仅关注这一步运算,我们也可以认为它是定义在这个空间上的内积。
从这个角度来说,自然是没有所谓的卷积运算的。因为按照标准的卷积定义,其数学表达式是:
用语言来描述就是,反向对称位置的元素相乘,然后相加。 比如说A的左上角和B的右下角的元素相乘,反过来也是一样。
按照标准的卷积定义,可以通过先上下颠倒矩阵A,再左右颠倒矩阵A,然后再与B对应位置相乘相加,也就是所谓的相关运算。
卷积运算的用途在于它可以增强某些位置的特征。
为什么说CNN的卷积可以认为有卷积运算?
原因在于,CNN中的卷积是通过训练得到的,假设确实是按照标准的卷积定义,那么每次运算前先把卷积核做前述两次反转。当梯度下降更新参数时,再把delta反转更新到卷积核上。 可以发现,这其实是可以省略的步骤,我们可以把卷积核认为是翻转过的。这个意义上来说这个相关运算就是我们原本期望的卷积运算。
而先前说过相关运算可以认为是一种点积。工业上优化卷积的思路也是从点积出发,卷积核展平,然后把数据集转变为切合与卷积核进行矩阵乘法的矩阵。每一行就是与卷积核卷积的部分。具体可以参考UC伯克利的卷积实现。
与卷积配套的池化或者说汇聚层,同样也可以用通过这种方式优化。