吴恩达深度学习笔记优化算法续

六、学习率衰减(learning rate decay)

学习率衰减:训练过程中逐渐减小 learning rate
下图蓝色线表示训练中α固定的梯度下降,绿色线表示α逐渐减小的梯度下降:

这里写图片描述

使用Mini-batch训练且learning rate 固定时,梯度下降到达最小值点附近后,因为不同batch存在一定的噪声,使得不会精确收敛,而是会在最小值点较大的范围内波动。但是如果我们使用学习率衰减,逐渐减小learning rate,开始的时学习速率还是比较快,随着迭代次数增多α逐渐减小,最终会在最小值附近的一块更小的区域里波动。

学习率衰减的几种策略:
epoch表示完整的数据集,epoch_num表示训练整个数据集的次数,α0表示初始的learning rate。
 

\alpha =\frac{1}{1+decay-rate*epoch-num}\alpha _{0}

\alpha =0.95^{epoch-num}\alpha _{0}

\alpha =\frac{k}{epoch-num}\alpha _{0}

分段函数:隔一段设置一个不同的 learning rate

# tensorflow 自适应学习率衰减
# 计算公式: decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)
# staircase=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率,如果是False,那就是每一步都更新学习速率
# learning_rate 初始学习速率
# decay_rate 衰减率
# global_steps 总的迭代次数
# decay_steps 衰减次数
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None) 

七、局部最优问题(local optimal)

左图为三维 cost function, 右图为高维的cost function 的一部分。

这里写图片描述

 

局部最优点:cost function 中这点的所有维的导数为0,即所有维都应同时为凸函数,或同时是凹函数。
鞍点:cost function 中这点的某一维或某几维的导数为0,这么叫是因为类似马鞍的最低点。

低维时,cost function 有 local optimal 概率很高,但在高维时有 local optimal 概率就很低了,维度越高概率越低。所以高维时正常不用担心出现局部最优的情况,而是应该考虑出现鞍点的情况,因为鞍点附近的某一维的梯度可能很小,迭代就会变慢,可以用Adam算法来处理。

超参数调试、Batch 正则化和程序框架

一、超参数调试(hyperparameter tuning)
推荐的超参数重要性排序:
1、学习率(learning rate): α
2、隐藏神经单元(hidden units); mini-batch的大小 (mini-batch size); β (momentum)
3、神经网络层数(layers); 学习率衰减率(learning rate decay)
4、Adam优化算法的其它超参数,正常不用调优

参数调试的方法:
网格点选取(grid):
对每一个超参数取一系列不同的值, 组成一个大表包含所有的组合,然后从头到尾一个一个试。超参数比较少的情况下使用。

随机选择(select random values):
对每一个超参数随机选取不同的值组合成一个实验组合, 然后进行调试,重复随机选取。超参数较多的情况下使用,通常神经网络采取这种方式。

粗超到精细(coarse to fine):
先进行比较粗超的调试,如果发现在某一区域里的点效果都比较好,对这个的小区域进行更精细的调试。

选择超参数的合理范围(appropriate scale):

在 0.0001~1 的范围内进行进行均匀随机取值,则有90%的概率选择到 0.1∼1 之间,而只有10%的概率选择到0.0001∼0.1之间,显然是不合理的。合理的选择应该是对于不同比例范围随机选取的概率一样,如在 0.0001∼0.001、0.001∼0.01、0.01∼0.1、0.1∼1 中随机选择的概率一样。称为对数坐标选择,即logx。
python实现代码:

 # 在 10^a~10^b 间进行对数坐标的选择时,生成a到b的随机数,以上面为例a=-4,b=0

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

# 求学习率10^r,范围变为0.0001到1

learning_rate = 10 ** r

 超参数调试的不同策略(Panda & Caviar):

 

计算资源有限时:使用Panda策略(左图),每次仅调试一个模型,不断查看效果并相应的修改超参数;
计算资源充足时:使用Caviar策略(右图),同时并行调试多个模型,选取其中最好的模型。

二、Batch 正则化(batch normolization)

Batch 正则化:
类似于我们对input进行归一化,Batch 正则化是对每一层的每个z(不是a)进行归一化,起到加速训练的作用。公式如下:ε的作用就是不让分母过小。

\mu =\frac{1}{m}\sum z^{\left ( i \right )}

\sigma ^{2}=\frac{1}{m}\; \sum \left ( z^{i}-\mu \right )^{2}

z_{norm}^{i}=\frac{z^{\left ( i \right )}-\mu }{\left ( \sigma ^{2}+\varepsilon \right )^{0.5}}

这样所有的z都变成了平均值为0、方差为1的分布,但我们不希望隐藏层的单元总是如此,也许不同的分布会更有意义,所以进行下式计算:

z^{\left ( i \right )}=\gamma z_{norm}^{i}+\beta

这个式子的含义就是z可以还原会没有归一化的时候,也可以还原一部分,也可以不还原。这就使得 \gamma 和 \beta 需要被学习变成了超参数,可以用梯度下降进行更新。

将Batch正则化拟合进神经网络(Fitting Batch Norm into a neural network):

 

 

因为z[l]=w[l]*a[l−1]+b[l],对z[l]进行归一化使其均值为0,标准差为1的分布,所以无论b[l]值为多少,在归一化的过程中都会被减去,所以可以将b[l]去掉,或者将其置零。之后由β和γ进行重新的缩放,其实β[l]等效于b[l]的功能。

Batch正则化梯度下降的实现(implementing gradient descent)
主要就是用把z[l] 替换为经过正则化的z˜[l],还有删除b[l]这个参数:

Batch Norm为什么有效:
1、类似于归一化输入,优化cost function的形状,加速迭代
2、因为对z进行正则化,使其值保持在相同的均值和方差的分布上。一定程度上减小z的变化,即减小了前层的参数更新对后层网络数值分布的影响,使得输入后层的数值变得更加稳定。另一个角度就是可以看作,Batch Norm 削弱了前层参数与后层参数之间的联系,使得网络的每层都可以自己进行学习,相对其他层有一定的独立性,这会有助于加速整个网络的学习。

Batch Norm有轻微的正则化效果:
这只是顺带产生的副作用,好坏不定,不能以此来作为正则化的工具。

测试时如何进行 Batch Norm( Batch Norm at test time):

训练时对每个Mini-batch使用Batch Norm时,可以计算出均值μ和方差σ2。但是在测试的时候,我们需要对每一个测试样本进行预测,计算单个样本的均值和方差没有意义。因此需要事先给出均值μ和方差σ2,通常的方法在训练每个Mini-batch时,缓存使用指数加权平均求出的均值μ和方差σ2,当训练结束的时候,可以得到指数加权平均后的均值μ和方差σ2并把它用于测试集的 Batch Norm 的计算,进而对测试样本进行预测。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值