深入探讨梯度下降:优化机器学习的关键步骤(二)

简介: 深入探讨梯度下降:优化机器学习的关键步骤(二)

🍀引言

承接上篇,这篇主要有两个重点,一个是eta参数的调解;一个是在sklearn中实现梯度下降

梯度下降算法中,学习率(通常用符号η表示,也称为步长或学习速率)的选择非常重要,因为它直接影响了算法的性能和收敛速度。学习率控制了每次迭代中模型参数更新的幅度。以下是学习率(η)的重要性:

  • 收敛速度:学习率决定了模型在每次迭代中移动多远。如果学习率过大,模型可能会在参数空间中来回摇摆,导致不稳定的收敛或甚至发散。如果学习率过小,模型将收敛得很慢,需要更多的迭代次数才能达到最优解。因此,选择合适的学习率可以加速收敛速度。
  • 稳定性:过大的学习率可能会导致梯度下降算法不稳定,甚至无法收敛。过小的学习率可以使算法更加稳定,但可能需要更多的迭代次数才能达到最优解。因此,合适的学习率可以在稳定性和收敛速度之间取得平衡。
  • 避免局部最小值:选择不同的学习率可能会导致模型陷入不同的局部最小值。通过尝试不同的学习率,您可以更有可能找到全局最小值,而不是被困在局部最小值中。
  • 调优:学习率通常需要调优。您可以尝试不同的学习率值,并监视损失函数的收敛情况。通常,您可以使用学习率衰减策略,逐渐降低学习率以改善收敛性能。
  • 批量大小:学习率的选择也与批量大小有关。通常,小批量梯度下降(Mini-batch Gradient Descent)使用比大批量梯度下降更大的学习率,因为小批量可以提供更稳定的梯度估计。

总之,学习率是梯度下降算法中的关键超参数之一,它需要仔细选择和调整,以在训练过程中实现最佳性能和收敛性。不同的问题和数据集可能需要不同的学习率,因此在实践中,通常需要进行实验和调优来找到最佳的学习率值。


🍀eta参数的调节

在上代码前我们需要知道,如果eta的值过小会造成什么样的结果

反之如果过大呢

可见,eta过大过小都会影响效率,所以一个合适的eta对于寻找最优有着至关重要的作用


在上篇的学习中我们已经初步完成的代码,这篇我们将其封装一下

首先需要定义两个函数,一个用来返回thera的历史列表,一个则将其绘制出来

def gradient_descent(eta,initial_theta,epsilon = 1e-8):
    theta = initial_theta
    theta_history = [initial_theta]
    def dj(theta): 
        return 2*(theta-2.5) #  传入theta,求theta点对应的导数
    def j(theta):
        return (theta-2.5)**2-1  #  传入theta,获得目标函数的对应值
    while True:
        gradient = dj(theta)
        last_theta = theta
        theta = theta-gradient*eta 
        theta_history.append(theta)
        if np.abs(j(theta)-j(last_theta))<epsilon:
            break
    return theta_history
def plot_gradient(theta_history):
    plt.plot(plt_x,plt_y)
    plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
    plt.show()

其实就是上篇代码的整合罢了

之后我们需要进行简单的调参了,这里我们分别采用0.10.010.9,这三个参数进行调节

eta = 0.1
theta =0.0
plot_gradient(gradient_descent(eta,theta))
len(theta_history)

运行结果如下

eta = 0.01
theta =0.0
plot_gradient(gradient_descent(eta,theta))
len(theta_history)

运行结果如下

eta = 0.9
theta =0.0
plot_gradient(gradient_descent(eta,theta))
len(theta_history)

运行结果如下

这三张图与之前的提示很像吧,可见调参的重要性

如果我们将eta改为1.0呢,那么会发生什么

eta = 1.0
theta =0.0
plot_gradient(gradient_descent(eta,theta))
len(theta_history)

运行结果如下

那改为1.1呢

eta = 1.1
theta =0.0
plot_gradient(gradient_descent(eta,theta))
len(theta_history)

运行结果如下

我们从图可以清楚的看到,当eta为1.1的时候是嗷嗷增大的,这种情况我们需要采用异常处理来限制一下,避免报错,处理的方式是限制循环的最大值,且可以在expect中设置inf(正无穷)

def gradient_descent(eta,initial_theta,n_iters=1e3,epsilon = 1e-8):
    theta = initial_theta
    theta_history = [initial_theta]
    i_iter = 1
    def dj(theta):  
        try:
            return 2*(theta-2.5) #  传入theta,求theta点对应的导数
        except:
            return float('inf')
    def j(theta):
        return (theta-2.5)**2-1  #  传入theta,获得目标函数的对应值
    while i_iter<=n_iters:
        gradient = dj(theta)
        last_theta = theta
        theta = theta-gradient*eta 
        theta_history.append(theta)
        if np.abs(j(theta)-j(last_theta))<epsilon:
            break
        i_iter+=1
    return theta_history
def plot_gradient(theta_history):
    plt.plot(plt_x,plt_y)
    plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
    plt.show()

注意:inf表示正无穷大


🍀sklearn中的梯度下降

这里我们还是以波士顿房价为例子

首先导入需要的库

from sklearn.datasets import load_boston
from sklearn.linear_model import SGDRegressor

之后取一部分的数据

boston = load_boston()
X = boston.data
y = boston.target
X = X[y<50]
y = y[y<50]

