Network in Network-读后笔记

摘要:
提出一个NIN(网络中的网络)的深度网络结构用以增强模型在感知野在局部图像块的辨别力 。提出在卷积层使用非线性代替现有的线性模型 。使用一个由MLP组成的micro 网络作为非线性模型去扫描输入以提取特征图( map)deep NIN就是将micro 以栈的形式组合而成 。
作者说,Deep NIN的形式相比于传统的卷积神经网络来说不易过拟合,而且可以进行全局平均池化 。
1.
cnn由卷积层与池化层组成 。
卷积层对下层的数据快来说是一个GLM(model,广义线性模型),作者认为广义线性模型的抽象层次较低 。作者认为“特征是不变的”,即相同概念下的变量特征是相同 。GLM能够获取较好的抽象,当潜在概念的样本是线性可分的时候 。因此 , 作者认为cnn其实有一个假设就是潜在的概念是线性可分的 。然而,相同概念的数据一般是存在于一个非线性的流形中,因此,捕捉真实数据的表示一般使用非线性模型 。
作者使用一个MLP代替卷积层的线性卷积操作 , 作者之所以选择是因为MLP是一个通用近似函数而且可由神经网络使用反向传播进行训练 。
由此产生的结构作者命名为 。
线性卷积层与层都与 field相连接以用输出特征向量使用一个mlp连接input与被共享于所有的局部感受野 。特征映射被包含通过滑动mlp以cnn相同处理方式(扫描)整个网络结构作者给个名字叫“ in ”(好俗气的名字,像村里的二丫一样带感,真是任性?。? 2.CNN
CNN一般由卷积层与空间池化层以栈的形式交替组成 , 卷积层通过使用非线性激活函数(如:,,tanh)的线性组合产生特征图 。
i,j是像素索引,xij代表输入补丁集中在位置(i,j),k用于索引的通道特性图 。
当潜在概念的实例是线性可分时,线性卷积用于抽取是足够的,然而,好的抽象表示一般是高度非线性函数 。在传统cnn,这一点可以用超完备过滤的方式 。即:增加过滤器,但增加过滤器会增加下层的计算负担 。
引入
出现在上 , 作者将和结合后,号称在MNIST, CIFAR-10, CIFAR-100, SVHN这4个数据上都取得了start-of-art的识别率 。
从论文中可以看出,其实一种激发函数形式 。通常情况下,如果激发函数采用函数的话,在前向传播过程中,隐含层节点的输出表达式为:
其中W一般是2维的 , 这里表示取出的是第i列,下标i前的省略号表示对应第i列中的所有行 。
如果是激发函数,则其隐含层节点的输出表达式为:
这里的W是3维的,尺寸为d * m *k,
其中
d表示输入层节点的个数,
m表示隐含层节点的个数,
k表示每个隐含层节点对应了k个”隐隐含层”节点 , 
这k个“隐隐含层”节点都是线性输出的 , 而的每个节点就是取这k个“隐隐含层”节点输出值中最大的那个值 。因为激发函数中有了max操作,所以整个网络也是一种非线性的变换 。
因此当我们看到常规结构的神经网络时,如果它使用了激发,则我们头脑中应该自动将这个”隐隐含层”节点加入 。
参考一个日文的 ppt 中的一页ppt如下:
的拟合能力是非常强的 , 它可以拟合任意的的凸函数 。
最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),
而又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关) 。论文中的图1如下(它表达的意思就是可以拟合任意凸函数 , 当然也包括了ReLU了)
作者从数学的角度上也证明了这个结论,即只需2个节点就可以拟合任意的凸函数了(相减),前提是“隐隐含层”节点的个数可以任意多,如下图所示
的一个假设是潜在概念的实例是位于输入空间的凸集中 。
3. in
3.1 MLP卷积层
径向基函数与多层感知机是两个通用近似函数 。
作者认为,在不知道潜在目标的先验分布时使用通用近似函数是比较好的方法 。作者选择MLP , 其原因是:
MLP与cnn相兼容MLP可自行深度化
计算公式:
网络结构
计算过程见下面图例中的NIN部分 。

