3-4 优化器和学习率

news2024/11/25 16:36:27

3-4 优化器和学习率

主目录点这里

在这里插入图片描述
优化器是机器学习和深度学习模型训练过程中用于调整模型参数的方法。它的主要目标是通过最小化损失函数来找到模型参数的最优值,从而提升模型的性能。

在深度学习中,优化器使用反向传播算法计算损失函数相对于模型参数的梯度,并根据这些梯度来更新模型参数。不同的优化器方法在更新参数时使用了不同的策略和技巧。

以下是几种常见的优化器以及它们的实现代码示例:

1. 梯度下降(Gradient Descent)

梯度下降是最基本的优化算法。它通过计算损失函数相对于模型参数的梯度,然后按一个学习率(步长)更新参数。

import numpy as np

# 假设我们有一个简单的二次函数:f(x) = x^2
# 其导数是:f'(x) = 2x
def gradient_descent(learning_rate, iterations):
    x = 10  # 初始化值
    for i in range(iterations):
        gradient = 2 * x  # 计算梯度
        x = x - learning_rate * gradient  # 更新参数
        print(f"Iteration {i+1}: x = {x}, f(x) = {x**2}")

# 运行梯度下降
gradient_descent(learning_rate=0.1, iterations=10)

在这里插入图片描述

2. 随机梯度下降(Stochastic Gradient Descent, SGD)

SGD 是一种变体,它在每次更新时使用单个样本(或小批量样本)来计算梯度,而不是整个数据集。这种方法可以使优化过程更快,更适用于大规模数据集。

import numpy as np

# 假设我们有一个数据集和一个简单的线性模型
X = np.array([1, 2, 3, 4])
y = np.array([2, 4, 6, 8])
weights = 0.0
bias = 0.0

def stochastic_gradient_descent(X, y, learning_rate, iterations):
    global weights, bias
    for i in range(iterations):
        for j in range(len(X)):
            prediction = weights * X[j] + bias
            error = prediction - y[j]
            weights = weights - learning_rate * error * X[j]
            bias = bias - learning_rate * error
            print(f"Iteration {i+1}, Sample {j+1}: weights = {weights}, bias = {bias}")

# 运行随机梯度下降
stochastic_gradient_descent(X, y, learning_rate=0.01, iterations=10)

在这里插入图片描述

3. 动量梯度下降(Momentum)

动量方法在梯度更新过程中加入了前几次更新的方向,避免陷入局部最小值,提升收敛速度。

def momentum_gradient_descent(learning_rate, iterations, momentum=0.9):
    x = 10  # 初始化值
    v = 0  # 初始速度
    for i in range(iterations):
        gradient = 2 * x  # 计算梯度
        v = momentum * v - learning_rate * gradient  # 更新速度
        x = x + v  # 更新参数
        print(f"Iteration {i+1}: x = {x}, f(x) = {x**2}")

# 运行动量梯度下降
momentum_gradient_descent(learning_rate=0.1, iterations=10)

在这里插入图片描述

4. AdaGrad

AdaGrad 通过对梯度的平方和进行调整,使得参数的学习率随着训练的进行而自动减小。这对于稀疏数据特别有用。

def adagrad(learning_rate, iterations):
    x = 10  # 初始化值
    cache = 0  # 累积的平方梯度
    epsilon = 1e-8  # 防止除零
    for i in range(iterations):
        gradient = 2 * x  # 计算梯度
        cache += gradient**2  # 累积平方梯度
        x = x - (learning_rate / (np.sqrt(cache) + epsilon)) * gradient  # 更新参数
        print(f"Iteration {i+1}: x = {x}, f(x) = {x**2}")

# 运行 AdaGrad
adagrad(learning_rate=1.0, iterations=10)

在这里插入图片描述

5. RMSProp

RMSProp 是 AdaGrad 的改进版,它使用滑动平均值来计算平方梯度的加权平均,以避免学习率衰减过快。

