当前位置: 首页 > 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.xdnf.cn/news/1089343.html

相关文章:

  • 初识mysql(一)
  • Spring Bean 的生命周期
  • Python入门Day5
  • 数据结构*搜索树
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • Maven 打包排除特定依赖的完整指南(详细方法 + 示例)
  • -温差双八无碳小车cad【14张】+三维图+设计说明书+总装配图+绛重
  • 高版本的MacOS如何降级?
  • Qt:图片切割
  • numpy数据分析知识总结
  • 使用Node.js搭建Web应用有哪些注意事项?
  • LocalStorage和SessionStorage的区别和应用
  • 零基础 Qt 6 在线安装教程
  • C++11 算法详解:std::copy_if 与 std::copy_n
  • 基于物联网架构的温室环境温湿度传感器节点设计
  • C++ 遍历可变参数的几种方法
  • Android Jetpack Compose状态管理与状态提升
  • Spring Batch终极指南:原理、实战与性能优化
  • 从单体到微服务:Spring Cloud 开篇与微服务设计
  • 【王树森推荐系统】召回12:曝光过滤 Bloom Filter
  • vscode打开stm32CubeIDE的项目的注释问题
  • JK触发器Multisim电路仿真——硬件工程师笔记
  • CSS知识复习5
  • 20 道 Node.js 高频面试题
  • Docker快速部署Hive服务
  • Flutter基础(前端教程②-卡片列表)
  • 原生屏幕旋转算法(AccelSensor)
  • Ansible 介绍及安装
  • 【牛客刷题】小红的v三元组
  • Spring Boot 企业项目技术选型