深度学习的实用层面-3

本文来源于网易云课堂

dropout正则化

除了L2正则化,还有一个非常实用的正则化方法-dropout(随机失活)。
这里写图片描述
假设你在训练如图这样的神经网络,它存在过拟合。dropout会遍历网络的每一层,并设置消除神经网络中节点的概率。假如以抛硬币的方式设置概率,即概率为0.5,那么就会有一些节点被删除,如图所示。
这里写图片描述
删除从节点进出的连线,得到一个样本精简后的网络。对于其他样本,我们照旧以抛硬币的方式设置概率,并得到精简的网络。这种方法可能有点怪,什么都是随机的,但是它的确有效。
这里写图片描述

如何实现dropout?

使用最多的就是invert dropout方法。
以3层的网络,keep_prob = 0.8为例:

#创建一个随机布尔矩阵d3,大于0.8的为false
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob
a3 = np.multiply(a3, d3)
a3 /= keep_prob

第三行是什么意思呢?假设第3隐层上有50个单元,保留和删除它们的概率分别是80%和20%,也就是平均与10个单元删除。对于 Z[4]=W[4]a[3]+b[4] Z [ 4 ] = W [ 4 ] ∗ a [ 3 ] + b [ 4 ] ,由于a3减少了20%,为了不影响z4的期望值,我们用其除以0.8,他会弥补损失使得期望值不会变。
事实证明,在测试阶段使用dropout方法使得测试阶段变得更容易。

归一化输入

训练神经网络时,一种加速训练的方法是归一化输入(normalize)。

怎么实现归一化?

假如输入 x x 有2个特征,x=(x1x2)
,给出散点图(scatter)如下:
这里写图片描述

归一化过程有2个步骤:
- 零均值化
- 归一化方差

零均值化是指求出平均值 μ=1mmi=1x(i) μ = 1 m ∑ i = 1 m x ( i ) 后将数据集移动直到 x=xμ x = x − μ
这里写图片描述

归一化方差的过程如下:
- 求方差: σ2=1mmi=1x(i)2 σ 2 = 1 m ∑ i = 1 m x ( i ) 2
- 归一化: x/=σ2 x / = σ 2
从图中可以看到,x1的方差要比x2的方差大得多,因为方差是衡量数据离散程度的度量。经过归一化以后,x1和x2的方差都会等于1.
这里写图片描述

Tips:如果你用它来调整训练数据,那么用相同的 μ μ σ2 σ 2 来归一化测试集,尤其是你不希望训练集和测试集的归一化有所不同,因为我们希望不管是训练数据还是测试数据,都是通过相同的 μ μ σ2 σ 2 定义的相同数据转换,其中 μ μ σ2 σ 2 是由训练集计算得来的。

为什么归一化?

对于损失函数 J(w,b)=1mm(i=1)L(y^(i),y(i)) J ( w , b ) = 1 m ∑ ( i = 1 ) m L ( y ^ ( i ) , y ( i ) ) ,如果不使用归一化,代价函数很可能是下图一样的狭窄的函数,因为可能w的范围很大,如(1-1000),而b的范围很小,如(0-1)。如果画出代价函数的部分轮廓,它会是一个狭长的函数。如果使用梯度下降法,那么就必须使用很小的学习率,就像下图蓝色线画的一样,需要经过多次迭代才能找到最小值。
这里写图片描述
如果归一化后,代价函数看起来更对称,轮廓更圆,不论从哪个地方开始梯度下降,总能更快的找到最小值。
这里写图片描述
尽管实际上w是高维的,不能用二维表示,但总的理解就是代价函数更圆一些就更容易优化,前提是w和b都在相似范围之内。假如输入x1:(0-1),x2:(1-2);x3:(-1-1),因为他们是相似的范围,那么即使不用归一化他们也可以表现的很好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值