当前位置: 首页 > news >正文

【PyTorch】PyTorch中torch.nn模块的激活函数

PyTorch深度学习总结

第十章 PyTorch中torch.nn模块的激活函数


文章目录

  • PyTorch深度学习总结
  • 前言
  • 一、激活函数的定义
  • 二、常见的激活函数
      • 1. Sigmoid函数
      • 2. Tanh函数
      • 3. ReLU函数
      • 4. Leaky ReLU函数
      • 4. Softmax函数
  • 三、激活函数的选择原则
      • 1.输出层激活函数选择
      • 2.隐藏层激活函数选择
  • 四、函数总结


前言

上文介绍torch.nn模块中的循环层,本文将进一步介绍torch.nn模块中的激活函数


一、激活函数的定义

激活函数是一种添加到人工神经网络中的函数,它将神经元的输入转换为输出。
在神经网络中,神经元接收到来自其他神经元的输入信号,这些信号通过加权求和后,再经过激活函数进行非线性变换,从而产生输出。
激活函数的主要作用是引入非线性因素
如果没有激活函数,无论神经网络有多少层,其整体都是一个线性模型,只能处理线性可分的问题。
引入激活函数后,神经网络可以学习和表示更加复杂的非线性关系,从而提高模型的表达能力和泛化能力。


二、常见的激活函数

1. Sigmoid函数

公式f(x)=11+e−xf(x)=\frac{1}{1 + e^{-x}}f(x)=1+ex1
特点:输出范围在(0, 1)之间,可以将输入值映射到这个区间,常用于二分类问题中作为输出层的激活函数,表示概率
例如,在判断一张图片是否是猫的二分类任务中,输出值越接近1表示是猫的概率越大,越接近0表示不是猫的概率越大。
缺点:存在梯度消失问题,当输入值非常大或非常小时,函数的导数趋近于0,这会导致在反向传播过程中梯度变得非常小,使得网络参数更新缓慢甚至停止更新。


2. Tanh函数

公式f(x)=ex−e−xex+e−xf(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}f(x)=ex+exexex
特点:输出范围在(-1, 1)之间,它是零中心化的,这使得它在某些情况下比Sigmoid函数更具优势。
例如,在一些需要输出值有正负之分的任务中,Tanh函数可以更好地满足需求。
缺点:同样存在梯度消失问题。


3. ReLU函数

公式f(x)=max⁡(0,x)f(x)=\max(0, x)f(x)=max(0,x)
特点:计算简单,收敛速度快,能够有效缓解梯度消失问题。当输入大于0时,导数为1,使得在反向传播过程中梯度能够正常传播。
例如,在深度卷积神经网络中,ReLU函数被广泛应用,大大提高了网络的训练效率。
缺点 :存在“死亡ReLU”问题,当输入值小于0时,导数为0,神经元可能会永远不会被激活,导致网络中部分神经元失效。


4. Leaky ReLU函数

