Python和MATLAB梯度下降导图

74 篇文章 5 订阅
21 篇文章 0 订阅

🎯要点

  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 导数的移动平均线。这有助于减少振荡。

👉更新:亚图跨际

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LSTM(长短时记忆)神经网络是一种特殊的循环神经网络,用于处理具有时间序列特征的数据。它通过引入记忆单元和门机制解决了传统循环神经网络的长期依赖问题,使得其在处理序列数据时具有更好的效果。 PythonMATLAB是两种常用的编程语言,都可以用于实现LSTM神经网络。Python具有丰富的机器学习和深度学习库,如TensorFlow、Keras和PyTorch,这些库提供了易于使用且高效的工具来构建和训练LSTM模型。Python还拥有庞大的开源社区,可以找到大量的教程和示例代码,便于学习和扩展。 相比之下,MATLAB在机器学习领域的库和工具相对较少,但仍可以使用MATLAB自带的深度学习工具箱进行LSTM神经网络的实现。MATLAB提供了直观且易于使用的界面,尤其适合初学者入门。MATLAB还具有广泛的数据处理和可视化能力,可以方便地进行特征工程和结果分析。 然而,PythonMATLAB相比,其生态系统更加丰富,支持多种任务和应用场景。Python的深度学习库也更加强大,可用于实现复杂的LSTM架构,进行模型调整和优化。此外,Python算法实现、大规模数据处理和分布式计算等方面也占据优势。 总结而言,PythonMATLAB都可以用于实现LSTM神经网络,但Python在深度学习领域的库和工具更加强大和丰富,适用于更多的应用场景。而MATLAB在界面友好性和数据处理方面较为突出,适合初学者或需要进行辅助分析和可视化的任务。使用哪种语言主要取决于个人的需求和偏好。 ### 回答2: LSTM(长短期记忆神经网络)是一种用于处理序列数据的深度学习模型,它在处理时间序列数据方面表现出色。下面分别介绍LSTM在PythonMatlab中的实现。 在Python中,可以使用深度学习框架TensorFlow或PyTorch实现LSTM神经网络。这两个框架提供了高级的API,使得设计、训练和应用LSTM模型变得相对简单。首先,可以使用框架中提供的API创建LSTM层,指定隐藏单元数量、输入维度和输出维度等参数。然后,将数据输入到LSTM层进行模型训练,可以使用梯度下降等优化算法来更新网络参数。在训练完成后,可以使用训练好的LSTM模型进行序列数据的预测、分类或生成等任务。 Matlab也提供了相应的工具来实现LSTM神经网络模型。可以使用Deep Learning Toolbox中的LSTM层来构建和训练模型。首先,可以使用网络设计工具创建LSTM网络结构,指定层数、隐藏单元数量等参数。然后,使用训练数据对LSTM网络进行训练,可以使用反向传播算法等优化算法来更新网络参数。训练完成后,可以使用训练好的LSTM模型进行预测、分类或生成等任务。 无论是在Python还是Matlab中实现LSTM神经网络,都需要准备好训练数据和测试数据,并设置好网络参数,以获得较好的模型性能。此外,还可以对网络结构进行调整和优化,比如添加其他层或正则化方法,以提高模型的泛化能力。 总之,LSTM神经网络在PythonMatlab中的实现方法都比较成熟和易用,可以根据自己的需求和熟悉程度选择相应的工具和框架进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值