文章目录
激活函数
激活函数在神经网络中扮演着至关重要的角色,主要用于引入非线性,使神经网络能够学习和表示复杂数据,如图像、声音、文本等。以下是几种常见的激活函数及其数学表达式。
1. Sigmoid 激活函数
Sigmoid 函数是一个经典的激活函数,通常用于二分类问题中。它的数学表达式为:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
Sigmoid 函数的输出范围在 0 到 1 之间,适合用作输出概率。然而,它也存在梯度消失问题,特别是当 x 的值非常大或非常小的时候。
例子及推导过程
假设卷积操作的输出特征图为:
[
0.8
−
0.9
1.2
−
1.1
]
\begin{bmatrix} 0.8 & -0.9 \\ 1.2 & -1.1 \\ \end{bmatrix}
[0.81.2−0.9−1.1]
应用 Sigmoid 激活函数的计算过程是将这个特征图中的每个元素通过 Sigmoid 函数转换。Sigmoid 函数的数学表达式是 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1。
因此,Sigmoid 激活后的特征图为:
[
σ
(
0.8
)
σ
(
−
0.9
)
σ
(
1.2
)
σ
(
−
1.1
)
]
\begin{bmatrix} \sigma(0.8) & \sigma(-0.9) \\ \sigma(1.2) & \sigma(-1.1) \\ \end{bmatrix}
[σ(0.8)σ(1.2)σ(−0.9)σ(−1.1)]=
[
1
1
+
e
−
0.8
1
1
+
e
0.9
1
1
+
e
−
1.2
1
1
+
e
1.1
]
\begin{bmatrix} \frac{1}{1 + e^{-0.8}} & \frac{1}{1 + e^{0.9}} \\ \frac{1}{1 + e^{-1.2}} & \frac{1}{1 + e^{1.1}} \\ \end{bmatrix}
[1+e−0.811+e−1.211+e0.911+e1.11]
代码
import numpy as np
# Sigmoid 激活函数定义
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 假设的卷积层输出特征图
feature_map = np.array([[0.8, -0.9], [1.2, -1.1]])
# 应用 Sigmoid 激活函数
activated_feature_map = sigmoid(feature_map)
print("Sigmoid 激活后的特征图:\n", activated_feature_map)
2. ReLU 激活函数
ReLU(Rectified Linear Unit)函数是深度学习中最常用的激活函数之一。它的数学表达式为:
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
ReLU 函数在正数区间内保持线性,这使得计算效率非常高。但在负数区间内,它不进行激活,可能导致“死神经元”问题。
例子及推导过程
假设我们有以下输入数据和权重:
- 输入值: ( x = [1.0, -2.0, 3.0] )
- 权重: ( w = [0.4, 0.3, 0.5] )
- 偏置: ( b = -0.5 )
计算加权输入 ( z ):
z
=
w
1
×
x
1
+
w
2
×
x
2
+
w
3
×
x
3
+
b
z = w_1 \times x_1 + w_2 \times x_2 + w_3 \times x_3 + b
z=w1×x1+w2×x2+w3×x3+b
z
=
0.4
×
1.0
+
0.3
×
(
−
2.0
)
+
0.5
×
3.0
−
0.5
z = 0.4 \times 1.0 + 0.3 \times (-2.0) + 0.5 \times 3.0 - 0.5
z=0.4×1.0+0.3×(−2.0)+0.5×3.0−0.5
应用 ReLU 激活函数:
ReLU
(
z
)
=
max
(
0
,
z
)
\text{ReLU}(z) = \max(0, z)
ReLU(z)=max(0,z)
在此例中,我们首先计算了加权输入 z,然后应用了 ReLU 函数。ReLU 函数的作用是将所有负值置为 0,而保留正值不变
3. Tanh 激活函数
Tanh 函数是 Sigmoid 函数的变体,输出范围在 -1 到 1 之间。其数学表达式为:
tanh ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+e−xex−e−x
Tanh 函数的输出是零中心的,这使得在某些情况下,它比 Sigmoid 函数表现更好。
例子及推导过程
假设卷积操作的输出特征图为:
[
0.5
−
0.6
0.9
−
1.0
]
\begin{bmatrix} 0.5 & -0.6 \\ 0.9 & -1.0 \\ \end{bmatrix}
[0.50.9−0.6−1.0]
应用 Tanh 激活函数的计算过程是将这个特征图中的每个元素通过 Tanh 函数转换。Tanh 函数的数学表达式是 tanh ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+e−xex−e−x。
因此,Tanh 激活后的特征图为:
[
tanh
(
0.5
)
tanh
(
−
0.6
)
tanh
(
0.9
)
tanh
(
−
1.0
)
]
\begin{bmatrix} \tanh(0.5) & \tanh(-0.6) \\ \tanh(0.9) & \tanh(-1.0) \\ \end{bmatrix}
[tanh(0.5)tanh(0.9)tanh(−0.6)tanh(−1.0)]=
[
e
0.5
−
e
−
0.5
e
0.5
+
e
−
0.5
e
−
0.6
−
e
0.6
e
−
0.6
+
e
0.6
e
0.9
−
e
−
0.9
e
0.9
+
e
−
0.9
e
−
1.0
−
e
1.0
e
−
1.0
+
e
1.0
]
\begin{bmatrix} \frac{e^{0.5} - e^{-0.5}}{e^{0.5} + e^{-0.5}} & \frac{e^{-0.6} - e^{0.6}}{e^{-0.6} + e^{0.6}} \\ \frac{e^{0.9} - e^{-0.9}}{e^{0.9} + e^{-0.9}} & \frac{e^{-1.0} - e^{1.0}}{e^{-1.0} + e^{1.0}} \\ \end{bmatrix}
[e0.5+e−0.5e0.5−e−0.5e0.9+e−0.9e0.9−e−0.9e−0.6+e0.6e−0.6−e0.6e−1.0+e1.0e−1.0−e1.0]
代码
import numpy as np
# Tanh 激活函数定义
def tanh(x):
return np.tanh(x)
# 假设的卷积层输出特征图
feature_map = np.array([[0.5, -0.6], [0.9, -1.0]])
# 应用 Tanh 激活函数
activated_feature_map = tanh(feature_map)
print("Tanh 激活后的特征图:\n", activated_feature_map)
4. Softmax 激活函数
Softmax 函数通常用于多分类神经网络的输出层。它将输入转换为概率分布。对于给定的类别集合,Softmax 的数学表达式为:
Softmax ( x i ) = e x i ∑ j e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} Softmax(xi)=∑jexjexi
其中 ( x_i ) 是一个特定输出节点的输入,分母是所有输出节点输入的指数和。这确保了所有输出概率的总和为 1。
例子及推导过程
假设一个多分类问题的输出层得到以下得分:
scores
=
[
2.0
,
1.0
,
0.1
]
\text{scores} = [2.0, 1.0, 0.1]
scores=[2.0,1.0,0.1]
应用 Softmax 激活函数的计算过程是将这些得分通过 Softmax 函数转换。Softmax 函数的数学表达式是:
Softmax
(
x
i
)
=
e
x
i
∑
j
e
x
j
\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}
Softmax(xi)=∑jexjexi
其中 ( x_i ) 是特定类别的得分,分母是所有类别得分的指数和。
因此,Softmax 激活后的概率分布为:
[
e
2.0
e
2.0
+
e
1.0
+
e
0.1
e
1.0
e
2.0
+
e
1.0
+
e
0.1
e
0.1
e
2.0
+
e
1.0
+
e
0.1
]
\begin{bmatrix} \frac{e^{2.0}}{e^{2.0} + e^{1.0} + e^{0.1}} & \frac{e^{1.0}}{e^{2.0} + e^{1.0} + e^{0.1}} & \frac{e^{0.1}}{e^{2.0} + e^{1.0} + e^{0.1}} \\ \end{bmatrix}
[e2.0+e1.0+e0.1e2.0e2.0+e1.0+e0.1e1.0e2.0+e1.0+e0.1e0.1]
代码
import numpy as np
# Softmax 激活函数定义
def softmax(x):
e_x = np.exp(x - np.max(x)) # 防止数值过大
return e_x / e_x.sum()
# 多分类问题的输出层得分
scores = np.array([2.0, 1.0, 0.1])
# 应用 Softmax 激活函数
probabilities = softmax(scores)
print("Softmax 激活后的概率分布:", probabilities)
CNN 中的卷积层工作原理
卷积神经网络(CNN)中的卷积层主要用于特征提取。卷积操作涉及将卷积核(或滤波器)应用于输入数据。
卷积计算过程
考虑一个简单的例子,我们有一个 3x3 的输入矩阵和一个 2x2 的卷积核:
-
输入矩阵:
[ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{bmatrix} 147258369 -
卷积核:
[ − 1 0 0 1 ] \begin{bmatrix} -1 & 0 \\ 0 & 1 \\ \end{bmatrix} [−1001]
卷积操作包括将卷积核滑动过输入矩阵的每个区域,并计算元素的点乘,然后将结果求和。
例如,卷积核覆盖输入矩阵左上角时的计算:
[
1
2
4
5
]
⊙
[
−
1
0
0
1
]
=
1
×
(
−
1
)
+
2
×
0
+
4
×
0
+
5
×
1
=
4
\begin{bmatrix} 1 & 2 \\ 4 & 5 \\ \end{bmatrix} \odot \begin{bmatrix} -1 & 0 \\ 0 & 1 \\ \end{bmatrix} = 1 \times (-1) + 2 \times 0 + 4 \times 0 + 5 \times 1 = 4
[1425]⊙[−1001]=1×(−1)+2×0+4×0+5×1=4
这个过程在整个输入矩阵上重复进行,生成输出特征图。
卷积后的输出及 ReLU 应用
假设卷积操作的输出特征图为:
[
4
3
2
1
]
\begin{bmatrix} 4 & 3 \\ 2 & 1 \\ \end{bmatrix}
[4231]
应用 ReLU 激活函数的计算过程是将这个特征图中的每个元素与 0 比较,取较大者。ReLU 函数的数学表达式是 ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
因此,ReLU 激活后的特征图为:
[
max
(
0
,
4
)
max
(
0
,
3
)
max
(
0
,
2
)
max
(
0
,
1
)
]
\begin{bmatrix} \max(0, 4) & \max(0, 3) \\ \max(0, 2) & \max(0, 1) \\ \end{bmatrix}
[max(0,4)max(0,2)max(0,3)max(0,1)]=
[
4
3
2
1
]
\begin{bmatrix} 4 & 3 \\ 2 & 1 \\ \end{bmatrix}
[4231]
在这个例子中,由于所有值都是正的,ReLU 激活后的特征图与原特征图相同。