Hessian矩阵由损失函数的二阶偏导数组成。拟牛顿法背后的主要思想是仅使用损失函数的一阶偏导数,atv直播,通过另一矩阵G得到近似Hessian矩阵的逆。拟牛顿法的公式可表示为: wi+1= wi- (Gi·gi)·ηi, i=0,1,... 训练速率η可以设置为固定值或通过线性最小化得到。最常用的两个公式是Davidon-Fletcher-Powell公式(DFP)和Broyden-Fletcher-Goldfarb-Shanno公式(BFGS)。 拟牛顿法的训练过程如下图所示。先得到拟牛顿训练方向,然后找到满意的训练速率来执行参数的改进。
这是在大多数情况下使用的默认方法:它比梯度下降法和共轭梯度法更快,并且不需要精确计算和反转Hessian矩阵。 5. Levenberg-Marquardt algorithm(莱文贝格-马夸特算法) Levenberg-Marquardt算法,又称阻尼最小二乘法,被设计为采用误差平方和形式的损失函数特定的算法。它不需精确计算Hessian矩阵,适用于梯度向量和Jacobian矩阵。 下图是使用Levenberg-Marquardt算法的神经网络训练过程。第一步是计算损失值、梯度和Hessian逼近,然后调整阻尼参数,以减少每次迭代的损失。
Levenberg-Marquardt算法是针对误差平方和型函数的特定方法。这使它在训练神经网络中测量这种误差时非常快。但是,该算法也有一些缺点。缺点之一是它不能应用于诸如均方根误差或交叉熵误差函数。此外,它与正则项不兼容。最后,对于非常大的数据集和神经网络,Jacobian矩阵会变得非常大,因此需要的内存也非常大。因此,当数据集和/或神经网络非常大时,j2直播,不推荐使用Levenberg-Marquardt算法。 内存和速度比较 下图比较了本文中讨论的训练算法的计算速度和存储要求。可以看到,最慢的训练算法是梯度下降法,但它需要的内存最小。相反,最快的是Levenberg-Marquardt算法,但需要的内存也最大。比较好的折衷可能是拟牛顿法。
总而言之,如果我们的神经网络有成千上万的参数,我们可以使用梯度下降法或共轭梯度法,以节省内存。如果我们要训练的神经网络只有几千个样本和几百个参数,最好的选择可能是Levenberg-Marquardt算法。其余情况下,可以选择拟牛顿法。 (责任编辑:本港台直播) |