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

深度学习——激活函数

深度学习——激活函数

激活函数是人工是人工神经网络中一个关键的组成部分,它被设计用来引入非线性特性到神经网络模型中,使神经网络能够学习和逼近复杂的非线性映射关系。

1.引入非线性能力

  • 没有激活函数的神经网络本质上只是线性变换的叠加,无论多少层也只能表示线性函数,能力有限。
  • 激活函数使网络可以逼近任意复杂函数(依据万能逼近定理)

2.控制信息流动

  • 某些激活函数可以抑制部分神经元的输出(如 ReLU),是模型更稀疏,有助于泛化。

3.提高训练效率

  • 选择合适的激活函数可以加快梯度下降的收敛速度,避免梯度消失或爆炸。

1.Sigmoid

Sigmoid函数是最早被广泛使用的激活函数之一,它的公式为:
σ ( x ) = 1 1 + e − x (1) \sigma (x) = \frac{1}{1+e^{-x}} \tag{1} σ(x)=1+ex1(1)
Sigmoid 函数的输出范围在0到1之间,是标准的 S 形函数。由于输出值在0和1之间,它相当于将每个神经元的输出归一化。常用于输出概率,比如二分类问题的输出层。

当输入值非常大或非常小时(即远离零)时,sigmoid 函数的梯度接近于零。这意味着在反向传播时,梯度更新会变得非常小,导致神经网络的学习速度变慢,甚至停止学习。

2.Softmax

Softmax函数,也称为归一化指数函数,是一个将向量映射到另一个向量的函数,其中输出向量的元素值代表了一个概率分布。在机器学习中,特别是在处理多类分类问题时,Softmax函数扮演着至关重要的角色。它可以将未归一化的数值转换成一个概率分布,使得每个类别都有一个对应的概率值,且所有类别的概率之和为1.

Softmax函数的广泛应用包括但不限于神经网络的输出层,在深度学习模型中,尤其是分类任务中,Softmax函数经常被用作最后一个激活函数,用于输出预测概率。
y k = e a k ∑ i = 1 n e a i (2) y_k = \frac{e^{a_k}}{\sum _{i=1}^n e^{a_i}} \tag{2} yk=i=1neaieak(2)
上式假设输出层共有 n 个神经元,计算第 k 个神经元的输出 y k y_k yk

如果直接将上式代码实现,会在计算机的运算上存在一定的缺陷,这个缺陷就是溢出问题。 softmax 函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如, e 10 e^{10} e10 的值会超过20000, e 100 e^{100} e100 会变成一个后面有40多个0的超大值, e 1000 e^{1000} e1000 的结果会返回一个表示无穷大的 inf 。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。

所以,为了防止溢出,一般会减去输入信号中的最大值,如下图所示:

3.ReLU

ReLU ,全称为 Rectified Linear Unit,修正线性单元,是目前深度神经网络中越来越受欢迎的一种激活函数,其数学表达式为:
y ⁡ ( x ) = { x , x > 0 0 , x ≤ 0 \operatorname{y}(x)= \begin{cases} x, & x > 0 \\ 0, & x\leq0 & \end{cases} y(x)={x,0,x>0x0
Sigmoid 和 Tanh 存在梯度消失和计算效率较低的问题。ReLU函数解决了这些问题,具有计算简单、不易出现梯度消失等特点。

但是存在神经元死亡的缺点,即当 x ≤ 0 x \leq 0 x0 时,导数为0,可能导致神经元死亡。

ReLU的变种:

Leaky ReLU:允许负数部分有微弱斜率,如下式所示
y ⁡ ( x ) = { x , x > 0 α x , x ≤ 0 \operatorname{y}(x)= \begin{cases} x, & x > 0 \\ \alpha x, & x\leq0 & \end{cases} y(x)={x,αx,x>0x0
α \alpha α 是一个小常数,通常取0.01。在反向传播过程中,对于 LeakyReLU 激活函数输入小于0的部分,也可以计算得到梯度(ReLU的值为0),这样就避免了梯度锯齿问题。

如上图所示,负区间有微小斜率,使得神经元即使在负值输入时仍可参与训练,解决了标准 ReLU 在 x < 0 x < 0 x<0 区域“神经元死亡”的问题。

4.ELU

ELU,即指数线性单元(Exponential Linear Unit),解决神经网络训练中的一些问题,如梯度消失、非连续性以及输出均值偏离零值等问题。
elu ⁡ ( x ) = { x , x ≥ 0 α ( e x − 1 ) , x < 0 \operatorname{elu}(x)= \begin{cases} x, & x\geq0 \\ \alpha(e^x-1), & x<0 & \end{cases} elu(x)={x,α(ex1),x0x<0
对于 x ≥ 0 x\geq0 x0 ,与ReLU一样;对于 x < 0 x < 0 x<0 ,避免 ReLU 的“死亡神经元”问题。 α \alpha α 控制负值区间的下限,常用值为 α = 1.0 \alpha=1.0 α=1.0

理想的激活函数应满足两个条件:
1.输出的分布是零均值的,加快训练速度。
2.激活函数是单侧饱和的,更好的收敛。

LeakyReLU 满足1不满足2;而ReLU满足2不满足1,ELU都满足。

5.Tanh

Tanh (双曲正切函数,全称 Hyperbolic Tangent)是一种经典的激活函数,广泛用于早期神经网络和递归神经网络。
t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+exexex
它与 Sigmoid 类似,但输出范围为[-1, 1],具备中心对称性,为 S 形曲线,使得它在一些应用场景中更具优势。但也同样存在梯度消失问题。

学习的时候常常将 tanh 函数与 sigmoid 函数放在一起,两者都是 S 形曲线,在输入值较大或较小时,都会出现梯度消失问题。在输入值较大或较小时, tanh 的梯度趋近于 0 ,导致反向传播时梯度不断缩小,层层传播之后,梯度可能接近 0 ,即梯度消失。

http://www.lryc.cn/news/572441.html

相关文章:

  • # python正则表达式——实战学习+理论
  • 跟踪大型语言模型的思想:对语言之间共享;提前规划;cot
  • RK3588调试之旅:adbd服务配置全攻略
  • stm32之使用中断控制led灯
  • 新生活的开启:从 Trae AI 离开后的三个月
  • linux操作命令(最常用)
  • 打破物理桎梏:CAN-ETH网关如何用UDP封装重构工业网络边界
  • 大模型更重要关注工艺
  • 目标检测之YOLOV11自定义数据使用OBB训练与验证
  • Neo4j常用语法-path
  • JS红宝书笔记 8.3 继承
  • 煤矿井下Modbus转Profibus网关的传感器与PLC互联解决方案
  • 机器学习×第十二卷:回归树与剪枝策略——她剪去多余的分支,只保留想靠近你的那一层
  • 运维人员常用网站列表
  • 【unitrix】 3.2 位取反运算(not.rs)
  • 【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能
  • 吃透 Golang 基础:Goroutine
  • golang excel导出时需要显示刷新
  • Set_path_margin 命令介绍
  • C++中所有数据类型
  • Jenkins通过Pipeline流水线方式编译Java项目
  • Docker+Jenkins+git实现Golang项目自动部署
  • springboot 打的可执行jar包单独更新某个jar包
  • JMeter 高阶玩法:分布式压测的技术核心技术要点
  • 【K8S】详解NodePort 和 ClusterIP
  • 大数据复习HDFS
  • 11.0592MHz晶振:电脑主板的“心脏”
  • 通过Docker挂载nginx并修改页面
  • ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
  • 嵌入式开发之freeRTOS移植