在第六天的学习中我们对神经网络有了一个大概的了解,今天我们来细讲***神经网络-正向传播算法***
正向传播(Forward Propagation)详细讲解
正向传播的基本概念
正向传播是指将输入数据逐层传递,通过神经元的计算和激活函数的作用,最终得到输出结果的过程。在这一过程中,每一层的神经元根据前一层的输出进行计算,并通过激活函数得到输出值。
神经网络结构概述
在介绍正向传播算法之前,首先了解一下神经网络的基本结构:
- 输入层:接受原始数据输入,通常不进行计算,只是简单地传递数据。
- 隐藏层:包含多个神经元,对输入数据进行复杂的特征提取和处理。隐藏层可以有多层,这使得神经网络具备强大的学习能力。
- 输出层:将最后一层隐藏层的输出进行处理,生成最终的预测结果。
激活函数的作用
激活函数用于引入非线性特性,使神经网络能够学习复杂的模式。如果没有激活函数,神经网络的每一层都只是线性变换,整个网络只能表达线性关系。常见的激活函数包括:
- ReLU(Rectified Linear Unit): f ( x ) = max ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)
- Sigmoid: f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e−x1
- Tanh(双曲正切函数): f ( x ) = tanh ( x ) f(x) = \tanh(x) f(x)=tanh(x)
正向传播的步骤详细说明
正向传播的基本步骤如下:
- 输入数据的传递:输入层将数据传递到第一隐藏层。
- 各层神经元的计算过程:每个神经元计算加权输入的线性组合,然后通过激活函数得到输出。
- 最终输出的计算:输出层神经元将最后一隐藏层的输出进行处理,得到最终结果。
让我们通过一个具体的示例来详细说明这些步骤。
示例:单隐藏层神经网络的正向传播
假设我们有一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。输入层有两个输入特征 x 1 x_1 x1 和 x 2 x_2 x2,隐藏层有两个神经元,输出层有一个神经元。
第一步:输入层到隐藏层
输入层直接将输入数据传递到隐藏层。假设输入数据为 [ x 1 , x 2 ] [x_1, x_2] [x1,x2]。
第二步:隐藏层的计算
隐藏层的每个神经元进行以下计算:
z
1
=
w
11
⋅
x
1
+
w
12
⋅
x
2
+
b
1
z_1 = w_{11} \cdot x_1 + w_{12} \cdot x_2 + b_1
z1=w11⋅x1+w12⋅x2+b1
a 1 = f ( z 1 ) a_1 = f(z_1) a1=f(z1)
z 2 = w 21 ⋅ x 1 + w 22 ⋅ x 2 + b 2 z_2 = w_{21} \cdot x_1 + w_{22} \cdot x_2 + b_2 z2=w21⋅x1+w22⋅x2+b2
a 2 = f ( z 2 ) a_2 = f(z_2) a2=f(z2)
其中, w i j w_{ij} wij是输入到隐藏层的权重, b i b_i bi是偏置, f f f是激活函数, z z z是线性组合的结果, a a a 是激活函数的输出。
第三步:隐藏层到输出层
隐藏层的输出作为输入传递到输出层,输出层的神经元进行以下计算:
z
3
=
w
31
⋅
a
1
+
w
32
⋅
a
2
+
b
3
z_3 = w_{31} \cdot a_1 + w_{32} \cdot a_2 + b_3
z3=w31⋅a1+w32⋅a2+b3
y = f ( z 3 ) y = f(z_3) y=f(z3)
其中, w 3 i w_{3i} w3i 是隐藏层到输出层的权重, b 3 b_3 b3 是输出层的偏置, y y y是最终的输出。
具体示例代码
下面是一个使用Python和NumPy实现的简单单隐藏层神经网络的正向传播过程:
import numpy as np
# 定义激活函数(ReLU)
def relu(x):
return np.maximum(0, x)
# 输入数据
inputs = np.array([0.5, 0.2])
# 权重和偏置
weights_input_hidden = np.array([[0.1, 0.2], [0.3, 0.4]])
bias_hidden = np.array([0.1, 0.2])
weights_hidden_output = np.array([0.5, 0.6])
bias_output = 0.1
# 正向传播:输入层到隐藏层
hidden_layer_input = np.dot(inputs, weights_input_hidden) + bias_hidden
hidden_layer_output = relu(hidden_layer_input)
# 正向传播:隐藏层到输出层
output_layer_input = np.dot(hidden_layer_output, weights_hidden_output) + bias_output
output = relu(output_layer_input)
print("隐藏层输出:", hidden_layer_output)
print("最终输出:", output)
在这个示例中,我们定义了一个简单的神经网络,并通过正向传播计算得到最终输出。我们使用ReLU作为激活函数,并初始化了权重和偏置。通过这个示例,我们可以清楚地看到正向传播的每一步计算过程。
总结
正向传播是神经网络中的基本过程,通过将输入数据逐层传递和计算,最终得到输出结果。激活函数在正向传播中起到了关键作用,使神经网络能够学习和表达复杂的非线性关系。通过理解和实现正向传播算法,初学者可以深入理解神经网络的工作原理,为进一步学习和应用打下坚实基础。