人工智能-深度学习-神经网络-激活函数

激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。

满足激活函数的条件

1.可微分,也就是可求导

激活函数必须是可微的。这是因为反向传播算法依赖于梯度的计算,而梯度的计算需要激活函数是可微的。如果激活函数不可微,那么梯度无法计算,反向传播算法就无法进行。

2.必须是非线性的

激活函数必须是非线性的。这是因为如果激活函数是线性的,那么无论神经网络有多少层,整个网络仍然可以简化为一个线性模型。非线性激活函数能够引入非线性变换,使得神经网络能够逼近和学习更复杂的函数。

常见激活函数

sigmoid

它将输入映射到0到1之间的值,因此非常适合处理概率问题。

数学表达式为:

  1. 将任意实数输入映射到 (0, 1)之间,因此非常适合处理概率场景。

  2. sigmoid函数一般只用于二分类的输出层。

  3. 微分性质: 导数计算比较方便,可以用自身表达式来表示:

缺点:

  • 梯度消失:

    • 在输入非常大或非常小时,Sigmoid函数的梯度会变得非常小,接近于0。这导致在反向传播过程中,梯度逐渐衰减。

    • 最终使得早期层的权重更新非常缓慢,进而导致训练速度变慢甚至停滞。

  • 信息丢失:输入100和输入10000经过sigmoid的激活值几乎都是等于 1 的,但是输入的数据却相差 100 倍。

  • 计算成本高: 由于涉及指数运算,Sigmoid的计算比ReLU等函数更复杂,尽管差异并不显著。

曲线图:

使用场景:

适合用于神经网络的输出层;

tanh

tanh(双曲正切)是一种常见的非线性激活函数,常用于神经网络的隐藏层。

公式:

特征:

  1. 输出范围: 将输入映射到$$(-1, 1)$$之间,因此输出是零中心的。相比于Sigmoid函数,这种零中心化的输出有助于加速收敛。

  2. 对称性: Tanh函数关于原点对称,因此在输入为0时,输出也为0。这种对称性有助于在训练神经网络时使数据更平衡。

  3. 平滑性: Tanh函数在整个输入范围内都是连续且可微的,这使其非常适合于使用梯度下降法进行优化。

表示为:

缺点:
  1. 梯度消失: 虽然一定程度上改善了梯度消失问题,但在输入值非常大或非常小时导数还是非常小,这在深层网络中仍然是个问题。

  2. 计算成本: 由于涉及指数运算,Tanh的计算成本还是略高,尽管差异不大。

跟sigmoid的函数图像差不多

同样适用于输出层。

ReLU

ReLU(Rectified Linear Unit)是深度学习中最常用的激活函数之一,它的全称是修正线性单 元。ReLU 激活函数的定义非常简单,但在实践中效果非常好。

数学公式:

进行非线性变换时:

​​​​​​​ ​​​​​​​

稀疏激活:ReLU在输入小于等于 0 时输出为 0,这使得 ReLU 可以在神经网络中引入稀疏性(即一些神经元不被激活),这种稀疏性可以提升网络的泛化能力。

也就是一些神经元不会被激活。

缺点

神经元死亡:

如果某个神经元输入值是负,那么该神经元将永远不再激活,成为"死亡"神经元。随着训练的进行,网络中可能会出现大量死亡神经元,从而会降低模型的表达能力。

LeakyReLU

Leaky ReLU是一种对 ReLU 函数的改进,旨在解决 ReLU 的一些缺点,特别是Dying ReLU 问题。Leaky ReLU 通过在输入为负时引入一个小的负斜率来改善这一问题。

公式:

​​​​​​​

特征:

特征
  1. 避免神经元死亡:通过在$$x\leq 0$$ 区域引入一个小的负斜率,这样即使输入值小于等于零,Leaky ReLU仍然会有梯度,允许神经元继续更新权重,避免神经元在训练过程中完全"死亡"的问题。

  2. 计算简单:Leaky ReLU 的计算与 ReLU 相似,只需简单的比较和线性运算,计算开销低。

缺点
  1. 参数选择:α 是一个需要调整的超参数,选择合适的α 值可能需要实验和调优。

  2. 出现负激活:如果α 设定得不当,仍然可能导致激活值过低。

