当前位置: 首页 > news >正文

Python和MATLAB梯度下降导图

🎯要点

  1. 寻找局部最小值
  2. 普通最小二乘法和随机梯度下降的动量
  3. 线性回归
  4. 媒体广告销售
  5. 光学字符识别和最小化均方误差
  6. 男女医疗费用
  7. 最快速下降方向函数优化
  8. 等高线图可视化
  9. 共轭梯度下降
  10. 可视化损失函数、动量、涅斯特洛夫动量、权衰减
  11. 量化不确定性拓扑结构算法
  12. 分类中权重归一化算法提升预测效果
    在这里插入图片描述

Python梯度优化器

我们将使用下方程描述的均方误差作为目标函数,将使用这些优化算法来最小化损失函数。
f ( m , b ) = 1 n ∑ i = 1 n ( y i − ( m x i + b ) ) 2 f(m, b)=\frac{1}{n} \sum_{i=1}^n\left(y_i-\left(m x_i+b\right)\right)^2 f(m,b)=n1i=1n(yi(mxi+b))2
在梯度下降中,计算目标函数(L)相对于参数 theta(θ)的梯度,然后沿目标函数梯度的反方向更新参数。学习率 α 决定了达到局部最小值所需采取的步长。
θ j ← θ j − α ∂ ∂ θ j J ( θ ) \theta_j \leftarrow \theta_j-\alpha \frac{\partial}{\partial \theta_j} J(\theta) θjθjαθjJ(θ)

根据用于计算权重更新梯度的数据量,我们有不同的变体,我们将详细讨论这些变体。在批量梯度下降中,对于每个时期,我们计算整个数据集的目标函数相对于参数的梯度。因此,参数的更新每时期发生一次。批量梯度下降也称为 普通梯度下降。

对于我们的均方误差目标函数,m 和 b 的梯度如下所示。
∂ f ∂ m = 1 n ∑ i = 1 n − 2 x i ( y i − ( m x i + b ) ) \frac{\partial f}{\partial m}=\frac{1}{n} \sum_{i=1}^n-2 x_i\left(y_i-\left(m x_i+b\right)\right) mf=n1i=1n2xi(yi(mxi+b))

∂ f ∂ b = 1 n ∑ i = 1 n − 2 ( y i − ( m x i + b ) ) \frac{\partial f}{\partial b}=\frac{1}{n} \sum_{i=1}^n-2\left(y_i-\left(m x_i+b\right)\right) bf=n1i=1n2(yi(mxi+b))

import numpy as np
from sklearn.metrics import mean_squared_error
def batch_gradient_descent(X, y, lr, epochs): m, b = 0.33, 0.48 log, mse = [], [] N = len(X) 
for _ in range(epochs):               f = y - (m*X + b)   m -= lr * (-2 * X.dot(f).sum() / N)b -= lr * (-2 * f.sum() / N)
log.append((m, b))mse.append(mean_squared_error(y, (m*X + b)))        return m, b, log, mse

在随机梯度下降中,从一个时期的整个集合中随机选择一个样本。计算该特定的梯度并更新样本和权重。

import numpy as np
from sklearn.metrics import mean_squared_error
def SGD(X, y, lr, epochs):m, b = 0.5, 0.5  log, mse = [], [] 
for _ in range(epochs):indexes = np.random.randint(0, len(X)) Xs = np.take(X, indexes)ys = np.take(y, indexes)N = len(X)f = ys - (m*Xs + b)m -= lr * (-2 * Xs*(f).sum() / N)b -= lr * (-2 * f.sum() / N)
log.append((m, b))mse.append(mean_squared_error(y, m*X+b))
return m, b, log, mse

在小批量梯度下降中,更新是针对小批量样本进行的。在我们的示例中,我们有 100 个样本。因此,如果批量大小为 10,则我们在 10 个时期内有 100 次更新。小批量梯度下降是训练神经网络时的首选算法。

def minibatchgd(X, y, lr, epochs, batch_size):m, b = 0.5, 0.5 log, mse = [], [] for _ in range(epochs):total_len = len(X)for i in range(0, total_len, batch_size):Xs = X[i:i+batch_size]ys = y[i:i+batch_size]N = len(Xs)f = ys - (m*Xs + b)m -= lr * (-2 * Xs.dot(f).sum() / N)b -= lr * (-2 * f.sum() / N)log.append((m, b))mse.append(mean_squared_error(y, m*X+b))
return m, b, log, mse

动量和涅斯特罗夫动量
V t = β V t − 1 + ( 1 − β ) ∇ w L ( W , X , y ) W = W − α V t \begin{gathered} V_t=\beta V_{t-1}+(1-\beta) \nabla_w L(W, X, y) \\ W=W-\alpha V_t \end{gathered} Vt=βVt1+(1β)wL(W,X,y)W=WαVt
如果学习率按 ( 1 − β ) (1-\beta) (1β) 缩放,则上式可以写为
V t = β V t − 1 + α ∇ w L ( W , X , y ) W = W − V t \begin{gathered} V_t=\beta V_{t-1}+\alpha \nabla_w L(W, X, y) \\ W=W-V_t \end{gathered} Vt=βVt1+αwL(W,X,y)W=WVt
基本上,我们正在计算 W 导数的移动平均线。这有助于减少振荡。

👉更新:亚图跨际


http://www.mrgr.cn/news/9652.html

相关文章:

  • 【数据结构-前缀异或和】力扣1177. 构建回文串检测
  • Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[工具版]
  • ts 自动化编译
  • 【脏数据 bug 解决】ValueError: mean must have 1 elements if it is an iterable, got 3
  • 第134天:内网安全-横向移动NTLM-Relay重放Responder中继攻击LdapEws
  • 示波器输出的csv文件如何转换为频谱图及其excel表格(频率与幅值)
  • msxml*.dll 错误 ‘80072f7d‘ 安全频道支持出错 解决方案
  • MySQL 用户与权限管理详解
  • LVS+Keepalived集群(主、备)
  • 您的多个密码是否被泄露有没有解决方法?
  • 《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-04-SOA设计
  • XML CSS:结构和样式的完美结合
  • Leetcode-day28-贪心算法
  • iPhone 16系列详细参数曝光
  • 【代码随想录训练营第42期 Day37打卡 - 动态规划Part5 - 完全背包问题
  • HDU1753——大明A+B,HDU1115——Lifting the Stone,HDU1140——War on Weather
  • 【单片机】PIC16F1719 单片机,UART,串口发送
  • 汽车冷却液温度传感器
  • “我王多鱼投了!”疯狂烧钱的AI大模型公司如何赚钱?
  • 【CSS】使用 CSS 自定义属性(变量)-- var()