【pytorch13】激活函数及梯度

news2025/1/16 17:06:55

什么是激活函数

计算机科学家借鉴生物的神经元机制发明了计算机上的模型,这个模型与生物的神经元非常类似
>
激活的意思就是z变量要大于0,这一个节点才会激活,否则就会处于睡眠状态不会输出电平值

该激活函数在z=0处不可导,因此不能直接使用梯度下降进行优化,使用了启发式搜索的方法来求解单层感知机最优解的情况

sigmoid

为了解决单层感知机激活函数不可导的情况,提出了一个连续的光滑的函数即sigmoid函数或者叫logistic
在这里插入图片描述
sigmoid函数z=0的时候值为0.5,最大值是接近于1,最小值是接近于0

比较适合生物学上的神经元,也就是说当z比较小的时候,接近于一个不响应的状态,z很大的时候我这个响应也不会很大会慢慢接近于1,相当于一个压缩的功能,把(-∞,+∞)Z的这样的值压缩到一个有限的范围中间,比如(0,1)

该函数的导数在负无穷的时候接近于0,到z=0的时候会出现最大值,再慢慢导数再变成0
在这里插入图片描述

有一个缺陷:loss长时间保持不变,梯度弥散

torch.sigmoid和F.sigmoid是一样的
F是一个模块的别名,是torch.nn.functional
在这里插入图片描述

z的值接近于-100的时候,sigmoid的值已经接近于0了,取100的时候,sigmoid接近于1

Tanh

在RNN(循环神经网络)中使用较多

在这里插入图片描述

可以由sigmoid变化而来,将x压缩二分之一,y放大两倍,再减去1

区间从(-1,1)

在这里插入图片描述

ReLu

z小于0不响应,z大于0就线性响应,非常合适做深度学习

在这里插入图片描述
当z<0,梯度是0;z>0的时候,梯度是1,因为梯度是1,可以导致梯度计算起来非常方便,不会放大也不会缩小,因此对于搜索最优解,relu函数存在优势,不会出现梯度弥散和梯度爆炸的情况
在这里插入图片描述

loss以及loss的梯度

  • Mean Squared Error (均方差)
  • Cross Entropy Loss(用于分类中的误差)
    • binary(二分类)
    • multi-class(多分类)
    • +softmax(一般跟softmax激活函数一起使用)
    • leave it to logistic regression part

MSE

在这里插入图片描述
MSE的基本形式就是y的实际值减去模型输出的值

MSE与L2-norm是有一定区别的,对于第一个tensor y1和第二个tensor xw+b 设其为y2,l2 norm是对应元素相减再开根号,如下
在这里插入图片描述
所以跟MSE还是有区别的,MSE是没有开根号这个步骤的

如果要用norm函数来求解MSE,需求平方,比如说
torch.norm(y-pred,2).pow(2)第二个参数是给出 L几-norm,一定要加一个pow(2)

MSE梯度求解情况

在这里插入图片描述

使用pytorch自动求导

在这里插入图片描述
x初始化为1 w初始化为dimension为1,长度为1,值为2的tensor,b为0

求解MSE可以使用torch.norm加平方,也可以使用F.mse_loss第一个参数给的是predict的值,第二个参数给的是真实值,因为是平方所以这里顺序乱了也没有关系

使用torch.autograd.grad接收两个参数,第一个参数是y,第二个参数是[x1,x2,…](即有多少个自变量,要对多少个自变量求导),对于深度学习来说,第一个参数就是predict,第二个参数是[w1,w2,…]这种参数

直接使用MSE也就是输出的这个loss对W求导的时候,上图返回该参数不需要求导的ERROR,出现该错误的根本原因是w初始化的时候没有设置为需要导出信息,因此pytorch在建图的时候对w标注了不需要求导信息,这样对w求导就会触发错误
需要使用requires_grad进行更新,但是更新完之后还是会报错,因为pytorch是一个动态图,这里更新了w但是图还没有更新,pytorch是做一步计算,一步图,所以w更新之后,图还是用的原来的图,所以还是会出现原来的错误

使用另一种方法
在这里插入图片描述
首先也是要用F.mse_loss动态图建图,直接在loss上使用backward(表示向后传播),自动对这个图(在完成前向传播的时候建图的过程中会记录下来这个图的所有路径,因此在最后的loss节点调用backward的时候,会自动的从后往前传播,完成路径上所有需要梯度的tensor的gradient的计算方法,计算的gradient不会再返回出来,会自动把所有的gradient信息附加在每个tensor的成员变量上面)

在这里插入图片描述

softmax

