算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)

梯度下降算法 以模型 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
为例,梯度下降算法就是一种训练参数 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
到最佳值的一种算法,算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
每次变化的趋势由 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
(学习率:一种超参数,由人手动设置调节),以及算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
的导数来决定,具体公式如下:
算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片

注: 此时算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
函数是指所有的损失函数之和
针对模型 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
的梯度下降算法的公式化简如下:
算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片

根据化简之后的公式,就可以编写代码,对 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
进行训练,具体代码如下:

import numpy as np import matplotlib.pyplot as pltx_data = https://www.it610.com/article/[1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0]w = 1.0def forward(x): return x * wdef 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)print('训练前的预测', 4, forward(4))cost_list = [] epoch_list = [] # 开始训练(100次训练) for epoch in range(150): epoch_list.append(epoch) cost_val = cost(x_data, y_data) cost_list.append(cost_val) grad_val = gradient(x_data, y_data) w -= 0.1 * grad_val print('Epoch:', epoch, 'w=', w, 'loss=', cost_val)print('训练之后的预测', 4, forward(4))# 画图plt.plot(epoch_list, cost_list) plt.ylabel('Cost') plt.xlabel('Epoch') plt.show()

运行截图如图所示:
算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片

Epoch是训练次数,Cost是误差,可以看到随着训练次数的增加,误差越来越小,趋近于0.
随机梯度下降算法 随机梯度下降算法与梯度下降算法的不同之处在于,随机梯度下降算法不再计算损失函数之和的导数,而是随机选取任一随机函数计算导数,随机的决定 算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片
下次的变化趋势,具体公式变化如图:
算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片

具体代码如下:
import numpy as np import matplotlib.pyplot as pltx_data = https://www.it610.com/article/[1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0]w = 1.0def forward(x): return x * wdef lost(x, y): y_pred = forward(x) return (y_pred - y) ** 2def gradient(x, y): return 2 * x * (x * w - y)print('训练前的预测', 4, forward(4))epoch_list=[] w_list=[] # 开始训练(100次训练) for epoch in range(100): for x, y in zip(x_data, y_data): epoch_list.append(epoch) grad = gradient(x, y) w -= 0.01 * grad w_list.append(w) l = lost(x, y) print('Epoch:', epoch, 'w=', w, 'loss=', l)print('训练之后的预测', 4, forward(4))# 画图 plt.plot(w_list, epoch_list) plt.ylabel('Loss') plt.xlabel('Epoch') plt.show()

运行截图如图所示:
算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
文章图片






【算法|深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)】

    推荐阅读