梯度下降算法求解一般函数最小值

梯度下降算法python实现

梯度下降算法

梯度下降算法(Gradient Descent Optimization)是一种神经网络模型训练最常用的优化算法。可以用于求出一般函数f(x)在取得最小值时,x的取值。
##算法原理:
以负梯度的方向来决定每次迭代时x的变化方向,就能够使得每次迭代后,目标函数的值减小。
例如:
f(x)=x^2-4x-5,
f(x)的导数:f ’ (x)=2x-4,
▽f(x)=f ’ (x)=2x-4
可以用数学方法令导数2x-4=0求得x=2,即x=2时函数取得最小值。那如何通过梯度下降算法求得呢?

梯度下降算法公式可写为

xi=xi-1-α*▽f(xi-1)

假设从x=0处开始,梯度▽f(0)=f ’ (0)=-4,则从梯度的相反方向即正方向进行迭代。
在机器学习中,称α为学习速率。

python代码实现:

# 梯度下降算法求解f(x)=x^2-4x-5的最小值
def gradient(x):  # 计算x位置的梯度
    return 2.0*x-4  # 函数f(x)=x^2-4x-5的梯度


def gradient_descent():  # 梯度下降的过程中,函数返回迭代完成后,f(x)取得最小值时,x的值
    x = 1.0  # 从位置0开始迭代
    iteration_num = 8000  # 迭代次数
    alpha = 0.001  # 迭代速率
    for i in range(0, iteration_num):
        print("%d iteration x=%1f gradient(x)=%1f" % (i, x, gradient(x)))
        x = x-alpha*gradient(x)
    return x


if __name__ == '__main__':
    gradient_descent()

文章内容参考 动画学编程。

你可能感兴趣的:(算法,python,机器学习)