3-3 超参数

3-3 超参数

什么是超参数
超参数也是一种参数,它具有参数的特性,比如未知,也就是它不是一个已知常量。是一种手工可配置的设置,需要为它根据已有或现有的经验,指定“正确”的值,也就是人为为它设定一个值,它不是通过系统学习得到的。
超参=在开始机器学习之前,就人为设置好的参数。
模型参数=通过训练得到的参数数据。
通常情况下,需要对超参数进行优化,给学习机选择-组最优超参数,以提高学习的性能和效果
超参数有哪些
在这里插入图片描述

什么是学习率?

在机器学习中,特别是训练神经网络时,学习率是一个非常关键的超参数。它决定了模型在每一步更新参数时,更新的幅度有多大。可以把它理解为**“步伐大小”**。

学习率的比喻

想象一下你在一个山谷中找寻最低点(这是我们的目标,类似于我们想要找到的最佳模型参数)。学习率就像是你每次走一步时的步幅大小。

  • 大步伐(高学习率):你可以很快地接近山谷底部,但如果步子太大,你可能会错过最低点,甚至来回跳跃,无法稳定下来。
  • 小步伐(低学习率):你会非常谨慎地一步一步走,虽然不会跳过最低点,但前进的速度会很慢,有时可能需要很长时间才能到达目标。

为什么学习率很重要?

  1. 收敛速度

    • 学习率决定了模型训练的收敛速度。合适的学习率可以帮助模型更快地找到最佳解。
  2. 稳定性

    • 如果学习率太高,模型可能会在训练过程中震荡甚至发散,无法稳定在最优点。
    • 如果学习率太低,模型的训练时间会非常长,且可能会陷入局部最优解而不是全局最优解。

调整学习率

在实际训练中,找到一个合适的学习率通常需要一些尝试。以下是常见的策略:

  1. 逐步减少学习率

    • 开始时使用较大的学习率,以便快速接近最优解,然后逐步减小学习率,以更精细地调整参数。这种方法通常用于“学习率调度”或“学习率衰减”。
  2. 使用自适应学习率方法

    • 方法如 Adam、RMSprop 等,可以动态调整学习率,使其在训练过程中自动适应。

