和deepmind数据科学家、udacity深度学习导师andrew trask一起,基于numpy手写神经网络,更深刻地理解dropout这一概念。
总结:几乎所有目前最先进的神经网络都用到了dropout. 这篇教程介绍如何通过几行python代码在神经网络中加入dropout. 读完这篇教程之后,你将得到一个可以工作的dropout实现,并且掌握在任何神经网络中加入和调整dropout的技能。
如果你对我的文章感兴趣,欢迎在推特上关注 @iamtrask,也欢迎给我反馈。
直接给我代码
import numpy as np
x = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).t
alpha,hidden_dim,dropout_percent,do_dropout = (0.5,4,0.2,true)
synapse_0 = 2*np.random.random((3,hidden_dim)) - 1
synapse_1 = 2*np.random.random((hidden_dim,1)) - 1
for j in xrange(60000):
layer_1 = (1/(1+np.exp(-(np.dot(x,synapse_0)))))
if(do_dropout):
layer_1 *= np.random.binomial([np.ones((len(x),hidden_dim))],1-dropout_percent)[0] * (1.0/(1-dropout_percent))
layer_2 = 1/(1+np.exp(-(np.dot(layer_1,synapse_1))))
layer_2_delta = (layer_2 - y)*(layer_2*(1-layer_2))
layer_1_delta = layer_2_delta.dot(synapse_1.t) * (layer_1 * (1-layer_1))
synapse_1 -= (alpha * layer_1.t.dot(layer_2_delta))
synapse_0 -= (alpha * x.t.dot(layer_1_delta))
一、什么是dropout?
如同前一篇文章提到的,神经网络是一个美化的搜索问题。神经网络中的每一个节点搜索输入数据和正确的输出数据之间的相关性。
考虑前一篇中的图片。曲线表示网络对应每个具体权重产生的误差。曲线的低点(读作:低误差)标志着权重“找到”输入和输出之间的关系。图中的球标志着不同的权重。它们都试图找到低点。
考虑颜色。球的初始位置是随机生成的(就像神经网络的权重)。如果两个球随机开始于同一颜色区域,那么它们将收敛于同一点。这里存在冗余!浪费算力和内存!这正是神经网络中发生的事。
为何dropout:dropout有助于防止权重收敛于同一位置。它通过在前向传播阶段随机关闭节点做到这一点。接着在反向传播时激活所有节点。让我们仔细看看。
二、如何加入和调整dropout?
为了在网络层上执行dropout,我们在前向传播阶段随机设置层的值为0——见第10行。
第9行:参数化是否使用dropout. 我们只打算在训练阶段使用dropout. 不要在运行时使用dropout,也不要在测试数据集上使用dropout. 此外,这一行也意味着我们需要增大前向传播的值。这与关闭的值的数目成正比。一个简单的直觉是,如果你关闭一半的隐藏层,那么你需要加倍前向传播的值,以正确补偿输出。感谢@karpathy指出这一点。
调整的最佳实践
第4行:参数化dropout百分比。这影响关闭任何一个节点的概率。对隐藏层而言,较好的初始值设定是50%. 如果将dropout应用于输入层,最好不要超过25%.
hinton主张在调整dropout的同时调整隐藏层的大小。首先关闭dropout,增加隐藏层尺寸,直到你完美地拟合了你的数据。接着,使用相同的隐藏层尺寸,开启dropout进行训练。这应该是一个近乎最优的配置。一旦结束训练,关闭dropout。万岁!你有了一个可以工作的神经网络!
新基建的五个典型特征及机遇
定位人工智能时代的“拍照机器人”,美图M8为何能撩倒Angelababy等明星
4分钟了解物联网卡的基础知识
英飞凌大中华区首届生态圈大会成功举办,家电创新引人瞩目
微软WP8技术支持时间将延长到2015年
基于Numpy实现神经网络:如何加入和调整dropout?
自制交流自动稳压器电路
Pyramid 发现,在LTE时代,WiMax会在细分市场战
组态王和触摸屏与200Smart之间PN无线通讯
三星note7翻版重做,从头来过的note7你还会买吗?
单片机智能集群控制消防应急指示灯设计
TCL华星展示两款电竞显示器,达到1400尼特峰值亮度
在中国,为中国法国领先设备制造商Haulotte的中国式承诺
介入式脑机接口:将一簇“细绳”导入脑血管 实现意念控制
魅族15 Plus曝光 安兔兔跑分19万
如何变压器线圈的直流电阻
Jeep自在客一款硬派越野车还是以实用性为主,报价十分亲民,你会买吗?
怎样使用Facebook作为树莓派终端
万和热水器不打火怎么解决
便携式Arduino机器人的制作方法