刘二大人深度学习实践笔记--梯度下降算法
目录梯度下降算法GD代码随机梯度下降算法 SGD代码批量梯度下降算法MBGD在寻找loss最低的权重时之前使用穷举法但是如果模型中有多个需要确定的参数会导致需要列举的点过多我们把找到合适的求函数最小值的方法叫做优化问题下面介绍梯度下降算法梯度下降算法GD梯度目标函数对权重求导梯度的正方向是上升的负方向是下降的更新方向取梯度的负方向乘以学习率a一般a要取得比较小否则每次调整的过多会无法收敛应用了贪心的算法对于非凸函数不一定能得到全局最优解但是能得到局部的最优解深度学习的目标函数中不一定有很多局部最优点所以经常使用梯度下降算法但是会存在鞍点鞍点这个点的梯度值为0如果陷入鞍点就无法移动无法迭代了代码import numpy as np import matplotlib.pyplot as plt #对数据集保存x为输入y为输出对应位置为一组 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # 初始猜测权重 w 1.0 def forward(x): return x * w # 计算mse def cost(xs,ys): cost 0 for x, y in zip(xs, ys): y_pred forward(x) cost (y_pred - y)**2 return cost/len(xs) # 计算梯度 def gradient(xs, ys): grad 0 for x, y in zip(xs, ys): grad 2*x*(x*w - y) return grad / len(xs) w 1.0 w_list [] cost_list [] print(Predict before training, 4, forward(4)) for epoch in range(100): cost_val cost(x_data, y_data) grad_val gradient(x_data, y_data) #计算梯度 cost_list.append(cost_val) w - 0.01 * grad_val #更新 print(Epoch:,epoch, w, w, loss, cost_val) print(Predict after training, 4, forward(4)) plt.plot(np.arange(1, 101, 1), cost_list) plt.ylabel(cost) plt.xlabel(epoch) plt.show()在训练集上训练时以epoch为横坐标mse为纵坐标正常的函数图像应该是逐渐趋于0收敛的类似于如果最后反而上升了说明训练失败了结果发散了可能是因为学习率a取得太大了随机梯度下降算法 SGD梯度下降算法是将所有样本的损失取平均值作为权重更新的依据随机梯度下降从N个数据中随机选一个的损失作为权重更新的依据引入了一个随机噪声这样即使陷入了鞍点也很可能脱离鞍点代码import numpy as np import matplotlib.pyplot as plt #对数据集保存x为输入y为输出对应位置为一组 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # 初始猜测权重 w 1.0 def forward(x): return x * w # 计算mse,修改为只计算单个样本而不是平均值 def loss(x,y): y_pred forward(x) return (y_pred - y)**2 # 计算梯度修改为只计算单个样本而不是平均值 def gradient(x, y): return 2*x*(x*w - y) w 1.0 cost_list [] print(Predict before training, 4, forward(4)) # 修改为在每个样本更新权重而不是每个轮次更新 for epoch in range(100): epoch_loss 0 for x, y in zip(x_data, y_data): grad gradient(x, y) w w - 0.01 * grad epoch_loss loss(x, y) print(Epoch:,epoch, w, w, epoch_loss, epoch_loss) cost_list.append(epoch_loss) print(Predict after training, 4, forward(4)) plt.plot(np.arange(1, 101, 1), cost_list) plt.ylabel(loss) plt.xlabel(epoch) plt.show()注意梯度下降算法GD中两个样本之间是可以并行的不相互影响因为w每个轮次才改变一次计算效率高但是可能陷入鞍点随机梯度下降算法SGD两个样本之间互相影响因为后面的样本使用的w受前面的改变计算效率低但是得到的最优点更好因此选取折中方案批量梯度下降算法MBGD批量梯度下降算法MBGD每个batch更新一次权重

相关新闻