优化的最直接目的就是使参数更加准确。
1 基于梯度的优化
基于梯度的优化就是优化一个函数的最终取值。假设ω是函数的输入,J(ω)是需要优化的函数,那么基于梯度的优化指的就是改变ω以得到最小化或最大化的J(ω)。
1.1 梯度下降算法
沿着函数的下坡方向移动ω而获得更小的J(ω)的技术在深度学习领域就叫做梯度下降。通常ω泛指神经网络中的参数,J(ω)表示训练数据集上的损失函数。
梯度下降算法会迭代式更新参数ω,不断沿着梯度的反方向让参数朝着损失更小的方向移动。
梯度g:函数J(ω)在ω处的导数值
学习率σ:每次参数移动的幅度。
ω-g*σ=ω’
最终找到的J(ω)非常小的点,将这个点作为一个近似最小点。可能不是全局最优点。但在深度学习任务中,只要它显著低于损失函数的绝大部分值,就能接受这样的解。
寻找多维函数的最小点,利用偏导数,优化后的输出是一维的(标量)。
梯度下降算法存在的两个问题:
- 梯度下降算法不能保证被优化的非凸函数达到全局最优解。最后得到的结果很大程度受到参数初始值的影响。
- 梯度下降算法的计算时间太长。
1.2 随机梯度下降算法SGD
随机梯度下降算法可以加快每一轮参数更新的速度。这个算法不会对全部训练数据上的损失函数进行优化,而是在每一轮迭代中随机选择某一个或者多个训练数据上的损失函数进行优化。
同样存在问题,在某些训练数据上损失函数更小并不代表在全部训练数据上损失函数更小。
2 反向传播
如果说梯度下降算法优化了单个参数的取值,那么反向传播算法则给出了一种高效地在所有参数上使用梯度下降算法的方式。
2.1 反向传播算法(BP)
BP算法是一个迭代算法:
(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);
(2)计算每一层的误差,误差的计算过程是从最后一层向前推进;
(3)更新参数(目标是误差变小)。
迭代前面两个步骤,直到满足停止准则(比如相邻两次迭代的误差的差别很小)。
反向传播算法仅用于计算梯度的方法,但理论上它可以计算任何函数的导数,并不限于计算损失函数关于参数的梯度。
2.2 自适应学习率算法
要优化的参数对于目标函数的依赖各不相同,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。
2.3 TensorFlow优化器
一般情况下,平常所说的训练神经网络指的都是使用框架里面体提供的优化器(也可以称作梯度下降函数)去降低loss值。TensorFlow中已经将很多常用的梯度下降方法封装成了函数方法。