在这里插入图片描述
首先对于三个节点的输出,如果把这个数值转换成一个概率的话,希望概率最大的那个值做预测的Label,比如这里输入的索引是0,1,2,我们希望数值最大的值所在的索引作为我们预测的label,因此2.0最大,把2.0所在的索引0作为我们预测的一个label,因为probability是属于一个区间的(0~1这样的范围),我们需要把这个值转换成一个probability的话必须人为的压缩到这样的一个空间,可以使用sigmoid函数把值压缩到0 ~ 1的区间,但是对于一个分类问题来说一个物体属于哪个类是有一个概率的属性的(即物体属于x分类的概率,y分类的概率,z分类的概率等)总是属于着三个分类中的一种,因此这三个分类加起来总是会等于1,即sigmoid并不能表述所有输出节点的概率相加为1的情况,会把原来大的放大,原来小的压缩到密集的空间

在这里插入图片描述

a i a_{i} ai经过softmax得到 p i p_{i} pi p i p_{i} pi a j a_{j} aj求导,假设i=j时如右图所示,softmax的梯度等于
在这里插入图片描述
之所以要利用 p j p_{j} pj的输出是因为神经网络向前传播的时候,这些值是已知的可以直接得到,因此向后传播的时候不需要额外计算,只需要利用这个公式就可以一次求出

当i不等于j的时候
在这里插入图片描述
i不等于j的时候
在这里插入图片描述

总结
在这里插入图片描述
i=j时偏导时正数,不相等时是负数

在这里插入图片描述
loss必须只有一个量[1],否则就会有逻辑错误,这里p.shape为[3],因此在求梯度的时候不能直接传入p,只能对中的变量进行求导,此时图中是 p 1 p_{1} p1 a i a_{i} ai i属于[0,2],所以会返回dimension为1 长度为3 的tensor,其中第一个元素表示 p 1 p_{1} p1 a 0 a_{0} a0求偏导以此类推,可以看出如果i等于j的话梯度信息就是正的,其他的都是负的

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

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

相关文章

[k8s生产系列]:k8s集群故障恢复,etcd数据不一致,kubernetes集群异常

文章目录 摘要1 背景说明2 故障排查2.1 查询docker与kubelet状态2.2 查看kubelet服务日志2.3 重启docker与kubelet服务2.3.1 首先kubelet启动起来了&#xff0c;但是报错master节点找不到2.3.2 查询kubernetes集群服务&#xff0c;发现etcd与kube-apiserver均启动异常 2.4 etcd…

Aavegotchi的Gotchiverse新地图: 沉睡的野兽即将苏醒!

Gotchi 守护者们&#xff0c;准备好了&#xff0c;因为我们要大开杀戒了&#xff01; 加入我们吧&#xff08;后果自负&#xff01;&#xff09;&#xff0c;我们将深入Gotchiverse&#xff0c;前往奥姆夫山--我们虚拟世界中所有 FOMO 的炽热源头。 请继续阅读&#xff0c;了解…

vue中的坑·

常规 1.使用watch时&#xff0c;immediate true会在dom挂载前执行 2.使用this.$attrs和props 可以获取上层非原生属性&#xff08;class/id&#xff09; 多层次嵌套引用 设置的时候直接赋值&#xff0c;修改的时候即使用的双向绑定加上$set / nextick / fouceUpdate都不会同步…

关于Ubuntu系统中.config文件夹如何找到

Ubuntu中QT项目使用了setting保存配置&#xff0c;但是找不到配置文件保存了在哪里&#xff0c;找了一下&#xff1a; 因为QT里取的名字是&#xff1a; 于是下载everything搜索Nio&#xff0c;发现目录为/home/nio/.config 虽然已经下载了everything找到了&#xff0c;但是发现…

spring boot读取yml配置注意点记录

问题1&#xff1a;yml中配置的值加载到代码后值变了。 现场yml配置如下&#xff1a; type-maps:infos:data_register: 0ns_xzdy: 010000ns_zldy: 020000ns_yl: 030000ns_jzjz: 040000ns_ggglyggfwjz: 050000ns_syffyjz: 060000ns_gyjz: 070000ns_ccywljz: 080000ns_qtjz: 090…

通讯录(C语言详细版)

1. 前言 通讯录是在动态顺序表的基础上实现的&#xff0c;其实就是顺序表的每个元素存储的不再是数字&#xff0c;而是存储一个联系人的结构体&#xff0c;所以如果有些小伙伴看不懂的话&#xff0c;可以移步参考一下动态顺序表的实现&#xff1a;顺序表&#xff08;C语言详细…

强强联合!当RAG遇到长上下文,滑铁卢大学发布LongRAG,效果领先GPT-4 Turbo 50%

过犹不及——《论语先进》 大学考试时&#xff0c;有些老师允许带备cheet sheet&#xff08;忘纸条&#xff09;,上面记着关键公式和定义,帮助我们快速作答提高分数。传统的检索增强生成(RAG)方法也类似,试图找出精准的知识片段来辅助大语言模型(LLM)。 但这种方法其实有问题…

Oracle Database 23ai新特性:DB_DEVELOPER_ROLE角色

