【人工智能99问】神经网络的工作原理是什么?(4/99)

发布于:2025-07-16 ⋅ 阅读:(22) ⋅ 点赞:(0)

神经网络的工作原理

神经网络是一种模仿生物神经网络的结构和功能的人工智能模型,广泛应用于图像识别、语音识别、自然语言处理等领域。以下是对神经网络的工作原理、工作步骤的详细介绍,并通过一个简单的例子来说明。

一、神经网络的工作原理

(一)神经元模型

神经网络的基本单元是神经元,也称为节点。每个神经元接收多个输入信号,对这些信号进行加权求和,然后通过一个非线性激活函数(如 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=1nwixi+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ηwL

  • w old w{\text{old}} wold 是旧权重;
  • w new w{\text{new}} wnew 是新权重;
  • η \eta η 是学习率,控制权重更新的步长;
  • ∂ L ∂ w \frac{\partial L}{\partial w} wL 是损失函数对权重的梯度。

二、神经网络的工作步骤

(一)数据准备

  • 收集数据:根据问题需求,收集相关的数据集。
  • 数据预处理:包括数据清洗、归一化、标准化等操作,使数据适合神经网络的输入。

(二)网络构建

  • 确定网络结构:选择输入层、隐藏层和输出层的神经元数量,以及隐藏层的数量。
  • 初始化权重和偏置:通常使用随机初始化的方法,为权重和偏置赋予初始值。

(三)前向传播

  • 输入数据:将预处理后的数据输入到神经网络的输入层。
  • 计算每一层的输出:逐层计算每一层的输出,直到得到输出层的结果。

(四)损失计算

  • 计算损失函数的值:根据预测值和真实值,计算损失函数的值,评估神经网络的性能。

(五)反向传播

  • 计算梯度:从输出层开始,逐层向前计算损失函数对每个权重的梯度。
  • 更新权重:根据梯度下降法,更新每个权重的值。

(六)迭代训练

  • 重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值,或者达到预设的训练轮数。

(七)模型评估

  • 使用测试集评估模型的性能,计算准确率、召回率等指标,判断模型是否满足要求。

三、举例说明

假设我们有一个简单的二分类问题,目标是根据输入的两个特征 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=W2a1+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+e0.68910.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=[ylog(a2)+(1y)log(1a2)]=[0log(0.666)+1log(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 a2L=a2y+1a21y=0.6660+0.33413.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 z2a2=a2(1a2)=0.666×0.3340.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 z2L=a2Lz2a2=3.0×0.2220.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} a1L=W2Tz2L=[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 的导数}) z1a1=[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} z1L=a1Lz1a1=[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ηW2L=[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ηb2L=0.50.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ηW1L=[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ηb1L=[0.10.2]0.1×[0.20.266]=[0.080.173]

(六)迭代训练

重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值。

(七)模型评估

使用测试集评估模型的性能,计算准确率等指标。

通过这个简单的例子,我们可以看到神经网络是如何通过前向传播计算输出,通过反向传播更新权重,从而不断优化模型的。


网站公告

今日签到

点亮在社区的每一天
去签到