然后进行数据归一化

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y)
std = StandardScaler()
std.fit(X_train)
X_train_std=std.transform(X_train)
X_test_std=std.transform(X_test)
sgd_reg = SGDRegressor()
sgd_reg.fit(X_train_std,y_train)

最后取得score

sgd_reg.score(X_test_std,y_test)

运行结果如下


挑战与创造都是很痛苦的,但是很充实。


相关文章
|
17天前
|
机器学习/深度学习 存储 人工智能
提升深度学习性能的利器—全面解析PAI-TorchAcc的优化技术与应用场景
在当今深度学习的快速发展中,模型训练和推理的效率变得尤为重要。为了应对计算需求不断增长的挑战,AI加速引擎应运而生。其中,PAI-TorchAcc作为一个新兴的加速引擎,旨在提升PyTorch框架下的计算性能。本文将详细介绍PAI-TorchAcc的基本概念、主要特性,并通过代码实例展示其性能优势。
17690 146
|
2天前
|
机器学习/深度学习 监控 API
基于云计算的机器学习模型部署与优化
【8月更文第17天】随着云计算技术的发展,越来越多的数据科学家和工程师开始使用云平台来部署和优化机器学习模型。本文将介绍如何在主要的云计算平台上部署机器学习模型,并讨论模型优化策略,如模型压缩、超参数调优以及分布式训练。
10 2
|
2天前
|
机器学习/深度学习 人工智能 算法
【人工智能】机器学习、分类问题和逻辑回归的基本概念、步骤、特点以及多分类问题的处理方法
机器学习是人工智能的一个核心分支,它专注于开发算法,使计算机系统能够自动地从数据中学习并改进其性能,而无需进行明确的编程。这些算法能够识别数据中的模式,并利用这些模式来做出预测或决策。机器学习的主要应用领域包括自然语言处理、计算机视觉、推荐系统、金融预测、医疗诊断等。
4 1
|
3天前
|
机器学习/深度学习 算法 Python
【绝技揭秘】Andrew Ng 机器学习课程第十周:解锁梯度下降的神秘力量,带你飞速征服数据山峰!
【8月更文挑战第16天】Andrew Ng 的机器学习课程是学习该领域的经典资源。第十周聚焦于优化梯度下降算法以提升效率。课程涵盖不同类型的梯度下降(批量、随机及小批量)及其应用场景,介绍如何选择合适的批量大小和学习率调整策略。还介绍了动量法、RMSProp 和 Adam 优化器等高级技巧,这些方法能有效加速收敛并改善模型性能。通过实践案例展示如何使用 Python 和 NumPy 实现小批量梯度下降。
|
5天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的模型优化策略
【8月更文挑战第14天】在机器学习领域,模型的优化是提升预测性能的关键步骤。本文将深入探讨几种有效的模型优化策略,包括超参数调优、正则化方法以及集成学习技术。通过这些策略的应用,可以显著提高模型的泛化能力,减少过拟合现象,并增强模型对新数据的适应能力。
|
7天前
|
机器学习/深度学习 数据采集 分布式计算
构建一个高效的机器学习工作流:技术实践与优化策略
【8月更文挑战第12天】构建一个高效的机器学习工作流是一个复杂而持续的过程,需要综合考虑数据、模型、算法、平台等多个方面。通过遵循上述步骤和优化策略,可以显著提高机器学习项目的开发效率和质量,为业务带来更大的价值。未来,随着技术的不断进步和应用场景的不断拓展,我们有理由相信机器学习工作流将变得更加高效、智能和灵活。
|
14天前
|
机器学习/深度学习 存储 监控
利用机器学习技术优化数据中心能效
【7月更文挑战第36天】在数据中心管理和运营中,能源效率已成为关键性能指标之一。随着能源成本的不断上升以及环境保护意识的增强,开发智能化、自动化的解决方案以降低能耗和提高能源利用率变得尤为重要。本文探讨了如何应用机器学习技术对数据中心的能源消耗进行建模、预测和优化,提出了一个基于机器学习的框架来动态调整资源分配和工作负载管理,以达到节能的目的。通过实验验证,该框架能够有效减少数据中心的能耗,同时保持服务质量。
|
18天前
|
机器学习/深度学习 算法 Python
探索机器学习中的梯度下降优化算法
【8月更文挑战第1天】在机器学习的广阔天地里,梯度下降法如同一位勇敢的探险家,指引我们穿越复杂的数学丛林,寻找模型参数的最优解。本文将深入探讨梯度下降法的核心原理,并通过Python代码示例,展示其在解决实际问题中的应用。
27 3
|
22天前
|
机器学习/深度学习 运维 监控
智能化运维:利用机器学习优化IT基础设施管理
【7月更文挑战第28天】在数字化时代,智能化运维成为企业提升效率、降低成本的关键。本文将探讨如何通过机器学习技术,实现对IT基础设施的智能监控与自动化管理,包括预测性维护、异常检测和性能优化等策略,旨在为读者提供一套实用的智能化运维解决方案。
|
4天前
|
机器学习/深度学习 运维 算法
智能运维:利用机器学习优化IT基础设施管理
在数字化浪潮中,企业对IT基础设施的依赖日益加深。传统的运维模式已难以应对复杂多变的技术环境,而智能运维(AIOps)应运而生。本文将探讨如何借助机器学习技术,提升运维效率,确保系统稳定性,并预测潜在问题,从而为企业带来持续的业务创新和价值增长。
11 0