优化器原理——权重衰减(weight_decay)

优化器原理——权重衰减(weight_decay)

  • weight_decay的作用
  • 原理解析
  • 实验观察

  在深度学习中,优化器的 weight_decay 参数扮演着至关重要的角色。它主要用于实现正则化,以防止模型过拟合。过拟合是指模型在训练数据上表现优异,但在新的、未见过的数据上却表现不佳。这通常是因为模型学习了训练数据中的噪声和细节,而不是数据背后的真实模式。

weight_decay的作用

  防止过拟合weight_decay 通过对模型的大权重施加惩罚,促使模型保持简洁,从而降低了学习训练数据噪声的可能性,提高了模型在新数据上的泛化能力。
  促进稀疏解:此外,正则化倾向于将权重推向零,这有助于在某些场景下获得更为简洁和稀疏的模型。

原理解析

  从数学的角度来看,weight_decay 实际上是 L2 正则化的一种表现形式。L2 正则化在原始损失函数的基础上增加了一个与权重平方成正比的项,修改后的损失函数表示为:

L = L o r i g i n a l + λ 2 ∑ w 2 L = L_{original} + \frac{\lambda}{2} \sum w^2 L=Loriginal+2λw2

  其中:

  · L o r i g i n a l L_{original} Loriginal​ 是原始的损失函数。
  · λ \lambda λ 是正则化参数,对应于 weight_decay
  · ∑ w 2 \sum w^2 w2 表示权重的平方和。

  正则化参数 λ \lambda λ 的大小决定了对大权重的惩罚程度。较高的 weight_decay 值增强了对复杂模型结构的惩罚,有助于防止过拟合。但是,如果设置过高,可能会导致模型欠拟合,失去捕捉数据中重要特征的能力。

  在训练期间,优化器不仅要最小化原始的损失函数,还要考虑权重的惩罚项,这样做有助于在拟合训练数据和保持模型的简单性之间找到一个平衡点。因此,weight_decay 是优化模型在看不见的数据上表现的一个重要手段。

实验观察

  为了直观地理解 weight_decay 的影响,我们可以进行一个简单的实验,比较不同 weight_decay 值对训练过程的影响。例如,我们可以对比 weight_decay = 0.01weight_decay = 0.1 的效果,具体代码如下:

import torch
from tensorboardX import SummaryWriter
from torch import optim, nn
import time


class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linears = nn.Sequential(
            nn.Linear(2, 20),
            nn.LayerNorm(20),

            nn.Linear(20, 20),
            nn.LayerNorm(20),

            nn.Linear(20, 20),
            nn.LayerNorm(20),

            nn.Linear(20, 20),
            nn.LayerNorm(20),

            nn.Linear(20, 1),
        )

    def forward(self, x):
        _ = self.linears(x)
        return _

lr = 0.01
iteration = 1000


x1 = torch.arange(-10, 10).float()
x2 = torch.arange(0, 20).float()
x = torch.cat((x1.unsqueeze(1), x2.unsqueeze(1)), dim=1)
y = 2*x1 - x2**2 + 1

model = Model()
optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay=0.1)
loss_function = torch.nn.MSELoss()

start_time = time.time()
writer = SummaryWriter(comment='_权重衰减')

for iter in range(iteration):
    y_pred = model(x)
    loss = loss_function(y, y_pred.squeeze())
    loss.backward()

    for name, layer in model.named_parameters():
        writer.add_histogram(name + '_grad', layer.grad, iter)
        writer.add_histogram(name + '_data', layer, iter)
    writer.add_scalar('loss', loss, iter)

    optimizer.step()
    optimizer.zero_grad()

    if iter % 50 == 0:
        print("iter: ", iter)

print("Time: ", time.time() - start_time)

这里我们使用 TensorBoardX 进行结果的可视化展示。

  通过观察训练1000轮后线性层的梯度分布,我们可以看出,较大的 weight_decay 设置会导致模型的权重更倾向于靠近 0。这说明 weight_decay 值越大,优化器在限制权重增长上越严格。

在这里插入图片描述

  可以看到,weight_decay设置的较大,会限制模型的权重分布都会趋近于0。可以理解为weight_decay越大,优化器就越限制权重分布变得趋近 0。

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

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

相关文章

C++ 通过CryptoPP计算Hash值

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具,以满足软件开发中对…

爬虫http代理有什么用处?怎么高效使用HTTP代理?

在进行网络爬虫工作时,我们有时会遇到一些限制,比如访问频率限制、IP被封等问题。这时,使用HTTP代理可以有效地解决这些问题,提高爬虫的工作效率。本文将介绍爬虫HTTP代理的用处以及如何高效地使用HTTP代理。 一、爬虫HTTP代理的用…

小航助学题库蓝桥杯题库c++选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号) 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)

spring的事物

