求最优值,梯度下降算法 or 偏导等于0 ?

不论是机器学习中计算最小代价函数,还是深度学习中求损失函数的最小值,本质上都是求解目标函数的最优值(最大或最小值)。

此时,主流方法还是使用梯度下降算法(或上升)进行逐步迭代直到收敛(或接近收敛)。那为什么不直接对损失函数求偏导后,令偏导为0,求出最优解呢?比较典型的如,线性回归问题中采用最小二乘法,求得的解析解如下:

θ = ( X T X ) − 1 X T Y \theta=(X^TX)^{-1}X^TY θ=(XTX)1XTY

通过查找资料,楼主认为主要原因如下:

  • 偏导为0的点不一定是局部极值点
    对于多维函数,偏导为0的点并非是局部极值。高等数学里有提到,偏导为零是该点为极值点的必要不充分条件,所以偏导为0的点不一定是极值。当损失函数为凸函数时,偏导等于0的位置即对应全局极值点,即最优解,但这种情况只占极少数。

  • 解析解计算过于复杂
    对于多元函数,由于上一点,仅使用一阶导是无法判别极值点的。此时,需要引入高阶导。多元函数的高阶偏导计算十分复杂,一方面,高级偏导的组合数随着参数量和求导阶数的增长呈指数级增长;另一方面,高维导数(如二维导数Hessian矩阵)的计算相当耗时
    与此同时,就算计算得到了解析解,如上面提到的线性回归问题,其带入的计算量也是难以承受的。首先,公式中设计到了求逆操作,该操作对数据要求较高;其次,矩阵求逆操作对计算资源和时间的消耗十分巨大。因此,实际实现时,线性回归采用的仍然是逐步拟合求解。

  • 求解需要使用全量数据
    当数据量极大时,将数据全部带入计算不切实际。而梯度下降支持对数据分批处理。

鉴于以上因素,即使能直接计算得到解析解,大家还是倾向于用梯度下降逐步拟合。

猜你喜欢

转载自blog.csdn.net/SkullSky/article/details/106364622