用梯度下降算法求解函数最小值
梯度下降是求解神经网络的核心算法。神经网络的优化算法也是在梯度下降算法那基础上的局部改良与优化。
梯度下降算法通过求解神经网络损失函数的梯度,实现对损失函数最小值的逼近,间接实现最优网络模型的求解和逼近。
下面举一个列子,演示梯度下降算法求解函数最小值的过程。
首先顶一个函数J(w),表示损失函数。
def J(w):
return w ** 2 - 2 * w +1
函数的导数(梯度)计算:
def gradient(w): # 梯度函数(导数)
return 2 * w – 2
# 跟踪模拟梯度下降
w_list = [] # 记录w的变化历程
J_list = [] # 对应的损失值变化过程
w = 9 # 随机给w一个初值
alpha = 0.1 # 学习率
# 开始梯度下降,向最优解靠近
for i in range(50): #下降50歩,这个数字可调整
w_list.append(w) #保存当前的w
J_list.append(J(w)) # 保存当前的损失值
w = w - alpha * gradient(w) # 梯度下降一步,迭代一次
#绘图显示梯度下降效果(过程)
import matplotlib.pyplot as plt
import numpy as np
#先画原来的损失函数曲线
w = np.arange(-9,11,1)
J_w = J(w)
plt.figure(figsize=(12,6))
plt.plot(w, J_w)
plt.text(-7,80,'$J(w)=w^{2}-2w+1$',fontsize=15)
plt.xticks(range(-11,11,1));
#绘制刚才的梯度下降过程
plt.plot(w_list, J_list, 'ro--')
plt.show()
绘制的梯度下降过程如图所示。

print(f'模型的最优解是:{w_list[-1]},对应的损失值是:{J_list[-1]}')
显示结果如下:
模型的最优解是:1.0001427247692707,对应的损失值是:2.03703598433691e-08
很有意思的一个结果。调整梯度下降的相关参数,可以观察到更多有趣的结果。当然,用梯度下降求解如此简单的函数,有点儿“大材小用了”。不过,梯度下降用于神经网络求解,则再好不过了。