def rmsprop(learning_rate, iterations, decay_rate=0.9):
    x = 10  # 初始化值
    cache = 0  # 累积的平方梯度
    epsilon = 1e-8  # 防止除零
    for i in range(iterations):
        gradient = 2 * x  # 计算梯度
        cache = decay_rate * cache + (1 - decay_rate) * gradient**2  # 计算加权平均
        x = x - (learning_rate / (np.sqrt(cache) + epsilon)) * gradient  # 更新参数
        print(f"Iteration {i+1}: x = {x}, f(x) = {x**2}")

# 运行 RMSProp
rmsprop(learning_rate=0.1, iterations=10)

在这里插入图片描述

6. Adam

Adam(Adaptive Moment Estimation)结合了动量和 RMSProp 的优点,计算出每个参数的自适应学习率。

def adam(learning_rate, iterations, beta1=0.9, beta2=0.999):
    x = 10  # 初始化值
    m, v = 0, 0  # 初始化一阶和二阶动量
    epsilon = 1e-8  # 防止除零
    for i in range(iterations):
        gradient = 2 * x  # 计算梯度
        m = beta1 * m + (1 - beta1) * gradient  # 更新一阶动量
        v = beta2 * v + (1 - beta2) * gradient**2  # 更新二阶动量
        m_hat = m / (1 - beta1**(i + 1))  # 计算偏差修正后的一阶动量
        v_hat = v / (1 - beta2**(i + 1))  # 计算偏差修正后的二阶动量
        x = x - (learning_rate / (np.sqrt(v_hat) + epsilon)) * m_hat  # 更新参数
        print(f"Iteration {i+1}: x = {x}, f(x) = {x**2}")

# 运行 Adam
adam(learning_rate=0.1, iterations=10)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm远程连接和conda环境参考博客自用整理

pycharm远程连接 pycharm的连接需要先用xftp把项目上传上去(包括venv),似乎才能连 https://blog.csdn.net/weixin_41174300/article/details/134420981 注意要上传一份一模一样的,然后在deployment里面添加mapping 注意传输文件…

【C语言】操作符--百科全书

目录 一、操作符的分类 二、 ⼆进制和进制转换 三、 原码、反码、补码 四、 移位操作符 五、位操作符:&、|、^、~ 六、单⽬操作符 七、逗号表达式 八、 下标访问[]、函数调⽤() 九、结构体 十、操作符的属性:优先级、结合性 十一、表达式…

P1392 取数

传送门&#xff1a;取数 如若你看完题解后&#xff0c;仍有问题&#xff0c;欢迎评论 首先说一下 我首先想到的思路 &#xff08; 20%通过率 &#xff09;&#xff1a;通过dfs , 将所有的情况放入priority_queue中&#xff08;greater<int>&#xff09;&#xff0c;维持…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置介绍】

文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进行启用和禁用。 下面详细介绍这些中…

java项目总结6

目录 1.双列集合 2.map的三种遍历方式&#xff1a; 1.键找值 2.键值对 3.lambda遍历map 3.HashMap 例子&#xff1a;统计字符出现次数 4.LinkedHashMap 5.TreeMap 6.可变参数 7.Collections: 1.双列集合 双列集合特点&#xff1a; 定义Map<String&#xff0c;St…

【Python】已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;paddleocr导包报错&#xff09;ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 近日&#xff0c;一些使用PaddleOCR库进行文字…

移动校园(3):处理全校课程数据excel文档,实现空闲教室查询与课程表查询

首先打开教学平台 然后导出为excel文档 import mathimport pandas as pd import pymssql serverName 127.0.0.1 userName sa passWord 123456 databaseuniSchool conn pymssql.connect(serverserverName,useruserName,passwordpassWord,databasedatabase) cursor conn.cur…

vue3项目 前端blocked:mixed-content问题解决方案

一、问题分析 blocked:mixed-content其实浏览器不允许在https页面里嵌入http的请求&#xff0c;现在高版本的浏览器为了用户体验&#xff0c;都不会弹窗报错&#xff0c;只会在控制台上打印一条错误信息。一般出现这个问题就是在https协议里嵌入了http请求&#xff0c;解决方法…

拉曼光谱入门:3.拉曼光谱的特征参数与定量定性分析策略