Network in Network-读后笔记

文章插图
举例子解释
假设现在有一个3x3的输入 , 用一个9维的向量x代表,卷积核大小也是3x3,也9维的向量w代表 。
对于常规卷积层,直接x和w求卷积,然后relu一下就好了 。
,有k个的3x3的w(这里的k是自由设定的),分别卷积得到k个1x1的输出,然后对这k个输入求最大值
NIN,有k个3x3的w(这里的k也是自由设定的),分别卷积得到k个1x1的输出 , 然后对它们都进行relu,然后再次对它们进行卷积 , 结果再relu 。(这个过程,等效于一个小型的全连接网络)
计算过程
常规卷积层, , NIN:
总结
和NIN都是对传统conv+relu的改进 。
想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的)
NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数 , 因为它本质上可以说是一个小型的全连接神经网络
3.2 全局平均池化
传统的cnn是在较低层使用卷积,如分类任务中,最后的卷积层所得 map被矢量化进行全连接层,然后使用 回归进行分类 。一般来说,在卷积的末端完成的卷积与传统分类器的桥接 。全连接阶段易于过拟合 , 妨碍整个网络的泛化能力,一般应有一些规则方法来处理过拟合 。
是最近2年提出的 , 源于其文章byco- of.中文大意为:通过阻止特征检测器的共同作用来提高神经网络的性能 。
是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是将其权重保留下来(只是暂时不更新而已),因为下次样本输入时它又可以工作了(有点抽象,具体实现看后面的实验部分) 。
按照的文章,他使用时训练阶段和测试阶段做了如下操作:
在样本的训练阶段 , 
没有采用pre-的网络时(当然可以结合pre-一起使用),并不是像通常那样对权值采用L2范数惩罚,而是对每个隐含节点的权值L2范数设置一个上限bound,
当训练过程中如果该节点不满足bound约束,则用该bound值对权值进行一个规范化操作(即同时除以该L2范数值),说是这样可以让权值更新初始的时候有个大的学习率供衰减 , 并且可以搜索更多的权值空间(没理解) 。
在模型的测试阶段,使用“mean (均值网络)”来得到隐含层的输出 , 其实就是在网络前向传播到输出层前时隐含层节点的输出值都要减半(如果的比例为50%),其理由文章说了一些,可以去查看(没理解) 。
关于,文章中没有给出任何数学解释,的直观解释和理由如下:
由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现 , 这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。可以将看作是模型平均的一种 。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时share隐含节点的权值 。这样不同的样本就对应不同的模型,是的一种极端情况 。个人感觉这个解释稍微靠谱些,和,理论有点像,但又不完全相同 。bayes是的一个特例 。bayes有个错误的前提,即假设各个特征之间相互独立,这样在训练样本比较少的情况下,单独对每个特征进行学习,测试时将所有的特征都相乘,且在实际应用时效果还不错 。而每次不是训练一个特征,而是一部分隐含层特征 。还有一个比较有意思的解释是,类似于性别在生物进化中的角色,物种为了使适应不断变化的环境 , 性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡 。
介绍了半天,作者准备在全连接层做文章了,作者提出一个新的策略,名为“全局平均池化” , 用来代替cnn中传统的全连接层 。
【Network in Network-读后笔记】其思想为:在的最后一层为每一个分类任务的相应种类生成一个特征映射 。
作者说这样有两个优点 , 
全局平均池化更原生的支持于卷积结构 , 通过加强特征映射与相应分(种)类的对应关系,因此,特征映射可以很容易地解释为分类映射 。全局平均池化一层没有需要优化的参数,因此在这一层可以避免过拟合 。全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的 。
作者说,全局平均池化作为一个结构化正则化矩阵可以明确的用于加强特征映射到类别映射的信任度 。
cnn的全连接层有什么问题,大家都在这里做文章?
印象中有一种说法是全连接层是简单的将特征映射变成矢量按顺序编排输入到回归中,这种方法破坏了卷积层中提取特征时保留下来的位置信息 。
具体的使用有待学习 。To Be ...
3.3In 结构
全局的NIN结构就是一个栈式组合的,然后,用全局平均池化替换全连接层,用代替卷积操作 , 仍旧用子采样分隔
4 实验
4.1 介绍
作者用四个数据集进行实验 。CIFAR-10/100,SVHN,MNIST 。
网络结构为:三层+空间最大池化+下采样+全局平均池化,除最后一个层外,其余层使用进行正则化 。
训练过程:手动设置参数--〉最小batch=128--〉初始化权重与学习率,重复进行,直到在训练集上的准确率停止改善,并且学习率最终为初始值的百分之一 。
4.2 CIFAR-10
CIFAR-10数据集由10个类别的近50k幅训练和10k测试自然图片组成,每一张图片为RGB彩色,32x32大小 。
作者使用相同于一文方法的全局对比度归一化与ZCA白化 。
每个层的特征映射数量被设计成相同,使用验证集进行两个参数的调优操作(局部感受野大小与权重衰减) 。当两个hyper-是固定的,我们从头开始重新训练网络训练集和验证集 。
白化
白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质:
白化处理分PCA白化和ZCA白化,PCA白化保证数据各维度的方差为1,而ZCA白化保证数据各维度的方差相同 。
PCA白化可以用于降维也可以去相关性,而ZCA白化主要用于去相关性,且尽量使白化后的数据接近原始输入数据 。
1.PCA白化
根据白化的两个要求,我们首先是降低特征之间的相关性 。
在PCA中,我们选取前K大的特征值的特征向量作为投影方向,如果K的大小为数据的维度n , 把这K个特征向量组成选择矩阵U(每一列为一个特征向量),
为旋转后的数据 。
如果K
原始数据分布
PCA旋转后数据分布
上图显示了原始数据和经过PCA旋转之后的数据,可以发现数据之间的相对位置都没有改变 , 仅仅改变了数据的基 , 但这种方法就降低了数据之后的相关性 。(原始数据的相关性为正,因为x1增加时,x2也增加;而处理之后的数据的相关性明显降低)
第二个要求是每个输入特征具有单位方差 , 以
直接使用作为缩放因子来缩放每个特征
,计算公式
 , 经过PCA白化处理的数据分布如下图所示,此时的协方差矩阵为单位矩阵I 。
