动手学深度学习11 权重衰退

动手学深度学习11 权重衰退

  • 1. 权重衰退
  • 2. 代码实现
  • 3. QA

视频: https://www.bilibili.com/video/BV1UK4y1o7dy/?spm_id_from=autoNext&vd_source=eb04c9a33e87ceba9c9a2e5f09752ef8
电子书: ttps://zh-v2.d2l.ai/chapter_multilayer-perceptrons/weight-decay.html
课件: https://courses.d2l.ai/zh-v2/assets/pdfs/part-0_16.pdf

1. 权重衰退

在这里插入图片描述
在这里插入图片描述
为了便于讨论,我们假设训练的模型中只有w1和w2两个参数
但是我们觉得100这个数还是太大了,怎么办?我们在损失函数中添加一项,这一项是w1的平方+w2的平方
罚的项是L2正则项,因为离原点越近,正则项越小
绿线是损失函数的取值, 黄线是惩罚项的取值, 两者都是圈越大取值越大
两个圆锥的交点可能是最优点!!!!!!!
这里的平衡点可以看看kkt条件来理解,但其实增广拉格朗日方程本身和subject to ||w||^2<theta的模型是等价的,在这里用subject to 的模型来理解可能更简单
其实就是新的损失函数由两项组成,此时求导后,梯度有两项了,一项将w向绿线中心拉,一项将w向原点拉进,最后将在w*点达到一个平衡
在这里插入图片描述
在这里插入图片描述
每次都在权重更新之前对w做了一次放小(ηλ<1), 所以叫做权重衰退。
lambda是控制模型参数的超参数
在这里插入图片描述

2. 代码实现

%matplotlib inline
import torch
from torch import nn
from d2l import torch as d2l

n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
train_data = d2l.synthetic_data(true_w, true_b, n_train)
train_iter = d2l.load_array(train_data, batch_size)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)
print(train_data[0], train_data[1])

def init_params():
  w = torch.normal(0, 1, size=(num_inputs, 1), requires_grad=True)
  b = torch.zeros(1, requires_grad=True)
  return [w, b]

def l2_penalty(w):
  return torch.sum(w.pow(2)) / 2  # w.pow(2) 幂函数  w的2次幂

def train(lambd):
  w, b = init_params()
  net, loss = lambda X: d2l.linreg(X, w, b), d2l.squared_loss
  num_epochs, lr = 100, 0.03
  animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log', xlim=[5, num_epochs], legend=['train', 'test'])
  for epoch in range(num_epochs):
    for X, y in train_iter:
      # 增加了L2范数惩罚项
      # 广播机制使L2_penalty(w)成为一个长度为batch_size的向量
      l = loss(net(X), y) + lambd * l2_penalty(w)
      l.sum().backward()
      d2l.sgd([w,b], lr, batch_size)
    if (epoch+1)%5 == 0:
      animator.add(epoch+1, (d2l.evaluate_loss(net, train_iter, loss), 
                  d2l.evaluate_loss(net, test_iter, loss)))
  print("w的L2范数是:", torch.norm(w).item())

train(lambd=0)
train(lambd=3)
w的L2范数是: 12.036040306091309  # lambda=0
w的L2范数是: 0.03226672485470772 # lambda=3

lambd = 0
在这里插入图片描述
lambd = 3
在这里插入图片描述

