人工智能优化算法-梯度下降法

版权声明:转载请注明出处。 https://blog.csdn.net/Xin_101/article/details/82670485

1 分类

  • 牛顿法(Newton‘s method)
  • 最小二乘法(Least Squares method)
  • 梯度下降法(Gradients Descent)

2 方向导数与梯度

2.1 方向导数

若函数f(x,y,z)在点P(x,y,z)处沿方向l(方向角为α、β、γ),方向导数:
方向导数
证明
证明

2.2 梯度

2.2.1 定义

向量G称为函数f(P)在点P处的梯度(gradient),记为grad f。
梯度
函数的方向导数为梯度在该方向上的投影。

2.2.2 几何意义

函数在一点的梯度垂直于该点等值面或等值线,指向函数增大的方向。
梯度方向:f变化率最大的方向;
梯度模:f的最大变化率的值;

2.3 梯度下降法

梯度下降法又称最速下降法,函数f(x)在某点xk的梯度▽f(xk)的一个向量,其方向是f(x)增长最快的方向(变化率最大的方向),负梯度方向是f(x)减少最快的方向。
梯度下降法中,求函数极大值时,沿着梯度方向走,可最快达到极大值点;反之,沿着负梯度方向,可最快到达极小值点。
求函数f(x)极小值,可任意选初始点x0,从x0出发沿着负梯度方向搜索,可使f(x)下降最快。

梯度下降
图2.1 梯度下降法图示
迭代过程

3 基于GradientDescent神经网络

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#模拟数据集
x_data = np.random.rand(200).astype(np.float32)
#目标函数:权重=0.5,偏置=0.8
y_data = x_data*0.5+0.8

#权重与偏置
weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
biases = tf.Variable(tf.zeros([1]))
#训练生成函数
y = weights*x_data+biases

#损失函数
loss = tf.reduce_mean(tf.square(y-y_data))

#梯度下降法优化器
optimizer = tf.train.GradientDescentOptimizer(0.5)
#训练
train = optimizer.minimize(loss)

#新建会话
with tf.Session() as sess:
    #初始化变量
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    for step in range(301):
        sess.run(train)
        if step % 10 == 0:
#每训练20步,输出一次权重与偏置结果         print(step,sess.run(weights),sess.run(biases))
#绘制结果图像
    plt.title("Train Results")
    plt.xlabel('x-axis')
    plt.xlabel('y-axis')
    plt.scatter(x_data,y_data,c='blue',marker='+',label='source data')
#绘制数据需要list,y为numpy.ndarray,使用tolist()转换    plt.plot(x_data,sess.run(y).tolist(),c='red',label='train data')
    plt.grid(True)
    plt.legend(loc='best')
    plt.show()

结果
图3.1 训练结果

从图3.1中,可看出计算的权重为0.4999,偏置为0.8000,从训练100步开始,与目标权重0.5和偏置0.8极为接近,神经网络学习成功。

输出结果
图3.2 训练结果图


猜你喜欢

转载自blog.csdn.net/Xin_101/article/details/82670485
今日推荐