链接:
http://www.jianshu.com/p/96791a306ea5
http://blog.csdn.net/hjimce/article/details/50414467
CNN其实有一个假设就是潜在的概念是线性可分的。然而,相同概念的数据一般是存在于一个非线性的流形中,因此,捕捉真实数据的表示一般使用非线性模型。
所以我们通常使用一个MLP代替卷积层的线性卷积操作
有以下几个特点:
- 线性卷积层与mlpconv层都与感受域相连接以用输出特征向量
- mlpconv使用一个mlp连接input与output
- mlp被共享于所有的局部感受野。
- 特征映射被包含通过滑动mlp以cnn相同处理方式(扫描)
原先的CNN一般由卷积层与空间池化层以栈的形式交替组成,卷积层通过使用非线性激活函数(如:rectifier,sigmoid,tanh)的线性组合产生特征图。
i,j是像素索引,xij代表输入补丁集中在位置(i,j),k用于索引的通道特性图。
当潜在概念的实例是线性可分时,线性卷积用于抽取是足够的,然而,好的抽象表示一般是高度非线性函数。在传统cnn,这一点可以用超完备过滤的方式。即:增加过滤器,但增加过滤器会增加下层的计算负担。
在此之前做个铺垫:
引入maxout函数:
引入之前:
z=W*X+b
out=f(z)
如果我们设置maxout的参数k=5,maxout层就如下所示:
(参数个数会成k倍增加)
z1=w1*x+b1
z2=w2*x+b2
z3=w3*x+b3
z4=w4*x+b4
z5=w5*x+b5
out=max(z1,z2,z3,z4,z5)
传统的函数:
MaxOut:(非线性函数)
用多个线性函数中的最大值逼近真实函数
maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)
只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多:
RELU非线性函数是什么?:
Network In Network:
在两个mlpconv层中间加入了RELU函数,最后用一个global average pooling层
(全局平均池化层理论上讲应该是对全图所有值取均值)
总结:
- 对于常规卷积层,直接x和w求卷积,然后relu一下就好了。
- maxout,有k个的3x3的w(这里的k是自由设定的),分别卷积得到k个1x1的输出,然后对这k个输入求最大值
- NIN,有k个3x3的w(这里的k也是自由设定的),分别卷积得到k个1x1的输出,然后对它们都进行relu,然后再次对它们进行卷积,结果再relu。(这个过程,等效于一个小型的全连接网络)
maxout和NIN都是对传统conv+relu的改进。
maxout想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的)
NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数,因为它本质上可以说是一个小型的全连接神经网络
常规卷积层,MaxOut,Networ In Network:
1×1卷积的作用:
对单通道的feature map和单个卷积核之间的卷积来说:1X1卷积核就是对输入的一个比例缩放
但是CNN里的卷积大都是多通道的feature map和多通道的卷积核之间的操作,如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化。
加入1×1卷积后可以降低输入的 通道数,卷积核参数、运算复杂度 也就跟着降下来了
多通道的情况下1*1卷积的主要作用有以下几点:
1、降维( dimension reductionality )。比如,一张500 * 500且厚度depth为100 的图片在20个filter上做1*1的卷积,那么结果的大小为500*500*20。
2、加入非线性,卷积层之后经过激励层,1*1的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力;
结合计算方法一节阅读能比较好的理解:
当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量