文章目录
神经网络的工作原理
神经网络是一种模仿生物神经网络的结构和功能的人工智能模型,广泛应用于图像识别、语音识别、自然语言处理等领域。以下是对神经网络的工作原理、工作步骤的详细介绍,并通过一个简单的例子来说明。
一、神经网络的工作原理
(一)神经元模型
神经网络的基本单元是神经元,也称为节点。每个神经元接收多个输入信号,对这些信号进行加权求和,然后通过一个非线性激活函数(如 Sigmoid、ReLU 等)进行处理,输出一个信号。神经元的数学模型可以表示为:
y = f ( ∑ i = 1 n w i x i + b ) y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) y=f(i=1∑nwixi+b)
- x i x_i xi 是输入信号;
- w i w_i wi 是输入信号的权重,表示输入信号的重要性;
- b b b 是偏置项,用于调整神经元的激活阈值;
- f f f 是激活函数,用于引入非线性特性。
(二)网络结构
神经网络通常由输入层、隐藏层和输出层组成。输入层接收外部数据,隐藏层对数据进行特征提取和转换,输出层输出最终结果。隐藏层的数量和每层的神经元数量可以根据具体问题进行调整。
(三)前向传播
在神经网络中,数据从输入层经过隐藏层逐层传递到输出层的过程称为前向传播。每一层的神经元都会对前一层的输出进行加权求和和激活处理,最终得到输出层的结果。
(四)损失函数
损失函数用于衡量神经网络的预测值与真实值之间的差异。常见的损失函数有均方误差(MSE)、交叉熵损失等。损失函数的值越小,表示神经网络的预测越准确。
(五)反向传播
反向传播是神经网络训练的核心算法。通过计算损失函数对每个权重的梯度,利用梯度下降法更新权重,从而最小化损失函数。反向传播的过程是从输出层开始,逐层向前计算梯度,并更新权重。
(六)权重更新
权重更新是根据梯度下降法进行的。具体公式为:
w new = w old − η ⋅ ∂ L ∂ w w{\text{new}} = w{\text{old}} - \eta \cdot \frac{\partial L}{\partial w} wnew=wold−η⋅∂w∂L
- w old w{\text{old}} wold 是旧权重;
- w new w{\text{new}} wnew 是新权重;
- η \eta η 是学习率,控制权重更新的步长;
- ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L 是损失函数对权重的梯度。
二、神经网络的工作步骤
(一)数据准备
- 收集数据:根据问题需求,收集相关的数据集。
- 数据预处理:包括数据清洗、归一化、标准化等操作,使数据适合神经网络的输入。
(二)网络构建
- 确定网络结构:选择输入层、隐藏层和输出层的神经元数量,以及隐藏层的数量。
- 初始化权重和偏置:通常使用随机初始化的方法,为权重和偏置赋予初始值。
(三)前向传播
- 输入数据:将预处理后的数据输入到神经网络的输入层。
- 计算每一层的输出:逐层计算每一层的输出,直到得到输出层的结果。
(四)损失计算
- 计算损失函数的值:根据预测值和真实值,计算损失函数的值,评估神经网络的性能。
(五)反向传播
- 计算梯度:从输出层开始,逐层向前计算损失函数对每个权重的梯度。
- 更新权重:根据梯度下降法,更新每个权重的值。
(六)迭代训练
- 重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值,或者达到预设的训练轮数。
(七)模型评估
- 使用测试集评估模型的性能,计算准确率、召回率等指标,判断模型是否满足要求。
三、举例说明
假设我们有一个简单的二分类问题,目标是根据输入的两个特征 x 1 x_1 x1 和 x 2 x_2 x2 判断样本属于类别 0 还是类别 1。我们将使用一个简单的神经网络来解决这个问题。
(一)数据准备
假设我们有以下数据集:
x 1 x_1 x1 | x 2 x_2 x2 | 标签 |
---|---|---|
0.1 | 0.2 | 0 |
0.3 | 0.4 | 0 |
0.5 | 0.6 | 1 |
0.7 | 0.8 | 1 |
(二)网络构建
我们构建一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。输入层有 2 个神经元(对应 x 1 x_1 x1 和 x 2 x_2 x2),隐藏层有 2 个神经元,输出层有 1 个神经元(用于输出类别概率)。
(三)前向传播
假设输入样本为 ( 0.1 , 0.2 ) (0.1, 0.2) (0.1,0.2),权重和偏置的初始值如下:
- 输入层到隐藏层的权重: W 1 = [ 0.5 0.6 0.7 0.8 ] \mathbf{W_1} = \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix} W1=[0.50.70.60.8],偏置: b 1 = [ 0.1 0.2 ] \mathbf{b_1} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix} b1=[0.10.2]
- 隐藏层到输出层的权重: W 2 = [ 0.3 0.4 ] \mathbf{W_2} = \begin{bmatrix} 0.3 & 0.4 \end{bmatrix} W2=[0.30.4],偏置: b 2 = 0.5 \mathbf{b_2} = 0.5 b2=0.5
1. 隐藏层计算:
z 1 = W 1 ⋅ [ 0.1 0.2 ] + b 1 = [ 0.5 × 0.1 + 0.6 × 0.2 + 0.1 0.7 × 0.1 + 0.8 × 0.2 + 0.2 ] = [ 0.27 0.33 ] \mathbf{z_1} = \mathbf{W_1} \cdot \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix} + \mathbf{b_1} = \begin{bmatrix} 0.5 \times 0.1 + 0.6 \times 0.2 + 0.1 \\ 0.7 \times 0.1 + 0.8 \times 0.2 + 0.2 \end{bmatrix} = \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} z1=W1⋅[0.10.2]+b1=[0.5×0.1+0.6×0.2+0.10.7×0.1+0.8×0.2+0.2]=[0.270.33]
使用 ReLU 激活函数:
a 1 = ReLU ( z 1 ) = [ 0.27 0.33 ] \mathbf{a_1} = \text{ReLU}(\mathbf{z_1}) = \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} a1=ReLU(z1)=[0.270.33]
2. 输出层计算:
z 2 = W 2 ⋅ a 1 + b 2 = 0.3 × 0.27 + 0.4 × 0.33 + 0.5 = 0.689 z_2 = \mathbf{W_2} \cdot \mathbf{a_1} + b_2 = 0.3 \times 0.27 + 0.4 \times 0.33 + 0.5 = 0.689 z2=W2⋅a1+b2=0.3×0.27+0.4×0.33+0.5=0.689
使用 Sigmoid 激活函数:
a 2 = Sigmoid ( z 2 ) = 1 1 + e − 0.689 ≈ 0.666 a_2 = \text{Sigmoid}(z_2) = \frac{1}{1 + e^{-0.689}} \approx 0.666 a2=Sigmoid(z2)=1+e−0.6891≈0.666
(四)损失计算
假设真实标签为 0,使用二元交叉熵损失函数:
L = − [ y ⋅ log ( a 2 ) + ( 1 − y ) ⋅ log ( 1 − a 2 ) ] = − [ 0 ⋅ log ( 0.666 ) + 1 ⋅ log ( 0.334 ) ] ≈ 1.098 L = -[y \cdot \log(a_2) + (1 - y) \cdot \log(1 - a_2)] = -[0 \cdot \log(0.666) + 1 \cdot \log(0.334)] \approx 1.098 L=−[y⋅log(a2)+(1−y)⋅log(1−a2)]=−[0⋅log(0.666)+1⋅log(0.334)]≈1.098
(五)反向传播
1. 计算输出层梯度:
∂ L ∂ a 2 = − y a 2 + 1 − y 1 − a 2 = − 0 0.666 + 1 0.334 ≈ 3.0 \frac{\partial L}{\partial a_2} = -\frac{y}{a_2} + \frac{1 - y}{1 - a_2} = -\frac{0}{0.666} + \frac{1}{0.334} \approx 3.0 ∂a2∂L=−a2y+1−a21−y=−0.6660+0.3341≈3.0
∂ a 2 ∂ z 2 = a 2 ( 1 − a 2 ) = 0.666 × 0.334 ≈ 0.222 \frac{\partial a_2}{\partial z_2} = a_2 (1 - a_2) = 0.666 \times 0.334 \approx 0.222 ∂z2∂a2=a2(1−a2)=0.666×0.334≈0.222
∂ L ∂ z 2 = ∂ L ∂ a 2 ⋅ ∂ a 2 ∂ z 2 = 3.0 × 0.222 ≈ 0.666 \frac{\partial L}{\partial z_2} = \frac{\partial L}{\partial a_2} \cdot \frac{\partial a_2}{\partial z_2} = 3.0 \times 0.222 \approx 0.666 ∂z2∂L=∂a2∂L⋅∂z2∂a2=3.0×0.222≈0.666
2. 计算隐藏层梯度:
∂ L ∂ a 1 = W 2 T ⋅ ∂ L ∂ z 2 = [ 0.3 0.4 ] × 0.666 = [ 0.2 0.266 ] \frac{\partial L}{\partial \mathbf{a_1}} = \mathbf{W_2}^T \cdot \frac{\partial L}{\partial z_2} = \begin{bmatrix} 0.3 \\ 0.4 \end{bmatrix} \times 0.666 = \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} ∂a1∂L=W2T⋅∂z2∂L=[0.30.4]×0.666=[0.20.266]
∂ a 1 ∂ z 1 = [ 1 1 ] ( ReLU 的导数 ) \frac{\partial \mathbf{a_1}}{\partial \mathbf{z_1}} = \begin{bmatrix} 1 \\ 1 \end{bmatrix} \quad (\text{ReLU 的导数}) ∂z1∂a1=[11](ReLU 的导数)
∂ L ∂ z 1 = ∂ L ∂ a 1 ⊙ ∂ a 1 ∂ z 1 = [ 0.2 0.266 ] \frac{\partial L}{\partial \mathbf{z_1}} = \frac{\partial L}{\partial \mathbf{a_1}} \odot \frac{\partial \mathbf{a_1}}{\partial \mathbf{z_1}} = \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} ∂z1∂L=∂a1∂L⊙∂z1∂a1=[0.20.266]
3. 更新权重和偏置:
假设学习率 η = 0.1 \eta = 0.1 η=0.1:
W 2 = W 2 − η ⋅ ∂ L ∂ W 2 = [ 0.3 0.4 ] − 0.1 × 0.666 × [ 0.27 0.33 ] = [ 0.287 0.377 ] \mathbf{W_2} = \mathbf{W_2} - \eta \cdot \frac{\partial L}{\partial \mathbf{W_2}} = \begin{bmatrix} 0.3 \\ 0.4 \end{bmatrix} - 0.1 \times 0.666 \times \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} = \begin{bmatrix} 0.287 \\ 0.377 \end{bmatrix} W2=W2−η⋅∂W2∂L=[0.30.4]−0.1×0.666×[0.270.33]=[0.2870.377]
b 2 = b 2 − η ⋅ ∂ L ∂ b 2 = 0.5 − 0.1 × 0.666 = 0.433 b_2 = b_2 - \eta \cdot \frac{\partial L}{\partial b_2} = 0.5 - 0.1 \times 0.666 = 0.433 b2=b2−η⋅∂b2∂L=0.5−0.1×0.666=0.433
W 1 = W 1 − η ⋅ ∂ L ∂ W 1 = [ 0.5 0.6 0.7 0.8 ] − 0.1 × [ 0.2 × 0.1 0.266 × 0.1 ] = [ 0.498 0.598 0.697 0.797 ] \mathbf{W_1} = \mathbf{W_1} - \eta \cdot \frac{\partial L}{\partial \mathbf{W_1}} = \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix} - 0.1 \times \begin{bmatrix} 0.2 \times 0.1 \\ 0.266 \times 0.1 \end{bmatrix} = \begin{bmatrix} 0.498 & 0.598 \\ 0.697 & 0.797 \end{bmatrix} W1=W1−η⋅∂W1∂L=[0.50.70.60.8]−0.1×[0.2×0.10.266×0.1]=[0.4980.6970.5980.797]
b 1 = b 1 − η ⋅ ∂ L ∂ b 1 = [ 0.1 0.2 ] − 0.1 × [ 0.2 0.266 ] = [ 0.08 0.173 ] \mathbf{b_1} = \mathbf{b_1} - \eta \cdot \frac{\partial L}{\partial \mathbf{b_1}} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix} - 0.1 \times \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} = \begin{bmatrix} 0.08 \\ 0.173 \end{bmatrix} b1=b1−η⋅∂b1∂L=[0.10.2]−0.1×[0.20.266]=[0.080.173]
(六)迭代训练
重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值。
(七)模型评估
使用测试集评估模型的性能,计算准确率等指标。
通过这个简单的例子,我们可以看到神经网络是如何通过前向传播计算输出,通过反向传播更新权重,从而不断优化模型的。