PCA白化与ZCA白化对比
PCA白化
ZCA白化
2.ZCA白化
ZCA白化的定义为:
ZCA白化只是在PCA白化的基础上做了一个旋转操作 , 使得白化之后的数据更加的接近原始数据 。
ZCA白化首先通过PCA去除了各个特征之间的相关性,然后是输入特征具有单位方差,此时得到PCA白化后的处理结果,然后再把数据旋转回去,得到ZCA白化的处理结果,感觉这个过程让数据的特征之间有具有的一定的相关性,
下面实验进行验证 。
在实验中,我分别计算了原始数据,旋转后数据,PCA白化以及ZCA白化的协方差矩阵,数据用的是UFLDL的实验数据,是个协方差矩阵分别为:
从上面的4个协方差矩阵可以发现 , 正如上面所述,旋转之后降低了特征之间的相关性,协方差矩阵的主对角线以外的值都接近零 。
猜测ZCA白化后的数据的相关性会比PCA白化的要强 , 在该实验室中表明好像感觉是对的,ZCA白化后主对角线以外的值的绝对值大于PCA白化后(今天看了下发现这个有问题),虽然这种比较可以忽略不计,应该他们的值都是非常的接近的 。
3.PCA白化和ZCA白化的区别
PCA白化ZCA白化都降低了特征之间相关性较低,同时使得所有特征具有相同的方差 。
4.正则化
实践中需要实现PCA白化或ZCA白化时 , 有时一些特征值
在数值上接近于0 , 这样在缩放步骤时我们除以
将导致除以一个接近0的值,这可能使数据上溢 (赋为大数值)或造成数值不稳定 。因而在实践中,我们使用少量的正则化实现这个缩放过程 , 即在取平方根和倒数之前给特征值加上一个很小的常数

当x在区间 [-1,1] 上时, 一般取值为

参数