GPa哪种算法有利?
如果仅考虑加速效果,那么当然是梯度下降法(包括其各种变形)最好了。 因为该方法在每次迭代中,只需要通过计算两个数的大小比较来得到下一个待更新参数,因而非常的快 但是,因为梯度下降法需要跟踪计算梯度和参数向量的方向,因此对初始参数非常敏感;对于多变量的问题,还需要计算雅可比矩阵的导数,从而使得该方法的实施相对复杂且效率较低。另外,当优化目标函数含有不可导点时,该方法将陷入局部极小,难以得到问题的全局最优解。 对于这些缺陷,可以通过自适应策略或者其他方法加以改进,但是这些都是属于技术层面的问题,本质上并不改变梯度下降法的原理和属性。 如果考虑计算的复杂度,那么最速下降法和牛顿法就远不及梯度下降法了——这两种方法都需要求解方程组或者矩阵的逆,代价都相当高。 不过,最速下降法由于不会陷入局部极小,因此在问题初值选取合适的情况下,能够找到问题的全局最优解;而牛顿法则是通过一次或多次内积计算来得到待更新参数,因此本身比梯度下降算法要高效一些。而且,如果在每次迭代中都引入合适的终止准则,那么牛顿法也能够做到计算上有效。
最速下降法和牛顿法都属于迭代优化算法,因此与梯度下降法一样,对于初始参数的选择也非常敏感。 如果考虑实用效果,那么就不得不考虑模型的判断情况。如果采用基于梯度的方法进行优化,除非能够保证问题为凸优化问题并且只有有限个解,否则将很难得到问题的精确解。在这种情况下,即使使用高效的非梯度算法,其搜索到的“最佳”解往往也不是真的在真实空间中最优的解。很多时候人们采用“差分法”来估计模型参数:首先假设模型正确,然后根据数据的误差大小来调整参数使模型适应数据。这是一种“先假定模型正确再修正模型”的正向思维方式。
另外一种思路是“先假定模型不正确然后再构造模型”的逆向思维方式,即先用观测数据构建一个模型,然后用这个模型去预测其他的数据以便进一步校正模型。这种思想常用的工具是维纳滤波(Wiener Filtering)。虽然维纳滤波是一种迭代算法,但由于其每一步的选择都是基于误差最小化,因此在一般情况下能实现计算上的有效。 除了上述两类方法之外,还有很多其他的优化方法。比如,对偶算法、期望最大算法等等,在此就不一一阐述了。