优化与深度学习
损失函数最小化=目标函数最小化
优化目标=训练误差降低
DL 目标=泛化误差降低;除了应达到优化目标外,壬戌要应对过拟合问题。
目标函数过于复杂,故优化问题找数值解。挑战有:
- 局部最小值
- 鞍点
局部最小值
局部最小值点梯度为0,故很容易陷入其中,全局最小化难以满足。
鞍点
梯度为0的三种可能:
- 全局最小值
- 局部最小值
- 鞍点
np.mgrid[]用法
Hessian矩阵:梯度向量的梯度向量,输出关于输入的偏导数矩阵。
- Hessian矩阵在梯度为0的位置特征值全正,函数取局部最小值。
- Hessian矩阵在梯度为0的位置特征值全负,函数取局部最大值。
- Hessian矩阵在梯度为0的位置上特征值有正有负,函数有鞍点存在。
随机矩阵理论:高斯随机矩阵,任一特征值的正负概率均为0.5,故第1、2种概率均只有0.5^k,鞍点比局部极小值更为常见。
深度学习中找全局最优解并非必要。
梯度下降和随机梯度下降
一维梯度下降
逆梯度目标函数值下降最快。
学习率:
- 过小,迭代时间长
- 过大,泰勒展开公式不成立,发散
- 合适的lr需要通过多次实验得到
多维梯度下降
逆梯度方向可使方向导数最小化,降低目标函数值。
随机梯度下降
深度学习中的目标函数常常是训练集中各个样本损失函数的平均。
梯度下降的每次迭代时间复杂度为O(n),随机梯度下降法可以减少每次迭代的计算开销,从n个样本中选一个计算梯度,应用梯度下降更新参数。
随机梯度是对梯度的无偏估计。
小批量随机梯度下降
梯度下降法用整个训练集来计算梯度,batch gradient descent;随机梯度下降法选择一个样本来计算梯度,而小批量随机梯度下降则用一个样本组来计算梯度(平均)。
重复采样:允许同一个小批量中出现重复的样本。
不重复采样:不允许同一小批量中出现重复样本,更常见。
重复采样所得的小批量随机梯度是对梯度的无偏估计。
基于随机采样得到梯度的方差在迭代过程无法减小,实际过程中要将学习率进行衰减(在小批量和随机中都要);而梯度下降在迭代过程中使用的目标函数的真实梯度,无需衰减学习率。
随着迭代计算开销的增大,随机梯度下降-》小批量随机梯度下降-》梯度下降。批量的选择很重要,少了并行处理和内存使用效率低,大了梯度中冗余信息较多。批量较大时,增大迭代周期数。
动量法
梯度下降法的问题
针对不同的参数的梯度量级,难以找到统一的学习率进行迭代更新,往往造成发散。
动量法思路
对最近的1/(1-r)个时间步的更新量(学习率x梯度)进行指数加权平均后再除以1-r,权重按时间步指数衰减。自变量在各个方向的移动幅度不仅与当前梯度有关,而且与过去梯度在各方向是否一致有关。使得相邻时间步的自变量更新在方向上更加一致。
AdaGrad算法
用同一个学习率来迭代各自变量,但在自变量梯度有较大差异时需要选择足够小的学习率使得自变量在梯度值较大的维度上不发散,但同时也会在梯度值较小维度迭代过慢。
动量法用指数加权移动,使得自变量更新方向更加一致,降低发散可能性。
AdaGrad算法更具自变量在每个味的的梯度值大小调整各个维度学习率,避免统一lr的困惑。
自变量拥有自己的学习率,梯度大的lr下降块,而梯度小的lr变化不大。
公共学习率上s_t一直在累积,最终有可能无法得到有效解。
RMSProp算法
以AdaGrad算法为模版,结合动量法加权随时间步衰减思想,按元素平方做加权,t-1步前加权r,当前加权1-r。解决了各自变量学习率一直降低/不变的问题。
AdaDelta算法
改进了AdaGrad算法在迭代后期难以找到有用解的难处,且没有学习率。
用了RMSProp的模板,用自变量更新量平方的指数加权和来替代学习率。
Adam算法
在RMSProp算法基础上对小批量随机梯度做了指数加权和,可看作RMSProp与动量法的结合。
对迭代的中间变量做了偏差修正,目标函数自变量都拥有各自的学习率。