机器学习!十大优化算法!!

Hello,大家好~

今天咱们拿出来比较重要的一块和大家分享,那就是机器学习中的优化算法。

优化算法在机器学习中至关重要,它们决定了模型参数的更新方式,直接影响着模型的收敛速度和性能表现。选择合适的优化算法可以加快模型的训练速度、提高模型的准确性,并且对于处理大规模数据集和复杂模型具有重要意义。

今天涉及到内容包括以下:

  • 梯度下降算法
  • 动量梯度下降
  • Nesterov加速梯度
  • AdaGrad
  • RMSProp
  • Adam
  • AdaDelta
  • Nadam
  • L-BFGS
  • CMA-ES

梯度下降算法(Gradient Descent)

原理:梯度下降算法通过迭代地调整模型参数,以使损失函数逐步减小。每一步调整的方向是当前点的梯度负方向,调整的步长由学习率决定。

公式

其中,是参数,是学习率,是损失函数,是梯度。

核心代码

def gradient_descent(X, y, theta, alpha, num_iters):
    m = len(y)
    for i in range(num_iters):
        gradient = X.T @ (X @ theta - y) / m
        theta = theta - alpha * gradient
    return theta

动量梯度下降(Gradient Descent with Momentum)

原理:在梯度下降的基础上加入动量项,使得优化路径上的振荡减小,加速收敛。

公式

其中,是动量,是动量衰减因子。

核心代码

def momentum_gradient_descent(X, y, theta, alpha, beta, num_iters):
    m = len(y)
    v = np.zeros_like(theta)
    for i in range(num_iters):
        gradient = X.T @ (X @ theta - y) / m
        v = beta * v + (1 - beta) * gradient
        theta = theta - alpha * v
    return theta

Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)

原理:在动量梯度下降的基础上,提前计算未来位置的梯度,提高收敛速度。

公式

核心代码

def nesterov_accelerated_gradient(X, y, theta, alpha, beta, num_iters):
    m = len(y)
    v = np.zeros_like(theta)
    for i in range(num_iters):
        temp_theta = theta - alpha * beta * v
        gradient = X.T @ (X @ temp_theta - y) / m
        v = beta * v + (1 - beta) * gradient
        theta = theta - alpha * v
    return theta

AdaGrad(Adaptive Gradient Algorithm)

原理:根据每个参数的历史梯度自适应地调整学习率,适合处理稀疏数据。

公式

其中,是梯度的累计平方,是平滑项,防止除零。

核心代码

def adagrad(X, y, theta, alpha, num_iters, epsilon=1e-8):
    m = len(y)
    G = np.zeros_like(theta)
    for i in range(num_iters):
        gradient = X.T @ (X @ theta - y) / m
        G += gradient ** 2
        theta = theta - alpha / (np.sqrt(G + epsilon)) * gradient
    return theta

RMSProp(Root Mean Square Propagation)

原理:改进了AdaGrad,通过使用梯度的指数加权移动平均值来调整学习率。

公式

核心代码

def rmsprop(X, y, theta, alpha, beta, num_iters, epsilon=1e-8):
    m = len(y)
    E_g2 = np.zeros_like(theta)
    for i in range(num_iters):
        gradient = X.T @ (X @ theta - y) / m
        E_g2 = beta * E_g2 + (1 - beta) * gradient ** 2
        theta = theta - alpha / (np.sqrt(E_g2 + epsilon)) * gradient
    return theta

Adam(Adaptive Moment Estimation)

原理:结合了动量和RMSProp的优点,使用梯度的动量估计和平方梯度的加权平均来调整学习率。

公式

核心代码

def adam(X, y, theta, alpha, beta1, beta2, num_iters, epsilon=1e-8):
    m = len(y)
    m_t = np.zeros_like(theta)
    v_t = np.zeros_like(theta)
    for t in range(1, num_iters + 1):
        gradient = X.T @ (X @ theta - y) / m
        m_t = beta1 * m_t + (1 - beta1) * gradient
        v_t = beta2 * v_t + (1 - beta2) * gradient ** 2
        m_t_hat = m_t / (1 - beta1 ** t)
        v_t_hat = v_t / (1 - beta2 ** t)
        theta = theta - alpha * m_t_hat / (np.sqrt(v_t_hat) + epsilon)
    return theta

