2022秋招算法岗面经题:训练模型时loss除以10和学习率除以10真的等价吗(SGD等价,Adam不等价)

news/2023/5/28 7:15:56

问题描述:训练深度学习模型时loss除以10和学习率除以10等价吗?

先说结论

这个问题的答案与优化器有关

  1. 使用Adam、Adagrad、RMSprop等带有二阶动量vtv_tvt的优化器训练时,当我们将loss除以10,对训练几乎没有影响。
  2. 使用SGD、Momentum SGD等,将loss除以10,会对训练有影响,并且这个影响和学习率除以10是等价的。

具体分析

在这里插入图片描述

Adam
当使用Adam优化器时,若将loss扩大sss倍,则梯度gtg_tgt扩大sss倍,由于mtm_tmtgtg_tgt的累加,vtv_tvtgt2g_t^2gt2的累加,且m^t\hat m_tm^tmtm_tmt是线性关系,v^t\hat v_tv^tvtv_tvt的线性关系,所以Adam的更新公式变成如下形式:
θt=θt−1−αs∗m^ts2∗v^t+ϵ=θt−1−αm^tv^t+ϵ/s≈θt−1−αm^tv^t+ϵ\theta_t=\theta_{t-1}-\alpha \frac{s * \hat{m}_t}{\sqrt{s^2 * \hat{v}_t}+\epsilon}=\theta_{t-1}-\alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon / s}\approx \theta_{t-1}-\alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} θt=θt1αs2v^t+ϵsm^t=θt1αv^t+ϵ/sm^tθt1αv^t+ϵm^t
ϵ/s\epsilon/sϵ/s相对于v^t\sqrt{\hat{v}_t}v^t是一个很小的量时,上面的约等于就相当于等号了。


现在我们可以尝试回答下面的问题了

问题:“在使用adam的情况下,如果人为把loss 扩大10倍,对adam来讲,会有什么影响?可以通过调整学习率来缓解这个影响吗?”

  • 对于Adam而言,如果人为把loss扩大10倍,对参数梯度更新没有什么影响;
  • Adam学习率乘上10000,对于参数更新影响巨大。

你如果不相信这个结果,那我们可以写个代码来验证下:

import torch
import torch.nn as nn
torch.manual_seed(20)class FCModel(nn.Module):def __init__(self):super().__init__()self.linear = nn.Sequential(nn.Linear(6, 6),nn.ReLU(),nn.Linear(6, 1),nn.Sigmoid())def forward(self, x):return self.linear(x ** 2).exp()# reload: ensure same initialization
fc = FCModel()
torch.save(fc, 'fc.pth.tar')
fc1 = torch.load('fc.pth.tar')
fc2 = torch.load('fc.pth.tar')# optimizer1 = torch.optim.SGD(fc1.parameters(), lr=0.01 * 10000)
# optimizer2 = torch.optim.SGD(fc2.parameters(), lr=0.01)optimizer1 = torch.optim.Adam(fc1.parameters(), lr=0.01)
optimizer2 = torch.optim.Adam(fc2.parameters(), lr=0.01)
# optimizer2 = torch.optim.Adam(fc2.parameters(), lr=0.01 * 10000)for i in range(20):input1 = torch.rand(1, 6)label1 = torch.rand(1,)output1 = fc1(input1)loss1 = label1 - output1optimizer1.zero_grad()loss1.backward()optimizer1.step()input2 = input1.clone()label2 = label1.clone()output2 = fc2(input2)loss2 = (label2 - output2) * 10000optimizer2.zero_grad()loss2.backward()optimizer2.step()print("fc1: {}".format(i), fc1.linear[0].weight)print("fc2: {}".format(i), fc2.linear[0].weight)print()

在这里插入图片描述

思考题:多任务学习为什么可以 a*loss1 + b*loss2来平衡不同任务?

说到这里我有个疑问:既然对于Adam优化器,我loss除以10对训练情况几乎没有影响,那为什么在多任务学习中常用a*loss1 + b*loss2这种方式来平衡不同任务的学习呢?