softmax

Softmax激活函数通常用于分类问题的**输出层**,它能够将网络的输出转换为概率分布,使得输出的各个类别的概率之和为 1。Softmax 特别适合用于多分类问题。

公式:​​​

​​​​​​​ ​​​​​​​

特征:

将输出转化为概率:通过$$Softmax$$,可以将网络的原始输出转化为各个类别的概率,从而可以根据这些概率进行分类决策。

概率分布:输出是一个概率分布,并且所有输出值的和为 1,表示每个类别的预测概率。

突出差异:$$Softmax$$会放大差异,使得概率最大的类别的输出值更接近$$1$$,而其他类别更接近$$0$$。

Softmax 函数是一种常用的激活函数,主要用于多分类问题。它将一个向量中的每个元素转换为一个介于 0 和 1 之间的值,并且所有元素的和为 1。Softmax 函数通常用于神经网络的输出层,以生成概率分布,表示每个类别的预测概率。Softmax 函数是非线性的,可微的,支持反向传播算法的梯度计算。

缺点:

1. 数值不稳定性

Softmax 函数涉及指数运算,当输入值非常大时,指数运算可能会导致数值溢出(overflow)。同样,当输入值非常小时,指数运算可能会导致数值下溢(underflow)。

2. 对输入敏感

Softmax 函数对输入值非常敏感,尤其是当输入值之间的差异较大时。这可能导致梯度消失或梯度爆炸问题,尤其是在深层神经网络中。

3. 类别不平衡问题

Softmax 函数假设所有类别是互斥的,并且每个类别的概率是独立的。在实际应用中,类别不平衡问题可能导致某些类别的概率被低估。

解决方法:
  • 类别加权:在损失函数中为不同类别分配不同的权重,以平衡类别不平衡问题。

  • 数据增强:通过数据增强技术(如过采样、欠采样)来平衡训练数据中的类别分布。

python 复制代码
import torch
import torch.nn as nn

# 表示4分类,每个样本全连接后得到4个得分,下面示例模拟的是两个样本的得分
input_tensor = torch.tensor([[-1.0, 2.0, -3.0, 4.0], [-2, 3, -3, 9]])

softmax = nn.Softmax()
output_tensor = softmax(input_tensor)
# 关闭科学计数法
torch.set_printoptions(sci_mode=False)
print("输入张量:", input_tensor)
print("输出张量:", output_tensor)

函数选择:

隐藏层

  1. 优先选ReLU;

  2. 如果ReLU效果不咋地,那么尝试其他激活,如Leaky ReLU等;

  3. 使用ReLU时注意神经元死亡问题, 避免出现过多神经元死亡;

  4. 不使用sigmoid,尝试使用tanh;

输出层

  1. 二分类问题选择sigmoid激活函数;

  2. 多分类问题选择softmax激活函数;

  3. 回归问题选择identity激活函数;

​​​​​​​

更多激活函数可以查看官方文档:torch.nn --- PyTorch 2.5 documentationhttps://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearity

相关推荐
YRr YRr3 分钟前
深度学习Pytorch中的模型保存与加载方法
人工智能·pytorch·深度学习
DOT小文哥12 分钟前
百问FB显示开发图像处理 - JPEG图像处理
图像处理·人工智能·mfc·jpeg
小众AI22 分钟前
Perplexica - AI 驱动的搜索引擎
人工智能·自然语言处理·ai编程
云帆@30 分钟前
onnx报错解决-bert
笔记·深度学习
哔哩哔哩技术31 分钟前
B站创作端接入自研剪辑引擎
深度学习
金鸣科技官方QQ34 分钟前
图片怎么转换成excel文件(客户端)
人工智能·深度学习·神经网络·目标检测·机器学习·ocr·excel
雪兽软件38 分钟前
人工智能如何改变你的生活?
人工智能
禾风wyh40 分钟前
【机器学习】正向传播与反向传播
人工智能·深度学习·神经网络
YRr YRr1 小时前
PyTorch:神经网络的基本骨架 nn.Module的使用
人工智能·pytorch·神经网络
沈询-阿里1 小时前
百度 文心一言 vs 阿里 通义千问 哪个好?
大数据·人工智能·机器学习