AdaDelta

原理:对AdaGrad进行改进,克服了其学习率不断下降的问题,通过引入一个基于梯度的指数加权移动平均值来调整步长。

公式

核心代码

def adadelta(X, y, theta, rho, num_iters, epsilon=1e-8):
    m = len(y)
    E_g2 = np.zeros_like(theta)
    E_delta_theta2 = np.zeros_like(theta)
    for i in range(num_iters):
        gradient = X.T @ (X @ theta - y) / m
        E_g2 = rho * E_g2 + (1 - rho) * gradient ** 2
        delta_theta = - (np.sqrt(E_delta_theta2 + epsilon) / np.sqrt(E_g2 + epsilon)) * gradient
        theta = theta + delta_theta
        E_delta_theta2 = rho * E_delta_theta2 + (1 - rho) * delta_theta ** 2
    return theta

Nadam(Nesterov-accelerated Adaptive Moment Estimation)

原理:结合了Nesterov加速和Adam算法的优点,通过提前计算未来位置的梯度和动量估计来加速收敛。

公式

核心代码

def nadam(X, y, theta, alpha, beta1, beta2, num_iters, epsilon=1e-8):
    m = len(y)
    m_t = np.zeros_like(theta)
    v_t = np.zeros_like(theta)
    for t in range(1, num_iters + 1):
        gradient = X.T @ (X @ theta - y) / m
        m_t = beta1 * m_t + (1 - beta1) * gradient
        v_t = beta2 * v_t + (1 - beta2) * gradient ** 2
        m_t_hat = m_t / (1 - beta1 ** t)
        v_t_hat = v_t / (1 - beta2 ** t)
        theta = theta - alpha * ((beta1 * m_t_hat + (1 - beta1) * gradient / (1 - beta1 ** t)) / (np.sqrt(v_t_hat) + epsilon))
    return theta

L-BFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)

原理:一种拟牛顿法,适用于中小型数据集上的高维优化问题,使用历史梯度和参数更新信息来构建近似Hessian矩阵。涉及复杂的矩阵操作,使用历史梯度和参数更新信息来更新参数。

核心代码

from scipy.optimize import fmin_l_bfgs_b

def lbfgs(X, y, theta):
    def loss_and_grad(theta):
        loss = np.sum((X @ theta - y) ** 2) / (2 * len(y))
        gradient = X.T @ (X @ theta - y) / len(y)
        return loss, gradient

    theta, _, _ = fmin_l_bfgs_b(loss_and_grad, theta)
    return theta

CMA-ES(Covariance Matrix Adaptation Evolution Strategy)

原理:一种进化策略优化算法,适用于全局优化和非凸优化问题,通过更新协方差矩阵来调整搜索策略。基于进化策略的迭代更新,涉及种群生成、选择、变异和协方差矩阵更新等。

核心代码

import cma

def cma_es(X, y, theta):
    def loss(theta):
        return np.sum((X @ theta - y) ** 2) / (2 * len(y))

    es = cma.CMAEvolutionStrategy(theta, 0.5)
    es.optimize(loss)
    return es.result.xbest

这些代码示例为核心实现,实际应用中可能需要进一步调整和优化。

最后

最近准备了,完整的机器学习小册,免费领取~
机器学习!十大优化算法!!图1
领取:备注「算法小册」即可~
机器学习!十大优化算法!!图2
扫码如有问题,记得添加微信号:xiaobai_ml012

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
机器学习
more
自动驾驶汽车机器学习安全实用解决方案
知乎热议:女硕士说,机器学习已死
2025年中国机器学习平台行业现状及竞争格局分析,竞争格局基本成型,头部效应明显「图」
知乎热议:机器学习已死
彻底改变芯片制造方式!世界首创成果:用量子机器学习制造芯片!
结合机器学习和基于规则算法的安全框架
分支动态丨第二十届中国机器学习会议(CCML 2025)在山西榆次召开
【AI】机器学习十大经典算法详解:从“数据+算法”到精准模型构建
J.P. Morgan机器学习卓越中心高管亲述,华尔街AI实战心法
4小时喜提专属 ChatGPT、卡帕西又整活!自曝Agent帮倒忙、手搓八千行代码,网友:跑完就当上机器学习工程师
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号