3-4 优化器和学习率

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.mfbz.cn/a/781086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 函数高级——函数的占位参数

C中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补改位置 语法: 返回值类型 函数名(数据类型){ } 在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术 示例:…

TypeScript:5分钟上手创建一个简单的Web应用

一、练习TypeScript实例 1.1 在src目录里创建greeter.ts greeter.ts文件代码 // https://www.tslang.cn/docs/handbook/typescript-in-5-minutes.html // 格式化快捷键:https://blog.csdn.net/Dontla/article/details/130255699 function greeter(name: string) …

Windows电脑下载、安装VS Code的方法

本文介绍Visual Studio Code(VS Code)软件在Windows操作系统电脑中的下载、安装、运行方法。 Visual Studio Code(简称VS Code)是一款由微软开发的免费、开源的源代码编辑器,支持跨平台使用,可在Windows、m…

采煤机作业3D虚拟仿真教学线上展示增强应急培训效果

在化工行业的生产现场,安全永远是首要之务。为了加强从业人员的应急响应能力和危机管理能力,纷纷引入化工行业工艺VR模拟培训,让应急演练更加生动、高效。 化工行业工艺VR模拟培训软件基于真实的厂区环境,精确还原了各类事件场景和…

vue2 webpack使用optimization.splitChunks分包,实现按需引入,进行首屏加载优化

optimization.splitChunks的具体功能和配置信息可以去网上自行查阅。 这边简单讲一下他的使用场景、作用、如何使用: 1、没用使用splitChunks进行分包之前,所有模块都揉在一个文件里,那么当这个文件足够大、网速又一般的时候,首…

Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测

Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM多变量时间序列预测,Transf…

玫瑰千层烤饼:味蕾的芬芳盛宴

在美食的缤纷世界里,有一种独特的存在,它融合了玫瑰的芬芳与烤饼的酥脆,那便是令人陶醉的甘肃美食玫瑰千层烤饼。食家巷玫瑰千层烤饼,宛如一件精心雕琢的艺术品。每一层薄如纸张的面皮,都承载着制作者的细腻与用心。层…

MySQL Binlog详解:提升数据库可靠性的核心技术

文章目录 1. 引言1.1 什么是MySQL Bin Log?1.2 Bin Log的作用和应用场景 2. Bin Log的基本概念2.1 Bin Log的工作原理2.2 Bin Log的三种格式 3. 配置与管理Bin Log3.1 启用Bin Log3.2 配置Bin Log参数3.3 管理Bin Log文件3.4 查看Bin Log内容3.5 使用mysqlbinlog工具…

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

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

多线程(进阶)

前言👀~ 上一章我们介绍了线程池的一些基本概念,今天接着分享多线程的相关知识,这些属于是面试比较常见的,大部分都是文本内容 常见的锁策略 乐观锁 悲观锁 轻量锁 重量级锁 自旋锁 挂起等待锁 可重入锁和不可重入锁 互斥…

优化后Day53 动态规划part11

LC1143最长公共子序列 1.dp数组的含义:dp[i][j]表示以下标i结尾的text1子序列和以下标j结尾的text2子序列的最长公共子序列 2. 初始化:跟LC718一样,i结尾的需要初始化,i-1结尾不需要初始化 3. 递推公式 如果charAt(i)charAt(j)&…

C++ 函数高级——函数重载——注意事项

1.引用作为重载条件 2.函数重载碰到函数默认参数 示例: 运行结果:

【IMU】 确定性误差与IMU_TK标定原理

1、确定性误差 MEMS IMU确定性误差模型 K 为比例因子误差 误差来源:器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若该系数不准,便存在刻度系数误差。 T 为交轴耦合误差 误差来源:如下图,b坐标系是正交的imu坐标系,s坐标系的三…

UE C++ 多镜头设置缩放 平移

一.整体思路 首先需要在 想要控制的躯体Pawn上,生成不同相机对应的SpringArm组件。其次是在Controller上,拿到这个Pawn,并在其中设置输入响应,并定义响应事件。响应事件里有指向Pawn的指针,并把Pawn的缩放平移功能进行…

暄桐教练日课·21天《线的初识》即将开始 一起感受线描的乐趣

林曦老师的直播课,是暄桐教室的必修课。而教练日课是丰富多彩的选修课,它会选出书法史/美术史上重要的、有营养的碑帖和画儿,与你一起,高效练习。而且暄桐教练日课远不止书法、国画,今后还会有更多有趣的课程陆续推出&…

Python | Leetcode Python题解之第214题最短回文串

题目: 题解: class Solution:def shortestPalindrome(self, s: str) -> str:n len(s)fail [-1] * nfor i in range(1, n):j fail[i - 1]while j ! -1 and s[j 1] ! s[i]:j fail[j]if s[j 1] s[i]:fail[i] j 1best -1for i in range(n - 1,…

Django之项目开发(二)

目录 一、安装和使用uWSGI 1.1、安装 1.2、配置文件 1.3、启动与停止uwsgi 二、安装nginx 三、Nginx 配置uWSGI 四、Nginx配置静态文件 五、Nginx配置负载均衡 一、安装和使用uWSGI uWSGI 是一个 Web 服务器,可以用来部署 Python Web 应用。它是一个高性能的通用的 We…

大模型备案全网最详细流程【附附件】

本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。 大模型备案安…

Arduino ESP8266 开发环境搭建

Arduino ESP8266 开发环境搭建 很久之前学嵌入式时,用过Arduino8266进行开发,开发成本低、难度小,体验很不错。 近期,又突然要用,遂再次搭建环境,但变动挺多,有些小波折,开贴记录。…

unity强力配置插件Luban【Next最新版本】(二)本地化

文章目录 前言一、快速实现静态本地化1、表格格式2、本地化文本3、修改bat文件3、打表 二、多语言切换1、修改bat文件2、增加本地化管理脚本3、测试 总结 前言 无需多言,本地化(Localization,简称 L10N)是指将产品、内容或服务适…