将卷积神经网络视作泛函拟合

2020-02-21 11:20:41 浏览数 (1)

原创:这篇文章首发于我的知乎,知乎ID是akkaze-邓安坤

我们知道一般的神经网络几乎能够拟合任意有界函数,万能逼近定理告诉我们如果函数的定义域和值域都是有界的,那么一定存在一个三层神经网络几乎处处逼近,这是普通的nn。但是如果我们回到卷积神经网络,我们会发现我们的输入是一个有界信号(准确的说是满足一定分布的一族有界信号),输出也是一个有界信号,我们需要拟合的是函数族到函数族的一个变换,即存在有界函数和有界函数,其中 本身也是有界的,我们需要的是一个变换 ,这其实是一个泛函,也就是函数的函数,(如果我们把所有分辨率的32x32图像信号当成一族函数(另外,如果使用0延拓或者随机延拓,这个函数可以被当成定义在全空间上的函数),那么边缘提取正是一阶微分算子,它就是一个泛函,在图像中,它几乎是最重要的泛函,它的离散形式是sobel算子,它作用在图像上,得到边缘响应,这也是一族有界函数,响应经过限制后依然有界),

著名的sobel算子,它被用来求取图像边缘,它也是一阶微分的离散形式

原图像的值域是有界的(0—255),那么sobel算子的输出也是有界的

另外传统cnn中不需要采样,这样输入和输出函数的定义域就是相同的,也就是说输入输出函数被定义在同一定义域上,

这一点见我的知乎文章:https://zhuanlan.zhihu.com/p/99193115

要拟合这样一个变换,在广义函数理论里面,最容易并且直接想到的这样一个变换,就是卷积 它有平移不变性,这几乎是这样一种泛函所必须的性质,我们希望原函数有一个平移的同时,像函数一定有同样的平移 在某种意义上,它有一定的尺度不变性 原函数和卷积核变宽或者变窄的同时,像函数也会随之变宽或者变窄,在相差一个常数的意义上。 同时,卷积也有结合律与交换律

前者意味着,如果多个卷积作用在函数上,其实相当于一个更大的卷积作用在函数上。 在分析里面,我们通常用来记函数的支撑集,这是函数取值不为0的地方,同时可以证明,这里使用点集相加,其定义为, ,其中加法就是简单的数值加法,这意味着你总可以用多个支撑集更小的卷积核合成一个支撑集更大的卷积核。 在广义函数里,我们有dirac函数,它的定义是,

这样一个函数并不存在,但是我们可以考虑用其他函数逼近它,比如高斯函数。 它的卷积有如下性质,

这意味着与它的导数作卷积可以很容易得到原函数的各阶导数,而导数是函数最重要的性质。 直接用一个卷积不明智,我们也不知道如何去拟合它,但是我们可以用一系列卷积去拟合泛函变换,

平移不变性依然存在,但是尺度不变性没有了,但是如果非线性函数其实是分段线性函数,例如ReLU,其实尺度不变性依然能保留下来。

这是单分量的形式,事实上必定不止一个分量,正确形式应该是,而且中间过程也不应该是单分量的,

每次加权都会产生新的分量,这和卷积神经网络的过程几乎是完全一致的,中间这些分量就是中间通道,输入输出都是多通道。

考虑到如果从数学上去拟合,我们需要一组基底函数,我们希望都是在某一个函数空间里,并且可以用该空间的基底函数展开如下,只考虑一分量的,多分量的类似

展开类似于线性加权,而这类似于可分离卷积神经网络,设计成这样是参考了论文Depthwise Convolution is All You Need for Learning Multiple Visual Domains(也就是MobileNet V1)其中加权的过程正是卷积,

左边每个通道独立做卷积,右边1x1卷积相当于加权

我们选择高斯函数(其实还有更多的选择,比如著名的gabor小波)及其导数作为基底函数,它们构成了高斯小波基,

高斯小波基

构造这样一个卷积神经网络,这里的卷积神经网络没有任何下采样,采用和我的另一篇文章相似的架构,并在cifar100上训练(冻结所有的depthwise),结果如下,

预测精度

训练精度

然后补上resnet在cifar100上的结果作为baseline

BaseLine

label里面的前四个数字表示前四层的1x1卷积的通道数,ord后面指使用到高斯导数的阶数,原函数的阶数为0,对于每个通道,使用depth-multiplier控制高斯导数的阶数,对每个通道而言,作用在其上的depwise-conv是相同的,也就是说如果有3个通道,使用到5阶高斯导数,那么每个通道的5个depwise-conv是相同的,这实际上相当于参数冗余了。最后一个normal表示用正态分布初始化(he-initialization)。

纵向比较,四个通道数相同,都是64-80-96-112的网络,使用高斯导数的阶数为1,5,10,15,发现只有ord1的预测精度偏低,但是ord5,ord10,ord15的预测精度极为相近,说明CNN可能对高阶的导数不敏感(至少在图像识别中是如此),同时,随着阶数提升,训练精度是逐个增加的,说明确实有过拟合。横向比较,都使用5阶高斯导数,但是通道数分别为32-44-56-68,60-80-96-112,64-128-256-512,发现预测精度和训练精度都是同步增加,说明通道数确实有利于组合出更多的函数出来。

最后一个正态的结果作为参考,因为有depth-multiplier的情况下,使用正态分布随机初始化,会造成实际参数更多,所以这个比较并不是特别公平,但是可以看到CNN的巨大学习能力,使用这样随机初始化依然能够有好的结果。

同时这里的方法过于大胆,事实上对于普通的分类分割网络,浅层确实可以用一些常用函数来表示,比如gabor小波基,论文gaborconvet采用了这样的思想。同时注意到,对于深层,这里的基函数需要能反应这个分类或者分割问题的特征空间,而通过学习出来的卷积所构成的基函数,恰好反应了这一特征空间的实际分布。

论文地址:https://arxiv.org/pdf/1705.01450.pdf

对于普通的神经网络,每一层都是在变换自变量或者隐变量,如果自变量或者隐变量满足一个分布,通过研究层间分布我们就能很好的研究这个多层神经网络的性质。

如果我们把图像看成函数族,那它们也应该有它们的分布,任意图像就是定义在某一块区域,比如32x32上的下界为0,上界为255的任意连续(甚至连续这个条件都可以放宽)函数组成的函数族。大多数cnn的第一层行为都非常类似于边缘提取,而边缘图像本身就可以一系列脉冲来描述,这是cnn第一层的函数空间。对于分类,最后一层通常是一个二值函数空间,它在整个定义域上是一个多分量的二值函数(图像是一个超平面),如果是第一类,那么第一个分量就是1,其他是0,类似于(1,0,0)的向量常函数,但是定义在图像平面或者全平面上(通过常数延拓或者随机延拓)。研究cnn就是研究这些函数空间的分布特性。


欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

0 人点赞