共轭梯度法可认为是梯度下降法和牛顿法的中间物。该算法希望能加速梯度下降的收敛速度,同时避免使用海塞矩阵进行求值、储存和求逆获得必要的优化信息。 在共轭梯度训练算法中,因为是沿着共轭方向(conjugate directions)执行搜索的,所以通常该算法要比沿着梯度下降方向优化收敛得更迅速。共轭梯度法的训练方向是与海塞矩阵共轭的。 我们用 d 表示训练方向向量,然后从初始参数向量 w0 和初始训练方向向量 d0=-g0 开始,共轭梯度法所构建的训练方向序列为: 在上式中,γ 称之为共轭参数,并且有一些方法计算这个参数。两种最常用的方法是源自 Fletcher、Reeves 和 Polak 、Ribiere。对于所有的共轭梯度算法,训练方向周期性地重置为负梯度向。 参数通过下面的表达式得以更新和优化。通常学习速率η可使用单变量函数优化方法求得。 共轭梯度法的训练过程流程图就如下所示。从图中我们可以看出来模型是通过第一次计算共轭梯度训练方向而优化参数的,然后再寻找适当的学习速率。
共轭梯度法已经证实其在神经网络中要比梯度下降法有效得多。并且由于共轭梯度法并没有要求使用海塞矩阵,所以在大规模神经网络中其还是可以做到很好的性能。 拟牛顿法(Quasi-Newton method) 因为需要很多的操作求解海塞矩阵的值还有计算矩阵的逆,应用牛顿法所产生的计算量是十分巨大的。因此有一种称之为拟牛顿法(quasi-Newton)或变量矩阵法来解决这样的缺点。这些方法并不是直接计算海塞矩阵然后求其矩阵的逆,拟牛顿法是在每次迭代的时候计算一个矩阵,其逼近海塞矩阵的逆。最重要的是,该逼近值只是使用损失函数的一阶偏导来计算。 海塞矩阵由损失函数的二阶偏导组成,拟牛顿法背后的思想主要是仅使用损失函数的一阶偏导数,通过另一矩阵 G 逼近海塞矩阵的逆。拟牛顿法的公式可以表示为: 学习速率 η可以设定为固定常数,也可以通过单变量函数优化得到。其中矩阵 G 逼近海塞矩阵的逆,且有不同的方式进行逼近。通常,最常用的两种方式是 Davidon–Fletcher–Powell formula (DFP) 和 the Broyden–Fletcher–Goldfarb–Shanno formula (BFGS)。 拟牛顿法的训练过程流程图就如下所示。从图中我们可以看出来模型是通过第一次计算拟牛顿训练方向而优化参数的,然后再寻找适当的学习速率。 拟牛顿法适用于绝大多数案例中:它比梯度下降和共轭梯度法收敛更快,并且也不需要确切地计算海塞矩阵及其逆矩阵。
Levenberg-Marquardt 算法 Levenberg-Marquardt 算法,也称之为衰减最小二乘法(damped least-squares method),该算法的损失函数采用平方误差和的形式。该算法的执行也不需要计算具体的海塞矩阵,它仅仅只是使用梯度向量和雅可比矩阵(Jacobian matrix)。 该算法的损失函数如下方程式所示为平方误差和的形式: 在上式中,m 是数据集样本的数量。 我们可以定义损失函数的雅可比矩阵以误差对参数的偏导数为元素,如下方程式所示:
其中 m 是数据集样本的数量,n 是神经网络的参数数量。那么雅可比矩阵就是 m×n 阶矩阵。 损失函数的梯度向量就可以按如下计算出来: e 在这里是所有误差项的向量。 最终,我们可以用以下表达式逼近海塞矩阵: 其中λ为衰减因子,它确保了海塞矩阵的正定性(positiveness),I 是单位矩阵。 下面的表达式定义了 Levenberg-Marquardt 算法中参数的更新和优化过程: (责任编辑:本港台直播) |