3. QA

  1. pytorch是否支持复数神经网络,nn输入输出权重激活函数都是复数,loss则是一个复数到实数的映射。
    不支持。复数是把一个数做到二维,加一个第二维实现效果,不一定要用复数。

  2. 为什么参数不过大模型复杂度就低呢?
    限制整个模型在优化的时候,是在很小的范围取参数。只能在在一些比较平滑的模型曲线上取参数,这样就学不出一个很复杂的模型。

  3. 如果是L1范数的话如何更新权重?
    把上面的l2_penalty()函数内容,换成torch.abs(w)尝试
    w的L1范数是: 0.7089653015136719

    return torch.sum(torch.abs(w))
    ......
    train(lambd=3)
    

    在这里插入图片描述

  4. 实践中权重衰减的值一般设置为多少好?有时感觉权重衰减的效果并不好
    一般取1e-2, 1e-3, 1e-4 (0.01, 0.001, 0.0001)。 权重衰退有一点点,但是不要太指望这个方法。如果模型很复杂,权重衰退没有很好的效果。可以试下 1e-3,效果不好换别的方法。

  5. 损失函数正则项中的2为什么使用上标而不是下标?之前介绍L2范数使用的是下标,是相同的概念?不太理解不同的数学记法。
    上标是平方的意思L2的平方项,L2范数是在下标有2的,但是L2是默认的范数,所以一般都是省略的。

  6. 为什么要把w往小的啦?如果最优解的w就是比较大的数,那权重衰减是不是会有反作用?
    数据是有噪音的,可能学到的不是真正的最优解,lambda过大过小都会和最优解离得比较远,所以选择的lambda值要合适。

  7. L2 norm理解是让w的值变得更平均,没有突出的值为什么这样调整可以使得拟合更好呢?
    不是让w更平均,而是让值更小一点。当没有lambda学到的范数很大的情况下,可以用lambda往回拉。但模型没有overfitting的时候,往回拉这种操作是没用的。

  8. weight_decay的值一般怎么选择?有哪些实践经验?
    试试1e-3这些值,没效果换方法。

  9. 实际应用中,lambda作为超参数是一次次在训练后调整优化了吗?调整到什么时候达到满意的效果?有什么方法论或最佳实践吗?
    不知道什么时候最优。看看训练集和测试集曲线的差距,调下参数。
    10 在解释数据噪音的时候,说如果噪音越大,w就比较大,是经验所得还是可以证明?
    可以证明。噪音越大,学的w就越大,可以尝试一下。

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

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

相关文章

Mamba 学习

Vision Mamba U-Mamba 以后的趋势&#xff1a; 1.Mamba模型机机制上和transform一样&#xff0c;但是参数量上做了改进&#xff0c;可以直接替代 2.vision上可以实时处理

视频太大怎么压缩变小?8种方法随时压缩视频大小

视频太大怎么压缩变小&#xff1f;视频压缩方式分为两种&#xff0c;有损压缩和无损压缩&#xff0c;什么是有损什么是无损压缩&#xff0c;什么时候视频用无损压缩更好&#xff1f;什么时候用有损压缩更好&#xff1f;如何调整视频参数实现基本无损压缩&#xff1f; 今天就借助…

小红书笔记写作方法和技巧分享,纯干货!

很多小伙伴感叹小红书笔记流量就是一个玄学&#xff0c;有时精心撰写的笔记却没有人看&#xff0c;自己随便写的笔记却轻轻松松上热门。实际上你还是欠点火候&#xff0c;小红书笔记写作是有一套方法和技巧的&#xff0c;总归是有套路的&#xff0c;如果你不知道&#xff0c;请…

数仓建模—物理数据模型

文章目录 数仓建模—物理数据模型什么是物理数据模型物理数据模型示例如何构建物理数据模型物理数据模型与逻辑数据模型逻辑模型和物理模型之间有什么关系逻辑数据模型的好处物理数据模型的好处数仓建模—物理数据模型 前面我们讲了数据模型和逻辑数据模型,你可以参考前面的文…

【JAVA进阶篇教学】第四篇:JDK8中函数式接口

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第四篇&#xff1a;JDK8中函数式接口。 在 Java 8 中&#xff0c;函数式接口是指只包含一个抽象方法的接口。这种接口可以用作 Lambda 表达式的类型&#xff0c;从而使得函数式编程在 Java 中变得更加方便和灵活。下面…

【题解】NC398 腐烂的苹果(多源BFS)

https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34?tpId196&tqId40529&ru/exam/oj 从每个腐烂的苹果开始使用广度优先遍历&#xff08;bfs&#xff09; class Solution {int n, m;int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};vector<v…

C++ STL 容器 deque

目录 1. deque 对象1.1 内部表示1.2 底层数据结构1.3 分段连续1.4 重新分配 2. deque 迭代器 本文测试环境 gcc 13.1 1. deque 对象 1.1 内部表示 deque 为我们提供了一个双端队列&#xff0c;即可以在队头进行 push、pop&#xff0c;可以在队尾进行 push、pop deque 容器擅…

电弧的产生机理

目录&#xff1a; 1、起弧机理 2、电弧特点 3、电弧放电特点 4、实际意义 1&#xff09;电力开关装置 2&#xff09;保险丝 1、起弧机理 电弧的本质是一种气体放电现象&#xff0c;可以理解为绝缘情况下产生的高强度瞬时电流。起弧效果如下图所示&#xff1a; 在电场的…

pyplot+pandas实现操作excel及画图

