神经网络传递函数与激活函数

神经网络是一种模仿人脑神经系统的人工智能模型。在神经网络中,每个神经元都有一个传递函数和一个激活函数。传递函数决定了神经元接收到的输入如何传递给下一层神经元,而激活函数则决定了神经元的输出。

传递函数

传递函数用于计算神经元接收到的输入如何传递给下一层神经元。传递函数可以是线性的,也可以是非线性的。常见的传递函数有线性传递函数和非线性传递函数。下面我们来看一下这两种传递函数的特点和代码示例。

线性传递函数

线性传递函数将输入直接传递给输出,没有任何改变。它的计算公式可以表示为:

$$y = wx + b$$

其中,$w$ 是权重,$x$ 是输入,$b$ 是偏置。

下面是一个使用线性传递函数的代码示例:

def linear_transfer(x, w, b):
    return w * x + b

x = 2
w = 3
b = 1
output = linear_transfer(x, w, b)
print(output)  # 输出为 7

上述代码中,我们定义了一个线性传递函数 linear_transfer,并传入了输入 x、权重 w 和偏置 b。调用该函数后,输出结果为 7。

线性传递函数的特点是简单直接,它没有对输入进行任何非线性处理。在某些场景下,线性传递函数可以发挥作用,但对于许多复杂的问题,线性传递函数可能无法达到我们预期的效果。

非线性传递函数

为了解决线性传递函数无法处理复杂问题的限制,我们引入了非线性传递函数。非线性传递函数将输入进行非线性变换,并输出传递后的结果。常见的非线性传递函数有 Sigmoid 函数、ReLU 函数和 Tanh 函数等。

Sigmoid 函数

Sigmoid 函数是一个常用的非线性传递函数,它将输入映射到一个范围为 (0, 1) 的输出。Sigmoid 函数的计算公式如下:

$$y = \frac{1}{1 + e^{-x}}$$

下面是一个使用 Sigmoid 函数的代码示例:

import math

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

x = 2
output = sigmoid(x)
print(output)  # 输出为 0.8807970779778823

上述代码中,我们定义了一个 Sigmoid 函数 sigmoid,并传入了输入 x。调用该函数后,输出结果为 0.8807970779778823。

Sigmoid 函数的特点是输出范围在 (0, 1) 内,它能够将输入映射到一个概率值或激活值,常用于二分类问题或输出层的激活函数。

ReLU 函数

ReLU 函数是另一个常用的非线性传递函数,它将负数输入映射为 0,将正数输入保持不变。ReLU 函数的计算公式如下:

$$y = \max(0, x)$$

下面是一个使用 ReLU 函数的代码示例:

def relu(x):
    return max(0, x)

x = -2
output = relu(x)
print(output)  # 输出为 0

上述代码中,我们定义了一个 ReLU 函数 relu,并传入了输入 x。调用该函数后,输出结果为 0。

ReLU 函数的特点是在输入为正数时保持不变,在输入为负数时将其变为 0。它能够有效地解决梯度消失的问题,并且计算速度较快,在深度神经网络中被广泛使用。

Tanh 函数

Tanh 函数是另一个常