后来我想了想,a*loss1确实可以让梯度g1扩大a倍,b*loss2也确实可以让梯度g2扩大b倍,这没有错,但是在Adam里面把这两个梯度加在一起进行平方的,当a和b不相同时,就没有办法提取出相同的倍数,然后分子分母消掉了,因此a*loss1 + b*loss2这种方式确实可以权衡不同任务训练时的重要性。

具体分析如下:在这里插入图片描述

我们继续写个代码来验证下结论:

import torch
import torch.nn as nntorch.manual_seed(20)class FCModel(nn.Module):def __init__(self):super().__init__()self.linear = nn.Sequential(nn.Linear(6, 6),nn.ReLU(),nn.Linear(6, 1),nn.Sigmoid())def forward(self, x):return self.linear(x ** 2).exp()# reload: ensure same initialization
fc = FCModel()
torch.save(fc, 'fc.pth.tar')
fc1 = torch.load('fc.pth.tar')
fc2 = torch.load('fc.pth.tar')# optimizer1 = torch.optim.SGD(fc1.parameters(), lr=0.01 * 10000)
# optimizer2 = torch.optim.SGD(fc2.parameters(), lr=0.01)optimizer1 = torch.optim.Adam(fc1.parameters(), lr=0.01)
optimizer2 = torch.optim.Adam(fc2.parameters(), lr=0.01)
# optimizer2 = torch.optim.Adam(fc2.parameters(), lr=0.01 * 10000)for i in range(20):input1 = torch.rand(1, 6)label1 = torch.rand(1, )output1 = fc1(input1)loss11 = label1 - output1loss12 = label1 + output1loss13 = loss11 + loss12optimizer1.zero_grad()loss13.backward()optimizer1.step()input2 = input1.clone()label2 = label1.clone()output2 = fc2(input2)loss21 = label2 - output2loss22 = label2 + output2loss23 = loss21 + 100 * loss22optimizer2.zero_grad()loss23.backward()optimizer2.step()print("fc1: {}".format(i), fc1.linear[0].weight)print("fc2: {}".format(i), fc2.linear[0].weight)print()

可以看到两者的参数更新情况是不一样的
在这里插入图片描述

相关资料

  • 知乎:https://www.zhihu.com/question/320377013
  • 面试题:2022年互联网秋招算法岗,被虐经历

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【H5小游戏】-使用js复刻经典小游戏【接鸡蛋】,快来帮助鸡妈妈找回蛋宝宝吧

接鸡蛋游戏需求👇核心玩法👇👇界面原型👇👇成品演示👇1.游戏演示2.暂停演示游戏开发1.游戏素材准备2.代码实现1.创建index.html页面复刻经典小游戏【接鸡蛋】,快来帮助鸡妈妈找回它的蛋宝宝吧 …

C语言枚举法应用题目,又直观又好用的枚举法

原标题:又直观又好用的枚举法又直观又好用的枚举法枚举法又称为穷举法,适用于以下两种情况:1、当题目出现操作次数比较少或者要比较的数据(题目或选项)比较小时,优先考虑枚举法。2、当题目出现操作过程一致或者要比较的数据非常大…

百钱买百鸡(枚举法)

百钱买百鸡(枚举法)(不断优化) 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 题目1:用100文钱…

暴力枚举法

暴力枚举法 思路及算法 最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一…

【枚举法(穷举法)】

枚举法(穷举法) 定义 在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么该结论是可靠的,这种归纳方法叫做枚举法。 基本思想 在分析实际问题时,通过循环或者递归逐…

计算机控制考试题,计算机控制考试题目整理.doc