1.特征参数 1.1 退偏振率 退偏振率&#xff08;p&#xff09;是一个衡量拉曼散射光偏振状态的参数&#xff0c;它描述了拉曼散射光的偏振方向与入射光偏振方向之间的关系。退偏振率定义为垂直偏振方向的拉曼散射强度与平行偏振方向的拉曼散射强度之比。退偏振率&#xff08;p&…

逆变器学习笔记(二)

用正点原子示波器看交流220V波形的时候&#xff0c;一定注意先把探头调到X10档位&#xff01;&#xff01;!!!!!!!!!!!!!!!!!!!!!!!!!!! 全桥LLC电路&#xff1a; 1.电感的两种模式——DCM和CCM的区别&#xff1a; DCM&#xff08;Discontinuous Conduction Mode&#xff0c;…

【数据结构】05.双向链表

一、双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这里“放哨的”。 “哨兵位”存在的意义&#xff1a;遍历循…

Go语言如何入门,有哪些书推荐?

Go 语言之所以如此受欢迎&#xff0c;其编译器功不可没。Go 语言的发展也得益于其编译速度够快。 对开发者来说&#xff0c;更快的编译速度意味着更短的反馈周期。大型的 Go 应用程序总是能在几秒钟之 内完成编译。而当使用 go run编译和执行小型的 Go 应用程序时&#xff0c;其…

Facebook数据仓库的变迁与启示

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…

昇思学习打卡-10-ShuffleNet图像分类

文章目录 网络介绍网络结构部分实现对应网络结构 模型训练shuffleNet的优缺点总结优点不足 网络介绍 ShuffleNet主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointwise G…

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、名词说明 狄利克雷函数&#xff08;Dirac Delta Function&#xff09; 狄利克雷函数&#xff0c;也称为单位冲激函数或δ函数&#xff0c;是一个在数学和信号处理中常用的特殊函数。狄利克雷函数通常用符号δ(t)表示&#xff0c;其定义为&#xff1a; δ(t) { ∞, t 0{…

美股交易相关知识点 持续完善中

美股交易时间 美东时间&#xff1a;除了凌晨 03:50 ~ 04:00 这10分钟时间不可交易以外&#xff0c;其他时间都是可以交易的。 如果是在香港或者北京时间下交易要区分两种: 美东夏令时&#xff1a;除了下午 15:50 ~ 16:00 这10分钟时间不可交易以外&#xff0c;其他时间都是可…

springboot公寓租赁系统-计算机毕业设计源码03822

摘要 1 绪论 1.1 研究背景与意义 1.2选题背景 1.3论文结构与章节安排 2 公寓租赁系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系…

GRPC使用之ProtoBuf

1. 入门指导 1. 基本定义 Protocol Buffers提供一种跨语言的结构化数据的序列化能力&#xff0c;类似于JSON&#xff0c;不过更小、更快&#xff0c;除此以外它还能用用接口定义(IDL interface define language)&#xff0c;通protoc编译Protocol Buffer定义文件&#xff0c;…

拆分Transformer注意力,韩国团队让大模型解码提速20倍|大模型AI应用开始小规模稳步爆发|周伯文:大模型也有幻觉,全球AI创新指数公布

拆分Transformer注意力&#xff0c;韩国团队让大模型解码提速20倍AI正在颠覆AI上市不到两年&#xff0c;蜗牛游戏可能要退市了&#xff1f;世界人工智能大会结束了&#xff0c;百花齐放&#xff0c;但也群魔乱舞“串联OLED”被苹果带火了&#xff0c;比OLED强在哪里&#xff1f…

赚钱小思路,送给没有背景的辛辛苦苦努力的我们!

我是一个没有背景的普通人&#xff0c;主要靠勤奋和一股钻劲&#xff0c;这十几年来我的日常作息铁打不变&#xff0c;除了睡觉&#xff0c;不是在搞钱&#xff0c;就是在琢磨怎么搞钱。 ​ 可以说打拼了十几年&#xff0c;各种小生意都做过&#xff0c;以前一直是很乐观的&…