首页 > 其他分享 >神经网络:激活函数选择

神经网络:激活函数选择

时间:2024-09-22 16:50:35浏览次数:3  
标签:函数 Sigmoid 梯度 ReLU 问题 神经网络 激活

        结论直接看——激活函数的选择方式

        神经网络主体分为输入层、隐藏层和输出层三个模块。一般情况下,输入层只负责对数据的输入,并不做任何的变换。故而,激活函数的选择只涉及隐藏层输出层两个模块。

        

神经网络主体图

激活函数的选择方式

        理论情况下,激活函数是可以根据需求,随意选择与组合的。但是经过前辈们的实验经验,下面的流程往往是效率最高的。(非绝对正确,仅作参考。若有更好的选择,欢迎分享。)

隐藏层

  1. 优先选择ReLU激活函数;
  2. 如果ReLU效果不好,那么尝试其他的激活函数(优先选择ReLU系列);
  3. 如果使用了ReLU,需要注意一下Dead ReLU问题;
  4. 少使用Sigmoid激活函数,可以尝试使用tanh激活函数。

注意:ReLU系列指的是以ReLU激活函数为基础,进行改变的一系列激活函数。

输出层

        输出层的激活函数选择,主要有其任务决定。

  1. 二分类问题选择Sigmoid激活函数;
  2. 多分类问题选择Softmax激活函数;
  3. 回归问题选择Identity激活函数。

常见激活函数

        常见的激活函数有:Identity、Sigmoid(Logistic)、TanH、Softmax、ReLU和ReLU系列(基于ReLU变化的)等等。

常见函数总结

        Softmax函数公式如下:

softmax图详解

激活函数详解

        网上已经有了较为全面的讲解,我就不进行详细介绍。如果没有方向,可以看看下面这些网址。

相关学习网址

理论

        理论相关:深度学习基础篇:如何选择正确的激活函数? - 知乎 (zhihu.com)

        Sigmoid函数:一文掌握Sigmoid激活函数:深度学习的“隐形”英雄-CSDN博客

API

        Pytorch相关:简单易懂的PyTorch激活函数大全详解-CSDN博客

        Pytorch英文网:torch.nn — PyTorch 2.4 documentation

        Pytorch中文网:PyTorch 文档 — PyTorch 2.4 文档 - PyTorch 中文

激活函数对比

        主要对Sigmoid、TanH、RuLE和RuLE系列 四类激活函数进行对比。

Sigmoid函数两个问题

Sigmoid函数图

        如Sigmoid图所示,Sigmoid函数往往有两个问题:非零中心问题梯度消失问题

  • 非零中心问题:y轴的值域不关于0对称,这会延缓网络的收敛速度;
  • 梯度消失问题:激活函数的梯度小(1以下),长久的累积,会导致梯度无限接近于0,这会导致权重无法更新。

        对于Sigmoid函数,梯度消失问题有两部分——(-6,6)之内和(-6,6)之外。-6和6是Sigmoid大概等于零的点,为了便于表示,就直接以这个为标准了。在(-6,6)之外,函数梯度一直为0,这个可以用标准化来避免。在(-6,6)之内,梯度很小,一直小于0.25,累乘情况下,很容易出现梯度消失问题。

Sigmoid函数  >>  Tanh函数

Tanh函数图

        与Sigmoid函数相比,TanH函数不仅没了非零中心问题,而且相对缓解了中心区域(等价于Sigmoid函数的-6~6之内)的梯度消失。

        虽然TanH解决了非零中心问题,缓解了梯度消失问题,但是还是存在计算量大的问题(指数运算)。

TanH函数  >> ReLU函数

        与sigmoid函数、Tanh函数相比,采用ReLU函数,整个过程的计算量会节省很多。尽管ReLU 存在非零中心问题,它的计算效率高,并且在很大程度上缓解了梯度消失问题,因此仍然是深度学习中常用的激活函数。

        ReLU虽然带来了效率的提升,但是仍然有着非零中心问题和Dead ReLU问题

        Dead ReLU(死亡 ReLU)问题是指在使用 ReLU 激活函数时,某些神经元的输出长期为 0,导致它们无法参与训练。这是因为 ReLU 的输出特性是当输入小于或等于 0 时,激活函数的输出为 0。而一旦某个神经元进入了这种状态,它可能会在整个训练过程中一直保持输出为 0,不再更新参数,进而“死亡”。