计算机控制考试题目整理.doc (7页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.90 积分简答题1.3 计算机控制系统的典型形式有哪些?各有什么优缺点? 答&#…

ubuntu安装goaccess监控(docker可参考)

ubuntu安装goaccess监控(###启动的docker容器是使用ubuntu镜像创建,在创建好容器后中文乱码,提前创建好环境变量,附:docker run -itd --name (名) --env LANGC.UTF-8 镜像名###) ro…

prometheus存储

目录 一:prometheus架构 二:存储 1.本地存储 磁盘大小计算 为什么默认两个小时存储一次数据,写成一个chuck块文件? 最新写入的2 小时数据保存在内存中 数据大内存问题 如何防止断电程序崩溃数据丢失 数据存储方式 删除数…

ceph系统原理 细节 benchmark 不完全说明

ceph系统原理 细节 benchmark 不完全说明 转载请说明出处: http://blog.csdn.net/XingKong_678/article/details/51473988 1 流程说明 1.1 应用 1) RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RADOS GW提供…

Tomcat默认页面修改

博文大纲: 一、Tomcat介绍 二、部署Tomcat 三、定义Tomcat多实例 四、配置Tomcat自定义目录 五、开启Tomcat目录遍历 六、使用Tomcat实时监控JVM虚拟机资源使用情况 七、开启JMX远程调试功能 八、开启https页面一、 Tomcat介绍 Tomcat服务器是一个免费的开放源代码的…

韦东山第三期视频监控mjpg_streamer实验的注意事项--最终能看到结果

这是原来视频给出的步骤: 讲解mjpg-streamer 1. 如何将mjpg-streamer移植到开发板上 文件系统:fs_mini_mdev_new_auto_wifi_ap.tar.bz2 (1) libjpeg 的移植 tar xzvf libjpeg-turbo-1.2.1.tar.gz cd libjpeg-turbo-1.2.1 mkdir tmp ./configure --pref…

【 云原生 | kubernetes 】- 资源监控之Metrics server

Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。 从 kubelet 公开的 Summary API 中采集指标信息, 以供 HPA 和 VPA 使用。我们可以通过kubectl top命令查看资源信息。 HPA: HorizontalPodAutoscaler 根据观察到的 CPU 利用率, 自…

java后端-servlet超详细入门

java后端介绍今天我正式开始了一个新话题,那就是 Web。目前我主要会介绍后端。作为后端的老大哥 java,也有很多后端框架,比如大家耳熟能详的 spring 等。今天来带大家入门 servlet,不管是学生,刚毕业或是已经工作自学编…

Nginx日志监控工具

ngxtop是一个基于python的程序,可以在Python上安装。ngxtop通过实时解析nginx访问日志, 并将结果(nginx服务器的有用指标)输出到终端。 主要的功能 当前有效请求 总请求计数摘要 按状态代码提供的总请求数(2xx&#…

物联网之Z24400-linux

1.基本命令集 mkdit:新建目录 touch:新建文件 cp:复制 rm:删除文件 rmdir:删除目录 cat:将文件内容显示到终端中 clear:清除屏幕显示的内容2.搭建环境变量,运行程序 bookwww.:~$ export PATH$PATH:/home/book bookwww.:~$ echo $PATH /home…

企业运维之kubernetes监控

目录 1.kubernetets容器资源限制 2.kubernetes资源监控 3.Helm 1.kubernetets容器资源限制 Kubernetes采用request和limit两种限制类型来对资源进行分配 • request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod • limit(资源限额)&…

主要国家/地区高端人才培育措施

导读:数字产业的发展依赖于科技创新人才,各国对高端人才培养和未来科学教育体系的发展提出了新的方向和理念,在战略部署中不断加强基础教育、人才引进及技能培训等。全球主要经济体高端人才培养战略侧重点不同。美国将人才教育纳入战略优先事…

智利移民:国家最近移民变化

智利是世界上铜矿资源最丰富的国家,它还是世界上唯一生产硝石的国家。智利在新闻自由、人类发展指数、民主发展等方面也获得了很高的排名。智利教育高度发达,其教育在发达国家普遍承认。由于地处美洲大陆的最南端,与南极洲隔海相望&#xff0…

新西兰计算机工作好找么,去新西兰留学真的很差么?我看到有很多人都说那边的学习氛围不好而且毕业了不好找工作·········...

去新西兰留学真的很差么?我看到有很多人都说那边的学习氛围不好而且毕业了不好找工作以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!去新西兰留学真的很差么?我看到有…

霍金没有提 AI 威胁论,他的新目标是带领人类移民外星球(上篇)

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~作者:AI科技大本营 今天,第五届腾讯WE大会在京举行,“超级网红”,“黑洞”理论提出者,剑桥大学教授史蒂夫霍金霍金,突破摄星执行董事、…