公式f(x)={x,x≥0αx,x<0f(x)=\begin{cases}x, & x\geq0\\\alpha x, & x < 0\end{cases}f(x)={x,αx,x0x<0
其中(α\alphaα)是一个较小的正数,如0.01。
特点:它是对ReLU函数的改进,在输入值小于0时,也有一个非零的导数,避免了“死亡ReLU”问题。


4. Softmax函数

公式:对于一个包含 K 个元素的输入向量 z=(z1,z2,⋯,zKz_1,z_2,⋯,z_Kz1,z2,,zK),Softmax 函数的输出向量σ(z)σ(z)σ(z)=(σ(z1),σ(z2),⋯,σ(zK​)σ(z_1),σ(z_2),⋯,σ(z_K​)σ(z1),σ(z2),,σ(zK)) 中每个元素的计算公式为:
σ(zj)=ezj∑k=1Kezk\sigma(z_j)=\frac{e^{z_j}}{\sum_{k = 1}^{K}e^{z_k}}σ(zj)=k=1Kezkezj,其中 j=1,2,⋯,Kj = 1,2,\cdots,Kj=1,2,,K
特点它的输出可以直接解释为概率,非常适合用于多分类问题的输出层。Softmax 函数是单调递增的,即输入向量中的某个元素增大时,其对应的输出概率也会增大。Softmax 函数是可微的,这使得它可以在神经网络的训练过程中使用反向传播算法来计算梯度,从而更新模型的参数。
缺点Softmax 函数的计算涉及到指数运算和求和运算,当输入向量的维度 K 较大时,计算量会显著增加。由于使用了指数运算,输入向量中的异常大的值会使得对应的输出概率变得非常大,而其他值对应的概率会变得非常小。


三、激活函数的选择原则

1.输出层激活函数选择

  • 如果是二分类问题Sigmoid函数通常是一个不错的选择,因为它可以将输出映射到(0, 1)之间表示概率。
  • 对于多分类问题Softmax函数是常用的输出层激活函数,它可以将输出转换为概率分布,所有输出值之和为1。

2.隐藏层激活函数选择

  • ReLU函数及其变种(如Leaky ReLU)由于其计算简单和缓解梯度消失的优点,在大多数情况下是隐藏层的首选激活函数。
    但在一些特殊的网络结构或任务中,也可能会选择其他激活函数,如Tanh函数在一些递归神经网络中也有应用。

四、函数总结

以下是在PyTorch中常见激活函数的总结表格:

函数名称公式特点PyTorch实现类适用场景
ReLU(Rectified Linear Unit)f(x)=Max(0,x)f(x) = Max(0, x)f(x)=Max(0,x)将小于零的输入映射为0,大于等于零的输入保持不变;求导简单方便,但反向传播权值更新小于0时,会进入失活状态torch.nn.ReLU广泛用于卷积神经网络(如AlexNet)和多层感知机的隐藏层
Sigmoidf(x)=11+e−xf(x)=\frac{1}{1 + e^{-x}}f(x)=1+ex1将输入值映射到(0, 1)区间,输出可看作概率;存在梯度消失问题torch.nn.Sigmoid二分类问题的输出层
Softmaxσ(zj)=ezj∑k=1Kezk\sigma(z_j)=\frac{e^{z_j}}{\sum_{k = 1}^{K}e^{z_k}}σ(zj)=k=1Kezkezj,其中 j=1,2,⋯,Kj = 1,2,\cdots,Kj=1,2,,K将输入向量转换为概率分布,输出向量各元素和为1torch.nn.Softmax(可通过dim参数指定计算维度)多分类问题的输出层
Tanhf(x)=ex−e−xex+e−xf(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}f(x)=ex+exexex将输入值映射到(-1, 1)区间,输出关于原点对称torch.nn.Tanh适用于需要输出值有正负性的场景
http://www.lryc.cn/news/582704.html

相关文章:

  • Nuxt.js 静态生成中的跨域问题解决方案
  • maven 发布到中央仓库之 Ignore Licence-04
  • FPGA 47 ,MIG 内存接口生成器深度解析( FPGA 中的 MIG 技术 )
  • 手机解压软件 7z:高效便捷的解压缩利器
  • 【AI智能体】智能音视频-基于乐鑫 ESP32 实现音视频通话
  • 从 CODING 停服到极狐 GitLab “接棒”,软件研发工具市场风云再起
  • 20250708-2-Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记
  • Safetensors与大模型文件格式全面解析
  • 金融行业信息
  • Android 事件分发机制深度解析
  • Apache DolphinScheduler保姆级实操指南:云原生任务调度实战
  • 【Linux服务器】-安装ftp与sftp服务
  • 二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
  • .NET nupkg包的深度解析与安全防护指南
  • Linux 信号机制:操作系统的“紧急电话”系统
  • 【时时三省】(C语言基础)指针变量作为函数参数
  • 实战:Android 15 (API 35) 适配 构建踩坑全记录
  • Java零基础笔记07(Java编程核心:面向对象编程 {类,static关键字})
  • EXCEL(带图)转html
  • linux wsl2 docker 镜像复用快速方法
  • 解决阿里云ubuntu内存溢出导致vps死机无法访问 - 永久性增加ubuntu的swap空间 - 阿里云Linux实例内存溢出(OOM)问题修复方案
  • 代码详细注释:C语言实现控制台用户注册登录系统
  • Spring Boot + Easy Excel 自定义复杂样式导入导出
  • MySQL 8.0 OCP 1Z0-908 题目解析(22)
  • AI编程的未来是智能体原生开发?
  • MyBatis-Plus:深入探索与最佳实践
  • Vue的初步学习
  • 阿里云mysql数据丢失,如何通过服务器备份在其他服务器上恢复数据,并获取mysql丢失数据,完成mysql数据恢复
  • 如何在 Android Framework层面控制高通(Qualcomm)芯片的 CPU 和 GPU。
  • AWS OpenSearch Dev Tools使用