【pytorch13】激活函数及梯度

什么是激活函数

计算机科学家借鉴生物的神经元机制发明了计算机上的模型,这个模型与生物的神经元非常类似
>
激活的意思就是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的话梯度信息就是正的,其他的都是负的

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

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

相关文章

地级市空气质量指数AQI、环境污染PM2.5、SO2

2015-2021年地级市月度空气质量数据&#xff08;AQI、SO2、NO2、PM2.5、PM10、O3、CO&#xff09; 目录 探究环境污染对经济增长的影响 一、引言 二、数据来源与描述性统计 三、实证模型 &#xff08;一&#xff09;模型设定 &#xff08;二&#xff09;变量说明 四、程…

混元大模型加持,微信输入法开启AI问答新体验

在人工智能技术飞速发展的今天&#xff0c;微信作为全球最大的社交平台之一&#xff0c;一直在不断地探索和创新&#xff0c;以提供更智能、更便捷的用户体验。 最近&#xff0c;微信官方宣布了一个令人兴奋的消息&#xff1a;微信输入法正式上线了“一键AI问答”功能&#xf…

【Python机器学习】算法链与管道——通用的管道接口

Pipeline类补单可以用于预处理和分类&#xff0c;实际上还可以将任意数量的估计器连接在一起。例如&#xff0c;我们可以构建一个包含特征提取、特征选择、缩放和分类的管道&#xff0c;总共有4个步骤。同样的&#xff0c;最后一步可以用聚类或回归代替。 对于管道中估计器的唯…

【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛

参赛链接&#xff1a;零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨…

警翼警用记录仪视频格式化后恢复方法

警翼是国内较大的一家警用记录仪厂商&#xff0c;此品牌我们恢复过很多&#xff0c;此次遇到的是一个典型的误格式化的情况&#xff0c;我们来看看误格式化后如何恢复。 故障存储: 32G卡/fat32 故障现象: 客户提供的信息是在交接设备后没有及时备份而做出了初始化设备的操…

fluwx插件实现微信支付

Flutter开发使用fluwx插件实现微信支付&#xff0c;代码量不多&#xff0c;复杂的是安卓和iOS的各种配置。 在 pubspec.yaml 文件中添加fluwx依赖 fluwx: ^4.5.5 使用方法 通过fluwx注册微信Api await Fluwx().registerApi(appId: wxea7a1c53d9e5849d, universalLink: htt…

机器人控制系列教程之Delta机器人动力学分析

动力学简介 机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。 意义:对并联机器人动力学分析的意义体现在: 为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提…

内容为王:揭秘顶尖品牌的内容营销制胜法宝

内容营销是当今互联网市场推广领域的热门话题&#xff0c;因为它可以帮助企业更好地与受众沟通、建立品牌口碑&#xff0c;增加销售量。 根据咱们何策网的资源库里的SocialBeta2024年最新《2024 内容营销 10 大趋势》的报告来看&#xff0c;品牌在未来内容营销中最应该注重的是…

2024亚太杯中文赛数学建模B题【洪水灾害的数据分析与预测】思路详解

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛 B题 洪水灾害的数据分析与预测 附件 train.csv 中提供了超过 100 万的洪水数据&#xff0c;其中包含洪水事件的 id、季风强度、地形排水、河流管理、森林砍伐、城市化、气候变化、大坝质量、淤积、农业实践、侵蚀、无效防灾、…

Unity 之基于URP使用UniStorm Weather System天气系统

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之基于URP使用UniStorm Weather System天气系统 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中&#xff08;不考虑缓存&#xff09; 任何程序在运行之前都的加入到内存。 eip->pc指针&#xff0c;指明当前指令在什么位置。 代码大概率是从上往下执行的&#xff0c;基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

智能猫砂盆到底哪家好用?自费实测聚宠、糯雪、CEWEY真实反馈!

快到夏天了&#xff0c;是不是还有人因为没挑选到喜欢的智能猫砂盆而苦恼着&#xff1f;太便宜怕不好用&#xff0c;太贵怕质量比不上价格。来来去去拖到现在还没决定&#xff0c;我作为养了四年猫的资深铲屎官&#xff0c;今天就来给大家传授经验&#xff0c;关于我是怎么从好…

从源码到应用:直播电商系统与短视频带货APP开发指南

本篇文章&#xff0c;笔者将从源码到应用&#xff0c;详细探讨如何开发一个直播电商系统和短视频带货APP。 一、系统架构设计 在开始开发之前&#xff0c;首先需要对系统进行整体架构设计。一个完整的直播电商系统和短视频带货APP主要包括以下几个模块&#xff1a; 1.用户管理…

Android12 MultiMedia框架之MediaExtractorService

上节学到setDataSource()时会创建各种Source&#xff0c;source用来读取音视频源文件&#xff0c;读取到之后需要demux出音、视频、字幕数据流&#xff0c;然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的&#xff1f;这里暂时不考虑APP创建…

UE5.4新功能 - Texture Graph上手简介

TextureGraph是UE5.4还在实验(Experimental)阶段的新功能&#xff0c;该功能旨在材质生成方面达到类似Subtance Designer的效果&#xff0c;从而程序化的生成一些纹理。 本文就来简要学习一下。 1.使用UE5.4或以上版本&#xff0c;激活TextureGraph插件 2.内容视图中右键找到…

day11_homework_need2submit

Homework 编写—个将ts或mp4中视频文件解码到yuv的程序 yuv数据可以使用如下命令播放: ffplay -i output yuv-pix_fmt yuv420p-s 1024x436 要求: ffmpeg解析到avpacket并打印出pts和dts字段完成解码到avframe并打印任意字段完成yuv数据保存 // teminal orders on bash cd ex…

6 矩阵相关案例

矩阵计算在CUDA中的应用是并行计算领域的典型场景 &#xff1b; 矩阵算法题通常涉及线性代数的基础知识&#xff0c;以及对数据结构和算法的深入理解。解决这类问题时&#xff0c;掌握一些核心思想和技巧会非常有帮助。以下是一些常见的矩阵算法题解题思想&#xff1a; 动态规划…

stm32——定时器级联

在STM32当中扩展定时范围&#xff1a;单个定时器的定时长度可能无法满足某些应用的需求。通过级联&#xff0c;可以实现更长时间的定时&#xff1b;提高定时精度&#xff1a;能够在长定时的基础上&#xff0c;通过合理配置&#xff0c;实现更精细的定时控制&#xff1b;处理复杂…

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档&#xff1a;全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本&#xff1a;11以下&#xff0c;比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

vector与list的简单介绍

1. 标准库中的vector类的介绍&#xff1a; vector是表示大小可以变化的数组的序列容器。 就像数组一样&#xff0c;vector对其元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素&#xff0c;并且与数组中的元素一样高效。但与数…