角色介绍 从 Oracle Database 23ai 开始&#xff0c;新角色“DB_DEVELOPER_ROLE”允许管理员快速分配开发人员为 Oracle 数据库设计、构建和部署应用程序所需的所有必要权限。&#xff08;包括构建数据模型所需的系统权限以及监视和调试应用程序所需的对象权限&#xff09;。通…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

价格很实惠,希喂、爱立方、生生不息主食冻干抗得住实测吗?

在挑选主食冻干时&#xff0c;许多宠物主人都会感到头疼。尽管主食冻干相较于普通猫粮具有诸多优势&#xff0c;但其价格也相对高昂。这导致许多宠物主人担心高价购买的主食冻干可能营养价值并不理想。然而&#xff0c;在选择时&#xff0c;我们还需要考虑其他重要因素&#xf…

精密微型导轨加工工艺流程!

微型导轨是一种用于小型化机械设备和机床上的一种传动部件&#xff0c;多用于精密设备上&#xff0c;主要作用是支撑和导向滑块运动。想要让微型导轨长期保持高精度、高耐磨、高寿命、高效率运作&#xff0c;加工工艺是非常关键的步骤。 微型导轨的制造工艺主要包括机械加工、热…

三、【源码】Bean有参构造实例化

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/03-parameter-constructor-instantiation Bean有参构造实例化 有参构造的实例化分两种&#xff1a; java自带的反射cglib代…

手把手教程教你_一键获取安居客全国小区数据

软件简介 安居客二手房小区全国实时数据&#xff0c;含小区名称、价格、地区、地址、商圈、标签、经纬度、物业类型、交易权属、竣工时间、产权年限、开发商、总户数、总建面积、绿化率、容积率、统一供暖 供水供电、停车位、停车费、物业费、物业公司 车位管理费、在售房源、…

应用案例 | 基于物联网工控屏的工业离心机设备监控系统

案例概况 客户&#xff1a;博鲁班特&#xff08;BROADBENT&#xff09; 应用产品&#xff1a;宏集物联网工控屏 应用场景&#xff1a;离心机设备监控系统 一、前言 在现代工业生产中&#xff0c;离心机作为关键的分离设备&#xff0c;在生产过程中扮演着至关重要的角色。随…

创新驱动,智享未来:电动车仪表盘之蓝牙芯方案

电动车行业不断发展的浪潮中&#xff0c;我们自豪地推出引领时代的电动车仪表盘蓝牙芯方案&#xff0c;为您的骑行之旅带来前所未有的智能与便捷。 精准掌控&#xff0c;一目了然 我们的蓝牙芯方案搭载了高性能BLE 5.0蓝牙芯片-HS6621CG-C 内核ARM Cortex-M4F, max 64MHZ,SRAM…

期权开户零门槛怎么操作?期权不满50w的开户方式

今天带你了解期权开户零门槛怎么操作&#xff1f;期权不满50w的开户方式。在股票期权市场上&#xff0c;期权交易是一种非常受欢迎的投资方式。它不仅可以增加投资组合的多样性&#xff0c;还可以为投资者提供一定的保护和利润机会&#xff0c;比如通过买入认股期权做空对冲大盘…

新建vue3项目

提示&#xff1a;请确定自己已将安装好环境以及一系列用到的工具包&#xff0c;例如node&#xff08;10以上&#xff09;&#xff0c;pnpm或npm vue官网&#xff1a;https://cn.vuejs.org/ vue-cli官网&#xff1a;Vue CLI vite官网&#xff1a;Vite | 下一代的前端工具链 …

高薪程序员必修课-Java中 Synchronized和ReentrantLock有哪些不同?

目录 前言 1. 原理和基础 synchronized ReentrantLock 2. 功能比较 2.1 锁的可重入性 示例&#xff1a; 2.2 锁的公平性 示例&#xff1a; 2.3 锁的中断响应 示例&#xff1a; 2.4 尝试锁定 示例&#xff1a; 2.5 条件变量 示例&#xff1a; 3. 性能比较 4. 使…

【CT】LeetCode手撕—232. 用栈实现队列

目录 题目1- 思路2- 实现⭐232. 用栈实现队列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;232. 用栈实现队列 1- 思路 思路 ① 用两个栈来实现队列&#xff0c;一个 in 入栈 和一个 out 出栈② push 入队&#xff1a;入栈逻辑&#xff1a;即将元素加入到 in 栈 里即…

基于Redisson实现分布式锁

基于redisson实现分布式锁 之前背过分布式锁几种实现方案的八股文&#xff0c;但是并没有真正自己实操过。现在对AOP有了更深一点的理解&#xff0c;就自己来实现一遍。 1、分布式锁的基础知识 分布式锁是相对于普通的锁的。普通的锁在具体的方法层面去锁&#xff0c;单体应…