终于把神经网络中的激活函数搞懂了!

人工智能
在神经网络中,激活函数(Activation Function)是神经元计算的一部分,决定了一个神经元在接收到输入信号后的输出。

大家好,我是小寒。

今天给大家分享神经网络中的一个重要知识点,激活函数

在神经网络中,激活函数(Activation Function)是神经元计算的一部分,决定了一个神经元在接收到输入信号后的输出。

激活函数通过引入非线性特性,使神经网络能够学习复杂的模式和表示。

什么是激活函数

激活函数使神经网络能够学习和模拟输入数据和目标变量之间复杂的非线性关系。

通过引入非线性特性,激活函数可以帮助网络处理涉及复杂函数映射的任务,而这些任务仅靠线性函数无法解决。

图片图片

实际上,在神经网络中,神经元的输出是通过对输入特征 X 及其相应权重 W 的乘积加上偏差 b 

然后,将该线性组合传递到激活函数 f(x),从而引入必要的非线性和输出信号。

现在,这些信号成为后续层的输入,使网络能够构建数据的分层表示。

该机制确保 ANN 能够从多样化和非线性的数据分布中进行概括和学习。

常见的激活函数

1.Sigmoid 激活函数

Sigmoid 函数的公式为:

图片图片

特点:

  • 输出范围在 (0, 1) 之间。
  • 常用于二分类问题的输出层。
  • 有平滑、单调递增的特性。
  • 存在梯度消失问题,尤其在深层网络中会导致训练缓慢。

Python实现

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
 return 1 / (1 + np.exp(-x))
x = np.linspace(-10, 10, 100)
y = sigmoid(x)
plt.plot(x, y)
plt.title("Sigmoid Activation Function")
plt.show()

2.Tanh

Tanh(双曲正切)函数的公式为:

图片图片

特点:

  • 输出范围在 (-1, 1) 之间。
  • 比 Sigmoid 更适合深层网络,因为其输出均值为 0,使得数据更容易居中。
  • 同样存在梯度消失问题,但比 Sigmoid 稍微好一些。

Python 实现

def tanh(x):
 return np.tanh(x)
y = tanh(x)
plt.plot(x, y)
plt.title("Tanh Activation Function")
plt.show()

3.ReLU

ReLU(Rectified Linear Unit)函数的公式为:

图片图片

特点:

  • 输出范围在 [0, ∞) 之间。
  • 计算简单,收敛速度快,广泛应用于各种神经网络中。
  • 存在 “死亡 ReLU” 问题,当输入值为负时,梯度为 0,可能导致神经元不会再被更新。

Python 实现

def relu(x):
 return np.maximum(0, x)
y = relu(x)
plt.plot(x, y)
plt.title("ReLU Activation Function")
plt.show()

4.Leaky ReLU

Leaky ReLU 是 ReLU 的变种,允许负值通过一个很小的斜率,公式为

图片图片

特点

  • 解决了 ReLU 函数中神经元“死亡”的问题。
  • 允许少量的负值梯度流过,从而保持神经元的更新。

python 实现

def leaky_relu(x, alpha=0.01):
 return np.where(x > 0, x, alpha * x)
y = leaky_relu(x)
plt.plot(x, y)
plt.title("Leaky ReLU Activation Function")
plt.show()

5.PReLU

其公式为

图片图片

特点

  • 是 Leaky ReLU 的推广,其中  是一个可训练的参数。
  • 更灵活,能适应不同的数据分布。

Python实现

def prelu(x, alpha):
 return np.where(x > 0, x, alpha * x)
alpha = 0.1 # This would be learned during training
y = prelu(x, alpha)
plt.plot(x, y)
plt.title("Parametric ReLU Activation Function")
plt.show()

6.ELU

其公式为

图片图片

特点

  • 当 x > 0 时,ELU 的行为与 ReLU 类似,输出为 x 本身。
  • 当 x ≤ 0 时,ELU 输出一个负值,形如 ,其中  是一个超参数。
  • 负值部分的平滑特性可以使得平均激活接近 0,从而加快收敛速度。
  • 相较于 ReLU,ELU 在负值部分具有更好的特性,可以减轻梯度消失问题,同时保留了 ReLU 的大部分优点。

Python 实现

def elu(x, alpha=1.0):
 return np.where(x > 0, x, alpha * (np.exp(x) - 1))
y = elu(x)
plt.plot(x, y)
plt.title("ELU Activation Function")
plt.show()

7.Softmax 函数

公式为

图片图片

特点

  • 常用于多分类问题的输出层。
  • 输出的是一个概率分布,所有输出值的和为1。

python 实现

def softmax(x):
 exp_x = np.exp(x-np.max(x))
 return exp_x / exp_x.sum(axis=0)
y = softmax(x)
plt.plot(x, y)
plt.title("Softmax Activation Function")
plt.show()

责任编辑:武晓燕 来源: 程序员学长
相关推荐

2024-11-07 08:26:31

神经网络激活函数信号

2024-09-12 08:28:32

2024-10-17 13:05:35

神经网络算法机器学习深度学习

2024-09-20 07:36:12

2024-10-28 00:38:10

2024-11-15 13:20:02

2024-10-05 23:00:35

2024-09-26 07:39:46

2024-11-05 12:56:06

机器学习函数MSE

2024-08-01 08:41:08

2024-07-17 09:32:19

2024-09-23 09:12:20

2024-10-16 07:58:48

2024-10-28 00:00:10

机器学习模型程度

2024-10-08 15:09:17

2024-10-08 10:16:22

2024-10-30 08:23:07

2024-10-28 15:52:38

机器学习特征工程数据集

2024-10-14 14:02:17

机器学习评估指标人工智能

2024-09-18 16:42:58

机器学习评估指标模型
点赞
收藏

51CTO技术栈公众号