[ML] 梯度下降算法

求解的问题: 无约束最优化问题.
基本方式: 迭代.

f ( x ) R n 上有一阶连续偏导数, 则要求解的最优化问题可以表示为: min x R n f ( x )

(1) 取初值 x ( 0 ) R n , 置k=0

(2) 算出 f ( x ( k ) )

(3) 算出 f ( x ) x ( k ) 这个点处的梯度 g k , 如果 g k 小于某个之前给定的阈值, 则停止迭代, 令 f ( x ) 的极小点 x = x ( k ) , 否则令 p k = g k , 求迭代步长 λ k 使得 f ( x ( k ) + λ k p k ) = min λ 0 f ( x ( k ) + λ p k ) .

(4) 更新x的值: x ( k + 1 ) = x ( k ) + λ k p k , 计算 f ( x ( k + 1 ) ) .
如果 | | f ( x ( k + 1 ) ) f ( x ( k ) ) | | | | x ( k + 1 ) x ( k ) | | 小于之前给定的阈值, 则停止迭代, x = x ( k ) .

(5) 否则, k=k+1, 返回(3)

备注: (1) 只有f(x)是凸函数时, 用梯度下降法得出的结果才是全局最优解. (2) 一般情况下, 梯度下降法的收敛速度未必是最快的.

猜你喜欢

转载自blog.csdn.net/pangtouyu_qy/article/details/79829763