神经网络Trick之DropConnect
来源:互联网 发布:炫酷桌面软件 编辑:程序博客网 时间:2024/05/21 10:12
我们知道,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。(一个是输出,一个是输入)
其表达式如下:
两者的区别从下图基本可以看明白:
其原理还是很简单,是吧?
下面主要来看DropConnect的trainning和inference两部分。
training部分和Dropout的training部分很相似,不过在使用DropConnect时,需要对每个example, 每个echo都随机sample一个M矩阵(元素值都是0或1, 俗称mask矩阵)。training部分的算法流程如下:
注意:因为DropConnect只能用于全连接的网络层(和dropout一样),如果网络中用到了卷积,则用patch卷积时的隐层节点是不使用DropConnect的,因此上面的流程里有一个Extract feature步骤,该步骤就是网络前面那些非全连接层的传播过程,比如卷积+pooling.
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(我这里没设备,没有跑它)。
- 神经网络Trick之DropConnect
- 神经网络的Trick之Dropout的理解与实现
- C之小trick
- 小trick之tools
- trick
- Trick
- trick
- Dropout 与 DropConnect
- DropConnect简单理解
- TensorLayer (TuneLayer) 实现 DropConnect
- 神经网络之BP神经网络
- 神经网络之BP神经网络
- dropout、dropconnect、maxout、batch normalization
- 人工神经网络之自适应神经网络
- 神经网络学习 之 BP神经网络
- 卷积神经网络的并行化模型——One weird trick for parallelizing convolutional neural networks
- C++ trick之重载类型转换操作符 “orthodox”技术
- 文本挖掘预处理之向量化与Hash Trick
- C语言基础 有负数参与的取余运算
- 将一个罗马数转化成对应的阿拉伯数
- Ubuntu 14.04下安装eclipse搭建C++开发环境
- 子网划分举例
- JavaScript中变量作用域问题
- 神经网络Trick之DropConnect
- 每天一命令(16)top - display Linux tasks
- Android Fragment 真正的完全解析(上)
- 【记录】io多路复用的学习和理解
- 对一个MySQL存储过程的优化
- Android Fragment 真正的完全解析(下)
- 2. 代理模式-为别人做嫁衣
- C语言基础 如何将正数变成负数
- struts2环境搭建