DataSourceTansactionManager Spring与JdbcTemplate或MyBatis框架集成时,提供的事务管理器. 事物的特性:原子性,一致性,隔离性,持久性 int TRANSACTION_READ_UNCOMMITTED 1; 未提交读 int TRANSACTION_READ_COMMITTED 2; …

App的测试,和传统软件测试有哪些区别?应该增加哪些方面的测试用例?

从上图可知,测试人员所测项目占比中,App测试占比是最高的。 这就意味着学习期间,我们要花最多的精力去学App的各类测试。也意味着我们找工作前,就得知道,App的测试点是什么,App功能我们得会测试&#xff0…

使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式

文章目录 一、引言&问题描述二、解决方案 一、引言&问题描述 在使用Spring来管理对象时,我们需要创建Spring的配置文件applicationContext.xml,如下图位置: 在resources目录下选择new->File 或 使用idea自带模板new->XML Con…

hugging face下载dataset时候出现You must be authenticated to access it.问题解决

Cannot access gated repo for url https://huggingface.co/tiiuae/falcon-180B/resolve/main/tokenizer_config.json. Repo model tiiuae/falcon-180B is gated. You must be authenticated to access it. 参考https://huggingface.co/docs/huggingface_hub/guides/download …

Android : GPS定位 获取当前位置—简单应用

示例图: MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…

CentOS7安装MiniO

目录 1、简介 2、安装 2.1、Binary 2.2、RPM(RHEL)就是红帽,CentOS就用这个 2.3、DEB(Ubuntu/Debian) 2.4、创建指定的目录并且将下载的安装包上传上去 3、启动MiniO服务 3.1、脚本如下: 4、进入服务…

汽车悬架底盘部件自动化生产线3d检测蓝光三维测量自动化设备-CASAIM-IS(2ND)

随着汽车工业的不断发展,对于汽车零部件的制造质量和精度要求也在不断提高。汽车悬架底盘部件作为汽车的重要组成部分,其制造质量和精度直接影响到整车的性能和安全性。因此,采用CASAIM-IS(2ND)蓝光三维测量自动化设备…

机器学习与 S3 相集成 :释放数据的力量

文章作者:Libai 引言 在当今数据驱动的世界中,企业不断寻求如何高效利用企业自身所产生的数据的解决方案。机器学习已经成为一种提取有价值的见解和做出数据驱动决策的强大工具。然而,机器学习模型的成功在很大程度上依赖于高质量数据的可用…

基于Vue.js的厦门旅游电子商务预订系统的设计和实现

项目编号: S 030 ,文末获取源码。 \color{red}{项目编号:S030,文末获取源码。} 项目编号:S030,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒…

【开源视频联动物联网平台】视频AI智能分析部署方式

利用视频监控的AI智能分析技术,可以让视频监控发挥更大的作用,成为管理者的重要决策工具。近年来,基于视频监控的AI分析算法取得了巨大的发展,并在各种智慧化项目中得到了广泛应用,为客户提供更智能化的解决方案。 然…

【智能算法】季节优化算法Seasons optimization algorithm【2023最新智能优化算法合集】

本文介绍了一种基于成吉思汗鲨鱼(Genghis Khan shark,GKS)行为的自然启发的元启发式算法(MA),称为成吉思汗鲨鱼优化器(Genghis Khan shark optimizer,GKSO),用于数值优化和工程设计。GKSO的灵感来自于GKS的捕食和生存行为。该成果…

进程间通信基础知识【Linux】——上篇

目录 一,理解进程之间的通信 1. 进程间通信目的 2. 进程间通信的技术背景 3,常见的进程间通信 二,管道 1. 尝试建立一个管道 管道的特点: 管道提供的访问控制: 2. 扩展:进程池 阶段一&#xff1a…

【实验】配置用户自动获取IPv6地址的案例

热门IT课程-试听视频文章浏览阅读49次。认证课程介绍:华为HCIA试听课程 : 华为HCIA试听课程:华为HCIA试听课程:华为HCIP试听课程:思科CCNA试听课程:思科CCNA试听课程:思科CCNA试听课程&#xff…

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLA…

高效办公:如何使用视频剪辑工具批量转码,mp4视频到TS视频

在视频处理过程中,转码是一项常见的任务。将MP4视频转换为TS视频可以提供许多优势,包括更好的兼容性、更广泛的设备和平台支持以及更高的视频质量。然而,手动转码大量视频文件可能会非常耗时且效率低下。为了实现高效办公,可以使用…

内存函数​(memcpy、memmove、memset、memcmp)

目录 一、memcpy的使用和实现 使用: 模拟实现: 二、memmove 使用和模拟实现 模拟实现: 2.1难点: 覆盖拷贝所在的问题 memset的使用 memcmp的函数的使用​ 一、memcpy的使用和实现 memcpy 拷贝的就是不重叠的内存。 参数…

webpack如何处理浏览器的样式兼容问题postcss

一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如: -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…