#5 Optimization
2018-02-19 本文已影响0人
nearby
优化的目的是通过最小化损失函数,找到合适的权重W,使得分类效果最佳。
优化策略有如下几种
- Random Search
- Follow the slope (Numerical gradient)
- Analytic gradient
- Mini-batch gradient descent
Random Search
对于策略1,随机权重W,重复多次,比如1000次,从这1000次中找到使损失最小的那个W,将其定义为最优权重。以cifar-10数据集为例,总共有10个类别,随机猜的情况下,准确率有10%。用随机搜索策略,随机1000次后,最优W得到的准确率约为15.5%。随机搜索策略,不仅效率低,准确率也低。
Follow the slope
对W每一个元素上的改变,分别求导数$\frac{dL(W)}{dW}=\lim_{\Delta W \to 0}\frac{L(W+\Delta W)-L(W)}{\Delta W}$这种方法可行,但效率低,称之为Numerical gradient.
Analytic gradient
由于L是只与W有关,与训练集无关的函数,利用微分原理,可以求L对W的梯度,免去上一策略对W所有元素求导的繁杂。
在实际使用中,用求梯度(analytic gradient)的方法进行调优,只在需要确定梯度函数是否正确时,使用numerical gradient计算。
Mini-batch gradient descent
当训练集较大时,如果对所有的数据训练一遍后再对W做调整,很费时。因此考虑每次只用一小部分训练数据(mini-batch size)做训练,对模型进行调优。常用的batch size = 32/64/128,通常取决于GPU的大小,如果GPU较小,则batch size也应当调小。
对比full-batch和mini-batch做出来的性能曲线,full batch只有一条曲线构成,mini-batch是由波动的多条曲线构成。
mini batch下的loss曲线
学习率对损失函数的影响
learning rate 对loss的影响
- 学习率设置得小,损失函数收敛的时间长;
- 学习率设置过高,在梯度下降的过程中,loss震荡可能越过最小值(谷底),导致loss无法收敛
梯度更新的方法
- SGD 随机梯度下降 $Weights+=LearningRate*WeightsGradient$
- Momentm
- Adagrad
- RMSProp
- Adam