【机器学习】numpy实现Adagrad优化器

简介: 【机器学习】numpy实现Adagrad优化器

Agagrad优化原理

随着我们更新次数的增大,我们是希望我们的学习率越来越小。因为模型求解最初阶段,我们认为距离损失函数最优解是很远的,所以此时学习率可以很大,以缩减寻优过程的求解时间,随着更新的次数的增多,我们认为越来越接近最优解,于是学习速率也随之变小,以防止跳过最优解。

迭代过程

代码实践

import numpy as np
import matplotlib.pyplot as plt
class Optimizer:
    def __init__(self,
                 epsilon = 1e-10, # 误差
                 iters = 100000,  # 最大迭代次数
                 lamb = 0.01, # 学习率
                 r = 0.0, # 累积梯度
                 theta = 1e-7): # 常数
        self.epsilon = epsilon
        self.iters = iters
        self.lamb = lamb
        self.r = r
        self.theta = theta
    def adagrad(self, x_0 = 0.5, y_0 = 0.5):
        f1, f2 = self.fn(x_0, y_0), 0
        w = np.array([x_0, y_0]) # 每次迭代后的函数值,用于绘制梯度曲线
        k = 0 # 当前迭代次数
        while True:
            if abs(f1 - f2) <= self.epsilon or k > self.iters:
                break
            f1 = self.fn(x_0, y_0)
            g = np.array([self.dx(x_0, y_0), self.dy(x_0, y_0)])
            self.r += np.dot(g, g)
            x_0, y_0 = np.array([x_0, y_0]) - self.lamb / (self.theta + np.sqrt(self.r)) * np.array([self.dx(x_0, y_0), self.dy(x_0, y_0)])   
            f2 = self.fn(x_0, y_0)
            w = np.vstack((w, (x_0, y_0)))
            k += 1
        self.print_info(k, x_0, y_0, f2)
        self.draw_process(w)
    def print_info(self, k, x_0, y_0, f2):
        print('迭代次数:{}'.format(k))
        print('极值点:【x_0】:{} 【y_0】:{}'.format(x_0, y_0))
        print('函数的极值:{}'.format(f2))
    def draw_process(self, w):
        X = np.arange(0, 1.5, 0.01)
        Y = np.arange(-1, 1, 0.01)
        [x, y] = np.meshgrid(X, Y)
        f = x**3 - y**3 + 3 * x**2 + 3 * y**2 - 9 * x
        plt.contour(x, y, f, 20)
        plt.plot(w[:, 0],w[:, 1], 'g*', w[:, 0], w[:, 1])
        plt.show()
    def fn(self, x, y):
        return x**3 - y**3 + 3 * x**2 + 3 * y**2 - 9 * x
    def dx(self, x, y):
        return 3 * x**2 + 6 * x - 9
    def dy(self, x, y):
        return - 3 * y**2 + 6 * y
"""
    函数: f(x) = x**3 - y**3 + 3 * x**2 + 3 * y**2 - 9 * x
    最优解: x = 1, y = 0
    极小值: f(x,y) = -5
"""
optimizer = Optimizer()
optimizer.adagrad()


目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 数据处理
机器学习库:numpy
机器学习库:numpy
41 0
|
1天前
|
数据采集 机器学习/深度学习 存储
【机器学习】数据清洗——基于Numpy库的方法删除重复点
【机器学习】数据清洗——基于Numpy库的方法删除重复点
85 1
|
7月前
|
存储 机器学习/深度学习 人工智能
机器学习 | NumPy超详细教程
机器学习 | NumPy超详细教程
96 0
|
1天前
|
机器学习/深度学习 数据采集 算法
探索NumPy与机器学习库的集成之路
【4月更文挑战第17天】本文探讨了NumPy在机器学习中的核心作用,它为各类机器学习库提供基础数据处理和数值计算能力。NumPy的线性代数、优化算法和随机数生成等功能,对实现高效模型训练至关重要。scikit-learn等库广泛依赖NumPy进行数据预处理。未来,尽管面临大数据和复杂模型的性能挑战,NumPy与机器学习库的集成将继续深化,推动技术创新。
|
7月前
|
机器学习/深度学习 数据可视化 Python
【Python机器学习】实验01 Numpy以及可视化回顾
【Python机器学习】实验01 Numpy以及可视化回顾
114 2
|
8月前
|
机器学习/深度学习 存储 数据处理
利用NumPy和Pandas进行机器学习数据处理与分析
利用NumPy和Pandas进行机器学习数据处理与分析
|
1天前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
1天前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
1天前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
|
10月前
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。