和maxout(maxout简单理解)同样,DropConnect也是在ICML2013上发表的,一样也是为了提升Deep Network的泛化能力的,二者都号称是对Dropout(Dropout简单理解)的改进。html
咱们知道,Dropout是在训练过程当中以必定几率1-p将隐含层节点的输出值清0,而用bp更新权值时,再也不更新与该节点相连的权值。用公式描述以下:算法
其中v是n*1维的列向量,W是d*n维的矩阵,m是个d*1的01列向量,a(x)是一个知足a(0)=0的激发函数形式。这里的m和a(Wv)相乘是对应元素的相乘。网络
而DropConnect的思想也很简单,与Dropout不一样的是,它不是随机将隐含层节点的输出清0,而是将节点中的每一个与其相连的输入权值以1-p的几率清0。(一个是输出,一个是输入)dom
其表达式以下:函数
二者的区别从下图基本能够看明白:tornado
其原理仍是很简单,是吧?spa
下面主要来看DropConnect的trainning和inference两部分。3d
training部分和Dropout的training部分很类似,不过在使用DropConnect时,须要对每一个example, 每一个echo都随机sample一个M矩阵(元素值都是0或1, 俗称mask矩阵)。training部分的算法流程以下:htm
注意:由于DropConnect只能用于全链接的网络层(和dropout同样),若是网络中用到了卷积,则用patch卷积时的隐层节点是不使用DropConnect的,所以上面的流程里有一个Extract feature步骤,该步骤就是网络前面那些非全链接层的传播过程,好比卷积+pooling.blog
DropConnect的inference部分和Dropout不一样,在Dropout网络中进行inference时,是将全部的权重W都scale一个系数p(做者证实这种近似在某些场合是有问题的,具体见其paper)。而在对DropConnect进行推理时,采用的是对每一个输入(每一个隐含层节点链接有多个输入)的权重进行高斯分布的采样。该高斯分布的均值与方差固然与前面的几率值p有关,知足的高斯分布为:
inference过程以下:
由上面的过程可知,在进行inference时,须要对每一个权重都进行sample,因此DropConnect速度会慢些。
根据做者的观点,Dropout和DropConnect都相似模型平均,Dropout是2^|m|个模型的平均,而DropConnect是2^|M|个模型的平均(m是向量,M是矩阵,取模表示矩阵或向量中对应元素的个数),从这点上来讲,DropConnect模型平均能力更强(由于|M|>|m|)。
DropConnect的源代码能够在做者项目主页DropConnect project page.上下载,不过须要用到Cuda(我这里没设备,没有跑它)。
参考资料:
Regularization of Neural Networks using DropConnect, Li Wan,Matthew Zeiler, Sixin Zhang, Yann LeCun, Rob Fergus.