从零理解梯度下降:原理、偏导与代码实现

张开发
2026/6/7 19:10:32 15 分钟阅读
从零理解梯度下降:原理、偏导与代码实现
ai大模型梯度下降-小白-入门-代码讲解梯度下降就是这两张图底层原理如果看不明白就背诵这两个公式就行了。梯度下降的作用就是一个公式类比数学公式是解决寻找最小误差的数学题目。深度理解1.图片的公式从左到右边从下到上第一张图公式对应的就是1左2右3下4下右2.第一个公式是计算损失函数的平均值也就是我们设置一个期望函数比如是 y wx b w和b都是自己设定的一个数这个算法的精妙就是可以不断自我改变寻找最合适的w和b然后利用已的 y_i 和期望 y 相减再平方除以总共个数就得到一个平均的损失函数。3.第二个公式计算将期望函数 y 替换成 wx b 这个有什么用呢这个是为了方便我们取求对应的偏导因为我的要求的是最佳 w 和 b 所以我们要分别对他们求偏导。4.第三个函数就是第二个函数对 w 求导b 看成一个常数。5.第四个函数就是第二个函数对 b 求导w 看成一个常数。6.第二张图的公式是梯度算法的核心前面我们假设了 w 和 bw_new w_old - n*w的偏导这个n是学习率一般是设置0.01作用是减小步长。如此反复我们就能招待最合适的 w_new因为w的偏导总有一刻是0的那么偏导等于0就意味着是没用变化了计算局部的最值。总结大模型的算法最本质的要求就是再一堆数据集中找到一个最合适的函数转化为数学要求就是求一个函数的 w 权重和 b 误差x和y是知道的。解题的思路就是我们先假设一个 w 权重和 b 误差这样我们就会得到自己定义的一个函数和真实的 y_true 的差别相减平方保证都是正数除以个数就得到一个平均误差值。这里我们就得到一个 w 和 b 的函数我们要如何算出最佳的 w 和 b 呢在一维就是求导看斜率求最值在二维我们就是分别求偏导然后组合为向量对 w 求偏导对 b 求偏导就得到了一个有方向的向量在大模型中偏导一般都是正数的所以我们要降低他就用学习率 n(lr) * 偏导 再用旧的减去变化率如此反复就得到了我们的最值。好的我们理解了上面的公式解题过程写代码的思路如下先写出计算损失函数的方法mse分别写出w的偏导和b的偏导函数方法利用循环计算w和b的梯度下降公式画出拟合图通过图像进行判断直接代码展示吧# 导入对应的库importnumpyasnpimportmatplotlib.pyplotasplt# 生成对应的一组数据注意了这里是方便学习所以是名牌函数在写代码的时候我们是黑盒继续写的# 固定随机种子每次运行数据都一样np.random.seed(10)# 生成50个样本n50xnp.linspace(0,10,n)# x从0到10均匀分布# 真实线性关系y 2 1.8*x# 加一点点噪声更真实但不影响线性y21.8*xnp.random.normal(0,0.3,n)# 定义初始值w1b0lr0.01# 学习率# 定义失函数的方法msedefmse(x,y,b,w):y_forwardw*xbreturnnp.mean((y_forward-y)**2)# 定义偏导函数wdefw_derivative(x,y,w,b):y_forwardw*xbreturn2*(np.mean((y_forward-y)*x))# 定义偏导函数bdefb_derivative(x,y,w,b):y_forwardw*xbreturn2*(np.mean(y_forward-y))# 计入损失值loss_list[]# 写循环梯度下降公式# 定义循环次数epochs2000forepochsinrange(epochs):# 对 w 的偏导,然后梯度跟新ww-lr*w_derivative(x,y,w,b)# 对 b 的偏导,然后梯度跟新bb-lr*b_derivative(x,y,w,b)# 计算当前损失lmse(x,y,b,w)loss_list.append(l)# 记录数据ifepochs%2000:print(fepoch{epochs}, mse{l:.6f}, w{w:.6f}, b{b:.6f})print(最终b为fb {b:.6f})print(最终w为fw {w:.6f})# 画出拟合图plt.scatter(x,y)plt.plot(x,w*xb)plt.show()# 画出损失值plt.plot(loss_list)plt.show()

更多文章