欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习第二周--第三课超参数调优、Batch正则化理论

程序员文章站 2022-03-16 19:26:09
...

前言

参考念师
在本篇文章中,将了解机器学习中的超参数调优、batch正则化及深度学习框架。
主要包括:

  • 超参数调试经验
  • 深层神经网络中隐藏层的归一化
  • batch正则化
  • softmax分类回归问题
  • 深度学习框架简介

超参数调试经验

超参数有哪些?

  • α\alpha:学习率
  • β\beta:momentum梯度下降法
  • β1=0.9,β2=0.999,ξ=108\beta 1=0.9,\beta 2=0.999,\xi=10^{-8}:adam优化算法
  • 网络层数
  • 每层中神经元数量
  • decay_rate:学习速率衰减速度
  • mini-batch size

参数调优?

  • 机器学习:两点构成平面,在平面上均匀选择一系列电,并找其中最优点。

这个方法在参数较少的时候比较实用。
深度学习第二周--第三课超参数调优、Batch正则化理论

  • 深度学习:两点构成平面,在平面上选择一系列点,先使用对数标尺,然后随机选择,最后由粗粒度到细粒度。
    深度学习第二周--第三课超参数调优、Batch正则化理论

为何要使用对数标尺?
以调试超参数学习速率为例子,假设α\alpha=0.0001,…,1。此时,如果随机选择,大约会有90%的点落在0.1到1之间,而只有10%的点在0.0001到0.1之间,所以使用对数标尺,
深度学习第二周--第三课超参数调优、Batch正则化理论

r = -4 * np.random.rand()
a = 10 ** r

为何要随机选择?
因为在深度学习中,无法确定哪些超参数的影响更大,而随机选择点,可以达到在每个维度上有更多的值进行选择,从而得到相对更好的结果。
步骤

  • 首先在整个空间中随机选择一系列点,并找出其中的相对较优点集中的区域。
  • 在该区域中随机选择一系列点,并找出其中的相对较优点集中的区域。
    深度学习第二周--第三课超参数调优、Batch正则化理论

讨论:指数加权平均中的参数β\betaβ\beta取值范围在0.90.999,则1-$\beta$取值范围在0.00010.1之间。

r = -2 * np.random.rand() - 1 #[-3,-1]
b = 1 - 10 ** r

建议

  • 随着数据集或样本等的变化,之前已经调整好的参数可能在一段时间后不再适应,因此每个几个月建议重新调整/测试一下参数。
  • 参数训练的两种方式:1、babysitting适应于有足够大的数据但是没有充足的计算资源的情况,每次训练一个模型,并在训练的过程中不断观察结果并随时进行参数调整。2、在有充足的计算资源情况下,可以同时训练某模型在不同的参数情况下的效果,然后从中选择合适的超参数对应的模型。

深层神经网络中隐藏层的归一化

原理

将模型的最优值范围变得更规范,提高训练过程,更快找到最优值。通常对z[l]z^{[l]}归一化

公式

假设z[l]z^{[l]}包含元素为z[1],,z[m]z^{[1]},\dots,z^{[m]}
u=1miz[i]u = \frac{1}{m}\sum_i z^{[i]}
σ=fraclmi(ziu)2\sigma=fraclm \sum_i(z_i - u)^2
znorm[i]=z[i]uσ2+ξz_{norm}^{[i]}=\frac{z^{[i]}-u}{\sqrt{\sigma^2+\xi}}
z~[i]=Υznorm[i]+β\tilde z^{[i]}=\Upsilon z_{norm}^{[i]}+\beta

batch正则化

原理

将模型的最优值范围变得更规范,提升训练速度,更快找到最优值。

其它原因

  • 鲁棒性强:在每个隐藏层进行归一化有助于削弱之前层的一些特殊值变化带来的影响,从而保证整个神经网络有更强的鲁棒性。
  • 起到正则的效果:batch归一化常与mini-batch方法结合,因为每次迭代只是由其中一部分数据得到,存在一定程度的波动。通过添加一定程度的噪声(均值、方差),可以起到与dropout类似的效果。

流程图

深度学习第二周--第三课超参数调优、Batch正则化理论
通过输入x得到z之后,先进行batch归一化后再去计算a。每一层中需要训练的参数除了w、b,还新增了β,Υ\beta,\Upsilon。在实践中,batch归一化通常与mini-batch结合使用。
注意:
在上述讨论中,始终围绕mini-batches方法来学习batch归一化基本理论和实践,在应用或测试的过程中,每次传入的值可能是一个样本,而不是mini-batch,因此,在测试中,每次输入只有一个样本,计算均值和方差没有意义,为了将网络应用于测试,我们需要使用指数加权平均法来估算均值和方差:根据训练集中的数据来估算整个样本集的均值和方差,然后在测试中,直接使用训练样本集估算得到的均值和方差。

softmax分类回归问题

意义?

解决多分类问题

公式

z[L]=w[L]a[L1]+b[L]z^{[L]}=w^{[L]}a^{[L-1]}+b^{[L]}
t=ez[L]a[L]=ez[L]j=1Ctit=e^{z^{[L]}}a^{[L]}=\frac{e^{z^{[L]}}}{\sum_{j=1}^C t_i}
举例讲解:
假设:
z[L]=[5,2,1,3]z^{[L]}=[5,2,-1,3]
则:
t=[e5,e2,e1,e3]=[148.4,7.4,0.4,20.1]t=[e^5,e^2,e^{-1},e^3]=[148.4,7.4,0.4,20.1]
j=14ti=148.4+7.4+0.4+20.1=176.3\sum_{j=1}^4 t_i=148.4+7.4+0.4+20.1=176.3
a[L]=[148.4/176.3,7.4/176.3,0.4/176.3,20.1/176.3]=[0.842,0.042,0.002,0.114]a^{[L]}=[148.4/176.3,7.4/176.3,0.4/176.3,20.1/176.3]=[0.842,0.042,0.002,0.114]
如何对softmax网络进行训练?
L(y^,y)=j=1Cyilogy^jL(\hat y,y)=-\sum_{j=1}^C y_i log \hat y_j
假设y=[0,1,0,0],而y^=[0.3,0.2,0.1,0.4]\hat y=[0.3,0.2,0.1,0.4],则
L(y^,y)=y2logy^2L(\hat y,y)=-y_2 log \hat y_2
如果希望L尽可能小,则y2y_2尽可能大,对于一个batch来说,代价函数J应该怎么计算呢?
J(w,b)=1mi=1mL(y^(i),y(i))J(w,b)=\frac{1}{m}\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})

深度学习框架简介

深度学习第二周--第三课超参数调优、Batch正则化理论
如何选择框架?

  • 易用,易编程
  • 计算效率高
  • 是否会长时间开源
  • 支持的语言
相关标签: 深度学习