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

认知篇#5:什么是激活函数?激活函数有什么用?几个简单激活函数的简介(1)

一、什么是激活函数

很多人都用人的神经元来模拟神经网络算法的信息传递:

这样对应着看,仿佛X1,X2,X3是从别的神经元传来的信号,W11,W12的权重类似突触和神经递质。激活函数在这里就充当了神经细胞的轴突,对信号做输出前的最后处理。

具体来说,神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。 

二、激活函数的作用

在图示简单网络中,我们可以把每一次链接当作一次计算,记作h(x),这里我们考虑把线性函数h(x)=cx,当x的输入很大时,y的输出也是无限大小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希望的输出是一个概率。

因此激活函数的第一个作用就是控制变量的大小。 

第二,如果没有激活函数,那么整个网络相当于是线性的,线性的网络表达能力有限。因此激活函数的第二个作用就是使深层神经网络表达能力就更加强大

 三、激活函数的条件

是谁都可以当激活函数吗?不是的。激活函数必须满足四个条件:

  1. 非线性,这样增加网络的深度才有意义

  2. 可导的,不然怎么做梯度下降

  3. 易于计算

  4. 输出空间最好是有限的(非必要,如ReLU)

四、常见激活函数介绍 

 1、Sigmoid

表达式如下:

 

它能够把输入的连续实值变换为0和1之间的输出,特别的,当x的值趋近负无穷的时候,y趋近于0;x趋近于正无穷的时候,y趋近于1。在 [−2,2]  区间内,梯度变化比较明显,即x发生很小的变化,y变化的也比较明显。适用于简单的分类任务

缺点反向传播训练时有梯度消失的问题;输出值区间为(0,1),关于0不对称;梯度更新在不同方向走得太远,使得优化难度增大,训练耗时费力。

2、Tanh

 

看起来跟Sigmoid很像,但很明显导数更陡峭。它的公式如下:

仔细看可以发现,Tanh跟Sigmoid只是形状比较像,但它是关于x轴对称的,解决了Sigmoid输出值非零对称的问题。并且它比Sigmoid更快更易收敛

缺点:反向传播梯度消失,或者说叫梯度弥散

3、ReLU

这个用的就多了

它的公式如下:

 

它会比前两个更加有棱有角一点。

ReLu有以下几大优点:
1) 解决了gradient vanishing梯度消失问题 (在正区间)
2) 计算速度非常快,只需要判断输入是否大于0
3) 梯度不饱和,收敛速度远快于sigmoid和tanh 

缺点: 

训练时可能出现神经元死亡。即Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新,影响网络收敛。

4、Leaky ReLU 

ReLU的升级版。

它的公式如下:

 

Leaky ReLU 也能避免死亡 ReLU 问题,因为其在计算导数时允许较小的梯度;

缺点无法为正负输入值提供一致的关系预测(不同区间函数不同)。且无法避免梯度爆炸问题。

五、激活函数的简单应用  

如图中这样的一个过程,公式如下:

 

 如图中这样的一个过程,公式如下:

 

六、总结:

激活函数在神经网络中扮演着至关重要的角色,它通过控制信号的大小和增强网络的表达能力,帮助神经网络处理复杂的非线性问题。激活函数的引入能够防止神经网络仅表现为线性模型,进而提升深层网络的表现力。常见的激活函数包括Sigmoid、Tanh、ReLU和Leaky ReLU,每种函数都有其独特的优缺点。例如,Sigmoid适用于简单的分类任务,但容易出现梯度消失问题;Tanh解决了Sigmoid非零对称的问题,但同样存在梯度消失问题;ReLU通过解决梯度消失问题,显著提高了训练速度,但也可能导致神经元死亡;Leaky ReLU则在一定程度上解决了神经元死亡的问题,但仍存在梯度爆炸的风险。选择适当的激活函数对于提升神经网络的训练效果和优化性能至关重要。 

七、参考文章

激活函数全解析-CSDN博客 


http://www.kler.cn/a/598441.html

相关文章:

  • C++调用ffmpeg解复用、解码案例
  • STM32基础教程——定时器
  • 【nodejs】爬虫路漫漫,关于nodejs的基操
  • CentOS与Rocky 命令区别
  • 【MySQL笔记】数据类型
  • 2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序
  • MySQL 处理重复数据:保留一条与两条的实现方案
  • 力扣 797. 所有可能的路径 解析JS、Java、python、Go、c++
  • 使用 CMake 来编译和运行C/C++ 项目流程
  • Linux CentOS7 安装 ffmpeg教程
  • vscode python 入门教程(二) vscode使用gti 管理代码
  • Redis实战常用二、缓存的使用
  • 人工智能新玩法:被现象级IP带火过后“人工智能”已经挑起大梁?
  • 【Linux文件IO】Linux中文件属性与目录操作的API介绍和用法
  • 施磊老师高级c++(五)
  • 使用 Go 构建 MCP Server
  • UWB定位技术在矿山、地铁等特殊环境的核心应用
  • 蓝桥杯关于字符串的算法题目(leetcode回文串的判断问题)
  • wangEditor富文本轻量使用及多个编辑器
  • 利用 MATLAB/Simulink 建立完整的控制系统模型,并进行阶跃响应和负载扰动响应仿真