1、安装jupyter lab pip install jupyterlab # 启动 建议在指定的项目文件夹下 开启cmd窗口并执行 jupyter lab 启动后会自动打开浏览器访问 2、安装依赖 pip install matplotlib pip install xlrd pip install pandas 3、读取excel import pandas as pddf pd.read_excel(hi…

一文带你了解什么是国际短信

什么是国际短信&#xff1f; 国际短信&#xff0c;也叫国际短消息&#xff0c;是指中国大陆以外的国家或地区运营商与用户之间发送和接收短信息的业务&#xff0c;是一种实现国际间沟通交流与信息触达的便捷方式&#xff0c;可广泛应用于出海游戏、跨境电商、在线社交、实体零…

「探索C语言内存:动态内存管理解析」

&#x1f320;先赞后看&#xff0c;不足指正!&#x1f320; &#x1f388;这将对我有很大的帮助&#xff01;&#x1f388; &#x1f4dd;所属专栏&#xff1a;C语言知识 &#x1f4dd;阿哇旭的主页&#xff1a;Awas-Home page 目录 引言 1. 静态内存 2. 动态内存 2.1 动态内…

比特币上最有价值的BRC-20,你了解吗?

BRC20 是比特币网络上发行同质化Token 的实验性格式标准&#xff0c;由domodata 于2023 年3 月8 日基于 Ordinal 协议创建。 类似于以太坊的 ERC20 标准&#xff0c;它规定了以太坊上发行 Token 的名称、发行量、转账等功能&#xff0c;所有基于以太坊开发的 Token 合约都遵守这…

计算机视觉——DiffYOLO 改进YOLO与扩散模型的抗噪声目标检测

概述 物体检测技术在图像处理和计算机视觉中发挥着重要作用。其中&#xff0c;YOLO 系列等型号因其高性能和高效率而备受关注。然而&#xff0c;在现实生活中&#xff0c;并非所有数据都是高质量的。在低质量数据集中&#xff0c;更难准确检测物体。为了解决这个问题&#xff…

axios 请求中断和请求重试

请求中断​ 请求已经发出去了&#xff0c;如何取消掉这个已经发出去的请求&#xff1f; 微信扫码体验一下 &#xff08;说不定哪天你就用得上&#xff09; 用途&#xff1a; 比如取消正在下载中的文件点击不同的下拉框选项&#xff0c;向服务器发送新请求但携带不同的参数&…

解决系统报错:此应用无法在你的电脑上运行

在开发过程中不知从何时起&#xff0c;使用电脑时过程中不断的都显示“此应用无法在你的电脑上运行”&#xff0c;让人非常恶心&#xff0c;一直以为是系统误操作了什么或误安了软件 百度的答案就是让你找到报错的软件用兼容模式运行。而我连报错的软件都不知道&#xff0c;让人…

盲人盲杖:科技革新,助力视障人士独立出行

在我们的社会中&#xff0c;盲人朋友们以其坚韧的精神风貌&#xff0c;生动诠释着生活的多样与可能。然而&#xff0c;当我们聚焦于他们的日常出行&#xff0c;那些普通人视为寻常的街道、路口&#xff0c;却成为他们必须面对的严峻挑战。如何切实提升盲人盲杖的功能&#xff0…

怎么检查3d模型里的垃圾文件---模大狮模型网

在处理3D模型时&#xff0c;经常会遇到一些不必要的垃圾文件&#xff0c;它们可能占据硬盘空间&#xff0c;增加文件大小&#xff0c;甚至影响模型的性能和质量。因此&#xff0c;及时检查和清理这些垃圾文件对于优化工作流程和提高效率非常重要。在本文中&#xff0c;我们将介…

利用Python进行大规模数据处理【第173篇—数据处理】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行大规模数据处理&#xff1a;Hadoop与Spark的对比 随着数据量的不断增长&…

CSS中position属性总结

CSS中position属性的总结 如果我的文章看不懂&#xff0c;不要犹豫&#xff0c;请直接看阮一峰大佬写的文章 https://www.ruanyifeng.com/blog/2019/11/css-position.html 1 干嘛用的 用来定位HTML元素位置的&#xff0c;通过top、bottom、right、left定位元素 分别有这些值&a…

【DM8】ODBC

官网下载ODBC https://www.unixodbc.org/ 上传到linux系统中 /mnt下 [rootstudy ~]#cd /mnt [rootstudy mnt]# tar -zxvf unixODBC-2.3.12.tar.gz [rootstudy mnt]# cd unixODBC-2.3.12/ [rootstudy unixODBC-2.3.12]# ./configure 注意&#xff1a;若是报以上错 则是gcc未安…