ReLU函数图

ReLU函数  >> ReLU系列函数

        ReLU系列函数,是在ReLU函数基础上的进一步改进,主要是用于克服ReLU的非零中心问题和Dead ReLU问题的。往往在ReLU函数出现Dead ReLU问题后,才会使用ReLU系列函数用于激活函数。

标签:函数,Sigmoid,梯度,ReLU,问题,神经网络,激活
From: https://blog.csdn.net/qq_51448765/article/details/142431806

相关文章

  • 高等数学 3.6 函数图像的描绘
    利用导数描绘函数图形的一般步骤如下:(1)确定函数\(y=f(x)\)的定义域及函数所具有的某些特性(如奇偶性、周期性等),并求出函数的一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\);(2)求出一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\)在函数定义域内的全部零点,并求出函数\(f(x)......
  • 【重学 MySQL】三十七、聚合函数
    【重学MySQL】三十七、聚合函数基本概念5大常用的聚合函数COUNT()SUM()AVG()MAX()MIN()使用场景注意事项示例查询聚合函数(AggregateFunctions)在数据库查询中扮演着至关重要的角色,特别是在处理大量数据时。它们能够对一组值执行计算,并返回一个汇总后的单......
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
    目录1.两个基本的结构体搭建2.实现push_back函数3.关于list现状的分析(对于我们如何实现这个迭代器很重要)3.1和string,vector的比较3.2对于list的分析3.3总结4.迭代器类的封装5.list容器里面其他函数的实现6.个人总结7.代码附录1.两个基本的结构体搭建首先就是我......
  • python函数一:函数的概念、函数定义与调用、函数的参数、函数的返回值、说明文档以及函
    文章目录1.函数介绍1.1函数的概念1.2函数定义与调用1.2函数的参数1.3函数的返回值1.4说明文档2.函数的嵌套调用2.1嵌套调用及执行流程2.2嵌套调用的应用1.函数介绍1.1函数的概念什么是函数?函数:是一个被命名的、独立的、完成特定功能的代码段,其可能......
  • C语言内容函数大揭秘:轻松掌握,编程无忧(下)
    大家们好,废话不多说,我们接着继续来讲我们函数的章节。六.数组做函数参数在使用函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进行操作。比如:写一个函数将一个整型数组的内容,全部置为﹣1,再写一个函数打印数组的内容。1#include<stdio.h>23int......
  • C语言函数的形参传递
    在C语言中,函数形参的传递分为值传递和地址传递(指针传递)。这两种传递方式决定了函数内如何使用这些参数,并且在函数外部的影响也不同。下面详细解释C语言中形参的传递机制和具体内容。1.值传递在C语言中,默认的传递方式是值传递。当我们调用一个函数时,函数的形参接收......
  • 水母搜索算法(JS)优化BP神经网络原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2 JS主函数代码3.2JS-BP4视频讲解0引言水母搜索算法(JellyfishSearch,JS)是由Jui-ShengChou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的运......
  • 水母搜索算法(JS)优化长短期记忆神经网络原理及Matlab代码
    目录0引言1数学模型2优化方式3Matlab代码3.1伪代码3.2 JS主函数代码3.2JS-LSTM4视频讲解0引言水母搜索算法(JellyfishSearch,JS)是由Jui-ShengChou在2020年基于水母搜索行为提出的群智能算法。该算法模拟水母搜索行为的包括它们的洋流跟随,它们在水母群中的......
  • 在 TypeScript 的类组件的构造函数中是否总是需要定义 `props` 和 `state` ?
    当使用typescript在react中处理类组件时,经常会出现这样的问题:是否有必要且强制在构造函数中定义props和state。这个问题的答案取决于组件的具体需求。在这篇博文中,我们将了解何时以及为何使用构造函数来定义props和状态,以及不同方法的优缺点。使用构造函数何......
  • C语言的文件函数
    此篇文章主要对C语言中的"文件读写函数"进行详细的刨析~通过此篇文章能够了解并学习到:"字符读写函数","文本行读写函数 ","格式化读写函数","二进制读写函数","文件随机读取函数 ","读取结束原因函数"等相关知识~(上一篇:文件基础知识传送门:C语言的文件基础知识-CSDN......