我们来写一段代码理解以下学习率

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import mnist
from tensorflow.keras.optimizers import SGD, Adam
from tensorflow.keras.callbacks import LearningRateScheduler
import matplotlib.pyplot as plt# 1. 加载和预处理数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化数据# 2. 构建简单的神经网络模型
def create_model():model = Sequential([Flatten(input_shape=(28, 28)),Dense(128, activation='relu'),Dense(10, activation='softmax')])return model# 3. 定义不同的学习率策略# (a) 固定学习率
fixed_lr = 0.01
model_fixed_lr = create_model()
model_fixed_lr.compile(optimizer=SGD(learning_rate=fixed_lr),loss='sparse_categorical_crossentropy',metrics=['accuracy'])# (b) 学习率衰减
initial_lr = 0.1
def decay_schedule(epoch):return initial_lr * np.exp(-0.1 * epoch)model_decay = create_model()
model_decay.compile(optimizer=SGD(learning_rate=initial_lr),loss='sparse_categorical_crossentropy',metrics=['accuracy'])
lr_scheduler = LearningRateScheduler(decay_schedule)# (c) 自适应学习率(使用 Adam)
model_adaptive = create_model()
model_adaptive.compile(optimizer=Adam(),loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 4. 训练模型并记录历史# (a) 固定学习率
history_fixed_lr = model_fixed_lr.fit(x_train, y_train, epochs=10,validation_data=(x_test, y_test),verbose=0)# (b) 学习率衰减
history_decay = model_decay.fit(x_train, y_train, epochs=10,validation_data=(x_test, y_test),callbacks=[lr_scheduler],verbose=0)# (c) 自适应学习率
history_adaptive = model_adaptive.fit(x_train, y_train, epochs=10,validation_data=(x_test, y_test),verbose=0)# 5. 可视化训练结果plt.figure(figsize=(12, 6))# 绘制损失函数
plt.subplot(1, 2, 1)
plt.plot(history_fixed_lr.history['val_loss'], label='Fixed LR')
plt.plot(history_decay.history['val_loss'], label='Decay LR')
plt.plot(history_adaptive.history['val_loss'], label='Adaptive LR')
plt.xlabel('Epoch')
plt.ylabel('Validation Loss')
plt.title('Validation Loss vs. Epoch')
plt.legend()# 绘制准确率
plt.subplot(1, 2, 2)
plt.plot(history_fixed_lr.history['val_accuracy'], label='Fixed LR')
plt.plot(history_decay.history['val_accuracy'], label='Decay LR')
plt.plot(history_adaptive.history['val_accuracy'], label='Adaptive LR')
plt.xlabel('Epoch')
plt.ylabel('Validation Accuracy')
plt.title('Validation Accuracy vs. Epoch')
plt.legend()plt.tight_layout()
plt.show()

训练结果如下
在这里插入图片描述
从图表中,我们可以看到三种不同的学习率策略在模型训练和验证中的表现:

左图:验证损失 vs. 迭代次数 (Validation Loss vs. Epoch)

固定学习率(Fixed LR)
  • 表现趋势: 固定学习率的验证损失逐渐下降,虽然下降较慢,但非常稳定。到第 10 个 epoch 时,验证损失仍然在持续降低。
  • 特点: 固定学习率的优势在于其稳定性和可预测性。在没有明显过拟合或欠拟合的情况下,它可以提供持续的优化。然而,它的速度较慢,在某些情况下可能无法充分利用训练数据。
学习率衰减(Decay LR)
  • 表现趋势: 学习率衰减策略的验证损失快速下降,并在前几个 epoch 内达到相对稳定的较低水平。在最初的几个 epoch 中,损失下降得比固定学习率更快。
  • 特点: 该策略结合了高初始学习率的快速收敛和低学习率的精细调优优势。通过逐渐降低学习率,模型可以在早期快速学习到大部分重要的特征,而在后期更加专注于微调和优化。这使得它在综合性能上往往优于固定学习率。
自适应学习率(Adaptive LR)
  • 表现趋势: 使用自适应学习率的 Adam 优化器在最初几个 epoch 中迅速降低了验证损失,并且在整个训练过程中保持在一个非常低的水平。
  • 特点: Adam 通过自适应调整每个参数的学习率,使其能够在不同梯度尺度下进行优化。这通常使得 Adam 在处理稀疏梯度或高度变化的梯度时非常有效,因此验证损失曲线在初期迅速下降,并能较长时间保持在低位。

右图:验证准确率 vs. 迭代次数 (Validation Accuracy vs. Epoch)

固定学习率(Fixed LR)
  • 表现趋势: 固定学习率的验证准确率逐步上升,尽管上升较慢,但较为稳定。到第 10 个 epoch 时,准确率仍在上升,但没有达到特别高的水平。
  • 特点: 固定学习率在整个训练过程中提供了稳定但渐进的学习步伐。这种稳定性可以在某些情况下防止模型发生大的波动,但也可能导致在相同的 epoch 内,模型的提升速度较慢。
学习率衰减(Decay LR)
  • 表现趋势: 学习率衰减策略在前几个 epoch 内迅速提高了验证准确率,并在随后的 epoch 中逐渐达到并保持在一个相对较高的水平。
  • 特点: 高初始学习率帮助模型快速捕捉全局模式,而衰减后的低学习率帮助模型细化学习。该策略通常在较短的时间内提供高性能,是处理中短期训练的有效方法。
自适应学习率(Adaptive LR)
  • 表现趋势: 自适应学习率的验证准确率在前几个 epoch 内迅速上升,并在后续 epoch 中迅速达到最高水平。与学习率衰减相比,Adam 优化器在早期和中期表现更优。
  • 特点: 自适应学习率的优势在于其高效和智能的参数调整能力。这使得模型能够在短时间内获得非常高的准确率,特别适合处理具有复杂梯度分布的问题。

综合分析

  1. 训练效率: 从这两幅图中可以看出,自适应学习率(Adam)在前几个 epoch 内的表现最为优越,快速降低了损失并提高了准确率。这表明 Adam 优化器非常适合快速训练和复杂模型的优化。

  2. 长期性能: 学习率衰减策略在验证损失和准确率上的表现较为平衡,在较短的时间内也能提供良好的性能。它通过逐步减小学习率,平衡了快速收敛和精细调优的需求,是处理中长期训练的有效策略。

  3. 稳定性: 固定学习率尽管收敛较慢,但表现非常稳定。它适用于稳定性要求较高的任务,尤其是当模型需要在整个训练过程中保持一致的优化步伐时。

总结

  • Adam 优化器:在短期内提供了最快的收敛速度和最高的验证准确率,适合快速迭代和处理复杂梯度的问题。
  • 学习率衰减:在训练的早期具有快速收敛的优势,同时在中期和后期也能保持稳定的性能提升,是一种非常有效的策略。
  • 固定学习率:提供了稳定的优化过程,尽管在训练速度和性能上可能稍逊于前两者,但它的可预测性和简单性使其在某些情况下仍然具有吸引力。

根据这些结论,选择适合具体任务和数据的学习率策略,可以显著提高模型训练的效率和性能。

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

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

相关文章

Spring源码十四:Spring生命周期

上一篇我们在Spring源码十三:非懒加载单例Bean中看到了Spring会在refresh方法中去调用我们的finishBeanFactoryInitialization方法去实例化,所有非懒加载器单例的bean。并实例化后的实例放到单例缓存中。到此我们refresh方法已经接近尾声。 Spring的生命…

Android Camera2 集成人脸识别算法

这可能是全网唯一一篇介绍Android Camera2接口集成人脸算法的文章了~ 写在前面: 说起人脸识别,相信大家都不会感到陌生,在我们平时的工作生活中,人脸打卡、刷脸支付等等已经是应用的非常广泛了,人脸识别也给我们的生活…

数据可视化之智慧农业的窗口与引擎

在科技日新月异的今天,农业作为国民经济的基础产业,正逐步向智能化、数字化转型。农业为主题的数据可视化大屏看板,作为这一转型过程中的重要工具,不仅为农业管理者提供了全面、实时的农田信息,还促进了农业资源的优化配置和农业生产效率的提升。本文将深入探讨农业数据可…

Mysql-01-主从搭建

一、安装Mysql 下载 https://downloads.mysql.com/archives/community/ 安装 注意顺序 tar -xvf mysql-8.0.38-1.el9.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-8.0.38-1.el9.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.38-1.el9.x86_64.r…

非NI GPIB卡与LabVIEW兼容性分析

在许多测试和测量应用中,通用接口总线(GPIB)是一种广泛使用的标准。尽管国家仪器公司(NI)提供的GPIB硬件和LabVIEW软件的组合被广泛接受和使用,但成本可能较高。因此,一些用户会考虑使用其他厂商…

蓄势高飞逐“新”空,卓翼飞思助力打造低空经济产业领域人才智库

2024年,“低空经济”首次写入政府工作报告,掀开新兴产业的崭新一页,而后迅速在全国各地呈现如火如荼的发展态势。这片蕴藏着巨大潜力和产业的蓝海,正蓄势聚能、乘势而起,站在发展的新风口上,面对新前景和新…

CorelDRAW2024新版本来咯!你的设计神助手

🎉 设计界的朋友们,注意啦!你们的新宠——CorelDRAW 2024 来咯! 🌟 一、设计神器再进化 亲爱的设计小伙伴们,有没有感觉每天与那些不配合的软件战斗,像是在打怪升级?🐉 …

【matlab】智能优化算法——基准测试函数

智能优化算法的基准测试函数是用于评估和优化算法性能的一组标准问题。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、全局最优解、高维度、非线性、不连续等复杂性。以下是对智能优化算法基准测试函数的详细归纳: 测试函数的分类&…

数据结构初阶 遍历二叉树问题(一)

一. 链式二叉树的实现 1. 结构体代码 typedef int BTDateType; typedef struct BinaryTreeNode {BTDateType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; 大概的图形是这样子 2. 增删查改 我们这里要明确的一点的 二叉树的增删查改是没有意…

springboot + mybatis 多数据源切换

参考的b站博主写的 配置文件: spring:datasource:db1:jdbc-url: jdbc:mysql://localhost:3306/interview_database?useUnicodetrue&characterEncodingutf-8&useSSLfalseusername: rootpassword: 12345driver-class-name: com.mysql.cj.jdbc.Driverdb2:jdbc-url: jdbc…

两年经验前端带你重学前端框架必会的ajax+node.js+webpack+git等技术的个人学习心得、作业及bug记录 Day1

黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 Day1 你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​…

hdu物联网硬件实验1 小灯闪烁

物联网硬件基础实验报告 学院 班级 学号 姓名 日期 成绩 实验题目 配置环境小灯 实验目的 配置环境以及小灯闪烁 硬件原理 无 关键代码及注释 /* Blink The basic Energia example. Turns on an LED on for one second, then off for one sec…

Mysql-常见DML-DQL-语句语法用法总结

1、常见DML语句 1.1 INSERT语句 说明:将数据插入到数据库表中。 INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 实例:添加C罗信息到数据库表中 insert into employee (ID, name, gender, entrydate, age) values …

KUKA机器人维修保养消除报警

在使用KUKA机器人时,有时候会遇到示教器信息栏出现“基本检查到期”的信息,这就提示该机器到了基本保养时间了,需要进行保养。 一、报警信息和保养周期: KUKA机器人在使用超过一定保养周期后会出现“基本检查到期 / 中央手动保…

技术分析报告:StorageReview实验室打破π计算世界纪录

StorageReview实验室团队利用先进的计算系统,成功将π计算至202.112.290.000.000位,刷新了自己之前保持的105万亿位的世界纪录。这一成就突显了现代高性能计算(HPC)和精心设计的商用硬件平台的卓越能力。 关键技术组件&#xff1a…

【Unity navigation面板】

【Unity navigation面板】 Unity的Navigation面板是一个集成在Unity编辑器中的界面,它允许开发者对导航网格(NavMesh)进行配置和管理。 Unity Navigation面板的一些关键特性和功能: 导航网格代理(NavMesh Agent&…

Python爬虫获取视频

验证电脑是否安装python 1.winr输入cmd 2.在黑窗口输入 python.exe 3.不是命令不存在就说明python环境安装完成 抓取快手视频 1.在phcharm应用中新建一个项目 3.新建一个python文件 4.选择python文件,随便起一个名字后按回车 5.安装requests pip install requests 6.寻找需要的…

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件,然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…

【Python实战因果推断】23_倾向分3

目录 Propensity Score Matching Inverse Propensity Weighting Propensity Score Matching 另一种控制倾向得分的常用方法是匹配估计法。这种方法搜索具有相似可观测特征的单位对,并比较接受干预与未接受干预的单位的结果。如果您有数据科学背景,您可…

Python使用matplotlib绘制图像时,中文图例或标题无法正常显示问题

Python使用matplotlib绘制图像时,中文图例或标题无法显示问题解决方法 一、问题描述二、解决方法 欢迎学习交流! 邮箱: z…1…6.com 网站: https://zephyrhours.github.io/ 一、问题描述 Matplotlib库是Python中经常使用的绘图工…