当前位置: 首页 > 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.dtcms.com/a/270426.html

相关文章:

  • 项目Win系统下可正常获取Header字段,但是到了linux、docker部署后无法获取
  • python基础day08
  • linux wsl2 docker 镜像复用快速方法
  • 【读代码】GLM-4.1V-Thinking:开源多模态推理模型的创新实践
  • 基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
  • C++ 遍历可变参数的几种方法
  • 数据库表设计:图片存储与自定义数据类型的实战指南
  • C语言宏替换比较练习
  • 暑假算法日记第四天
  • 5.6.2、ZeroMQ源码分析
  • 利用AI Agent实现精准的数据分析
  • ARM环境openEuler2203sp4上部署19c单机问题-持续更新
  • VM上创建虚拟机以及安装RHEL9操作系统并ssh远程连接
  • 大模型系列——RAG-Anything:开启多模态 RAG 的新纪元,让文档“活”起来!
  • Proface触摸屏编程软件(GP-Pro EX)介绍及下载
  • 金融行业信息
  • 力扣-75.颜色分类
  • Sentinel入门篇【流量治理】
  • 行业实践案例:医疗行业数据治理的挑战与突破
  • 【RAG知识库实践】数据源Data Source
  • ABP VNext + .NET Minimal API:极简微服务快速开发
  • B. Shrinking Array/缩小数组
  • Web后端实战:(部门管理)
  • 数据结构*搜索树
  • 二极管常见种类及基本原理
  • 【牛客刷题】小红的red字符串
  • MyBatis-Plus:提升数据库操作效率的利器
  • AB实验的长期影响
  • 【数据结构】复杂度分析
  • SpringBoot框架完整学习指南