【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的话梯度信息就是正的,其他的都是负的

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

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

相关文章

Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户填充功能

文章目录 什么是 AOP &#xff1f;.Net Core 中 有哪些 AOP 框架&#xff1f;基于 Castle DynamicProxy 实现 AOPIOC中使用 Castle DynamicProxy实现事务管理实现用户自动填充 什么是 AOP &#xff1f; AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&a…

OpenCV——把YOLO格式的图片目标截图,并按目标类别保存

import os import cv2def get_class_folder(catagetory,class_id, base_folder):# 根据类别ID创建文件夹路径class_folder os.path.join(base_folder, catagetory[int(class_id)])if not os.path.exists(class_folder):os.makedirs(class_folder)return class_folderdef crop_…

VPN是什么?

VPN&#xff0c;全称Virtual Private Network&#xff0c;即“虚拟私人网络”&#xff0c;是一种在公共网络&#xff08;如互联网&#xff09;上建立加密、安全的连接通道的技术。简单来说&#xff0c;VPN就像是一条在公共道路上铺设的“秘密隧道”&#xff0c;通过这条隧道传输…

图像的反转

图像颜色的反转一般分为两种&#xff1a;一种是灰度图片的颜色反转&#xff0c;另一种是彩色图像的颜色反转。 本节使用的原图如下&#xff1a; 1.1 灰度图像颜色反转 灰度图像每个像素点只有一个像素值来表示&#xff0c;色彩范围在0-255之间&#xff0c;反转方法255-当前像…

信创产业政策,信创测试方面

信创产业的政策支持主要体现在多个方面&#xff0c;这些政策旨在推动产业的快速发展&#xff0c;加强自主创新能力&#xff0c;保障国家信息安全&#xff0c;以及促进产业结构的优化升级。 首先&#xff0c;政府通过财政支持、税收优惠等方式&#xff0c;加大对信创产业的资金…

8.ApplicationContext常见实现

ClassPathXmlApplicationContext 基于classpath下xml格式的配置文件来创建 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…

Flutter——最详细(Drawer)使用教程

背景 应用左侧或右侧导航面板&#xff1b; 属性作用elevation相当于阴影的大小 import package:flutter/material.dart;class CustomDrawer extends StatelessWidget {const CustomDrawer({Key? key}) : super(key: key);overrideWidget build(BuildContext context) {return…

解决SeaTunnel 2.3.4版本写入S3文件报错问题

在使用Apache SeaTunnel时&#xff0c;我遇到了一个写入S3文件的报错问题。通过深入调试和分析&#xff0c;找到了问题所在&#xff0c;并提出了相应的解决方案。 本文将详细介绍报错情况、参考资料、解决思路以及后续研究方向&#xff0c;希望对大家有帮助&#xff01; 一、…

代码随想录算法训练营第二天|【数组】977.有序数组的平方

题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组…

修改头文件版本需要修改的文件

以修改ui的头文件版本为例&#xff0c;还需要同时更新 PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include\dsp PJ10PC20240120041_c928\components\master-t5\hikauto\incl…

C# Halcon目标检测算法

在Halcon中进行目标检测可以使用传统的计算机视觉方法&#xff0c;也可以使用深度学习的方法。Halcon提供了丰富的函数库来处理这些任务&#xff0c;而在C#中使用Halcon&#xff0c;你需要通过Halcon .NET接口。 以下是使用Halcon进行目标检测的一般步骤&#xff0c;这里我将给…

DDL:针对于数据库、数据表、数据字段的操作

数据库的操作 # 查询所有数据 SHOW DATABASE; #创建数据库 CREATE DATABASE 2404javaee; #删除数据库 DROP DATABASE 2404javaee; 数据表的操作 #创建表 CREATE TABLE s_student( name VARCHAR(64), s_sex VARCHAR(32), age INT(3), salary FLOAT(8,2), c_course VARC…

Windows 的 MFC开发的使用示例——讲得挺好的

【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )-腾讯云开发者社区-腾讯云 (tencent.com)

【算法】(C语言):堆排序

堆&#xff08;二叉树的应用&#xff09;&#xff1a; 完全二叉树。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点是最大值。父子索引号关系&#xff08;根节点为0&#xff09;&#xff1a;&#xff08;向上&#xff09;子节点x&#xff0c;父节点(x…

datawhale大模型应用开发夏令营学习笔记一

参考自 基于LangChainLLM的本地知识库问答&#xff1a;从企业单文档问答到批量文档问答datawhale的llm-universe 作者现在在datawhale夏令营的大模型应用开发这个班中&#xff0c;作为一个小白&#xff0c;为了能为团队做出一点贡献&#xff0c;现在就要开始学习怎么使用langch…

实战教程:如何用JavaScript构建一个功能强大的音乐播放器,兼容本地与在线资源

项目地址&#xff1a;Music Player App 作者&#xff1a;Reza Mehdikhanlou 视频地址&#xff1a;youtube 我将向您展示如何使用 javascript 编写音乐播放器。我们创建一个项目&#xff0c;您可以使用 javascript 从本地文件夹或任何 url 播放音频文件。 项目目录 assets 1…

顶级10大AI测试工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

暑期编程预习指南

暑期编程预习指南 高考结束后&#xff0c;迎来的是一段难得的假期时光。对于那些有志于踏入IT领域的高考生来说&#xff0c;这段时间无疑是一个重要的起点。为了帮助你们更好地利用这个假期&#xff0c;为未来的学习和职业生涯打下坚实的基础&#xff0c;特此提供一份编程预习…

JWT入门

JWT与TOKEN JWT&#xff08;JSON Web Token&#xff09;是一种基于 JSON 格式的轻量级安全令牌&#xff0c;通常用于在网络应用间安全地传递信息。而“token”一词则是一个更广泛的术语&#xff0c;用来指代任何形式的令牌&#xff0c;用于在计算机系统中进行身份验证或授权。J…

【️讲解下Laravel为什么会成为最优雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…