Dropout, DropConnect ——一个对输出,一个对输入

Deep learning: Dropout, DropConnect

Dropout

训练神经网络模型时,如果训练样本比较少,为了防止模型过拟合,可以使用Dropout来一定程度的减少过拟合。Dropout是Hinton 在2012年提出来的。


Dropout是指在模型训练时随机的让隐层节点的权重变成0,暂时认为这些节点不是网络结构的一部分,但是会把它们的权重保留下来(不更新)上图帮助理解。

我使用的是Matlab的Deeplearning 的工具包https://github.com/rasmusbergpalm/DeepLearnToolbox, 我只使用的是简单地单隐层的感知机,数据是MNIST手写数字识别,该数据一共有60000个训练样本和10000个测试样本。图片大小是28 * 28,网络结构的层数是[784 512 10],100次迭代,minibatch大小是100,我做了在没有dropout和有dropout的实验对比。dropout的值是0.5,即以0.5的概率随机参数隐层节点。
代码如下:

load mnist_uint8
train_x = double(train_x(1:60000,:)) / 255;
train_y = double(train_y(1:60000,:));
test_x = double(test_x(1:10000,:)) / 255;
test_y = double(test_y(1:10000,:));
[train_x ,mu, sigma] = zscore(train_x);
test_x = normalize(test_x, mu,sigma);

%% without dropout
rand(0);
nn = nnsetup([ 784 512 10]);
opts.numepochs = 100;
opts.batchsize = 100;
[nn, L] = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
str = sprintf('testing error rate is : %f', er);
disp(str);

%% with dropout
rand(0);
nn = nnsetup([784 512 10]);
nn.dropoutFraction = 0.5;
opts.batchsize = 100;
opts.numepochs = 100;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
str = sprintf('test error rate is : %f', er);
disp(str);

实验结果是:
test error rate is : 0.035200
With dropout, test error rate is : 0.031400

参考资料:

DropConnect

神经网络一般在大规模标签数据分类表现的很好,但是一帮需要更多的层数和更多的神经元,单数如果没有规范化的话,数百万和数十亿的参数很可能导致模型的过拟合。
现有的Regularization方法:

  • $l_1$ 或者 $l_2$ 惩罚
  • 贝叶斯的方法
  • 早停
  • 以上提到的Dropout方法[Hinton et al.2012]

DropConnect与Dropout不同的地方是在训练神经网络模型过程中,它不是随机的将隐层节点的输出变成0,而是将节点中的每个与其相连的输入权值以1-p的概率变成0。(一个是输出一个是输入)


在MNITS数据集上的实验结果,分别是no-Drop,dropout和dropconnect的对比。

DropConnect的主页有源码可下载:DropConnect project page

参考资料

posted @   bonelee  阅读(1829)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2018-03-27 leetcode 404. Sum of Left Leaves
2018-03-27 leetcode 100. Same Tree
2018-03-27 leetcode 383. Ransom Note
2018-03-27 leetcode 122. Best Time to Buy and Sell Stock II
2018-03-27 leetcode 13. Roman to Integer
2018-03-27 python 判断是否为有效域名
2017-03-27 Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和Index文件 (FST详细解析)——直接看例子就明白了!!!
点击右上角即可分享
微信分享提示