神经网络传递函数与激活函数
神经网络是一种模仿人脑神经系统的人工智能模型。在神经网络中,每个神经元都有一个传递函数和一个激活函数。传递函数决定了神经元接收到的输入如何传递给下一层神经元,而激活函数则决定了神经元的输出。
传递函数
传递函数用于计算神经元接收到的输入如何传递给下一层神经元。传递函数可以是线性的,也可以是非线性的。常见的传递函数有线性传递函数和非线性传递函数。下面我们来看一下这两种传递函数的特点和代码示例。
线性传递函数
线性传递函数将输入直接传递给输出,没有任何改变。它的计算公式可以表示为:
$$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 函数是另一个常