梯度下降算法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时函数取得最小值。那如何通过梯度下降算法求得呢?
梯度下降算法公式可写为
假设从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()
文章内容参考 动画学编程。